# Calculating Cohomology

## `CohomologyGroup(CM, n): ModCoho, RngIntElt -> ModTupRng`

Given a cohomology module ${\rm CM}$ for the group $G$ acting on the module $M$ and a non-negative integer $n$ taking one of the values $0$, $1$ or $2$, this function returns the cohomology group $H^n(G,M)$. For modules defined over the ring of integers only, $n$ may also be equal to 3. (In this case, $H^3(G,M)$ is computed as $H^2(G, M \otimes_Z Q/Z)$.) If the group used to define ${\rm CM}$ was a finitely presented group, then $n$ may only be equal to $0$ or $1$. Note that ${\rm CM}$ must be a module returned by invoking `CohomologyModule`.

## `Example: Coho Module2cont (ex-68b620)`

Following on from example [Example: Coho Module2](creation.md#example-ex-0c0fe6) above:

```magma
> G:=CyclicGroup(4);
> mats := [ Matrix(Integers(),2,2,[1,2,1,3]) ];
> invar := [2,4];
> CM := CohomologyModule(G,invar,mats);
> CohomologyGroup(CM,0);
Full Quotient RSpace of degree 1 over Integer Ring
Column moduli:
[ 2 ]
> CohomologyGroup(CM,1);
Full Quotient RSpace of degree 1 over Integer Ring
Column moduli:
[ 2 ]
> CohomologyGroup(CM,2);
Full Quotient RSpace of degree 1 over Integer Ring
Column moduli:
[ 2 ]

```

## `Example: Coho Module3cont (ex-0db52b)`

Following on from example [Example: Coho Module3](creation.md#example-ex-e9e40a) above:

```magma
> G := Group<x,y | x^2,y^3,(x*y)^7 >;
> L := LowIndexSubgroups(G, <7,7>);
> Q := CosetImage(G,L[1]);
> PM := PermutationModule(Q, Integers());
> cons := Constituents(PM);
> mats := ActionGenerators(cons[2]);
> M := GModule(G,mats);
> CM := CohomologyModule(G,M);
> CohomologyGroup(CM,0);
Full Quotient RSpace of degree 0 over Integer Ring
Column moduli:
[ ]
> CohomologyGroup(CM,1);
Full Quotient RSpace of degree 1 over Integer Ring
Column moduli:
[ 7 ]
> CohomologyGroup(CM,2);
Runtime error: Second cohomology groups are not implemented for GrpFP

```

## `CohomologicalDimension(CM, n): ModCoho, RngIntElt -> RngIntElt`

Given a cohomology module ${\rm CM}$ for the group $G$ acting on the module $M$ defined over a finite field $K$ and a non-negative integer $n$ taking one of the values $0$, $1$ or $2$, this function returns the dimension of $H^n(G,M)$ over $K$. Note that this function may only be applied to the module returned by a call to `CohomologyModule(G, M)`, where $M$ is a module over a finite field $K$. When $n = 2$, this function is faster and may be applied to much larger examples than `CohomologyGroup(CM, n)` but, unlike that function, it does not enable the user to compute with explicit extensions and two-cocycles.

Note that there are some alternative functions for performing these calculations described in other manual chapters.

## `CohomologicalDimension(M, n): ModGrp, n -> RngIntElt`

For $K[G]$-module $M$ (with $K$ a finite field and $G$ a finite group), compute and return the $K$-dimension of the cohomology group $H^n(G,M)$ for $n \ge 0$. For $n=0$ and 1, this is carried out by using the function `CohomologicalDimension(CM,n)` just described. For $n \ge 2$, it is done recursively using projective covers and dimension shifting to reduce to the case $n=1$. See Section [Projective Indecomposable Modules](../../RepresentationTheory/ModulesOverAnAlgebraAndGroupRepresentations/projective-indecomposable-modules.md#projective-indecomposable-modules) in Chapter [Modules over an Algebra and Group Representations](../../RepresentationTheory/ModulesOverAnAlgebraAndGroupRepresentations/index-modules-over-an-algebra-and-group-representations.md#chapmodalg) for further details and examples.

## `CohomologicalDimensions(M, n): ModGrp, n -> RngIntElt`

For $K[G]$-module $M$ (with $K$ a finite field and $G$ a finite group), compute and return the sequence of $K$-dimensions of the cohomology groups $H^k(G,M)$ for $1 \le k \le n$. On account of the recursive method used, this is quicker than computing them all individually.

## `CohomologicalDimension(G, M, n): GrpPerm, ModRng, RngIntElt -> RngIntElt`

Given the permutation group $G$, the $K[G]$-module $M$ and an integer $n$ (equal to 1 or 2), return the dimension of the $n$-th cohomology group of $G$ acting on $M$. *Note that* $K$ *must be a finite field of prime order*. This function invokes Derek Holt’s original C cohomology code (see [[Holt, 1985](../../references.md#cite-holt-cohom)]). In some cases it will be faster than the function that uses the cohomology module data structure.

## `H1Dimension(F, f, M): GrpFP, Map, ModGrp -> RngIntElt`

This function returns the dimension of the first cohomology group of the $F$-module $M_F$, where $F$ is a finitely presented group, $f$ is an epimorphism from $F$ onto a finite group $G$ and $M$ is a $G$-module that has been lifted to $M_F$. Again, this function is generally much faster, since it uses sparse matrices.

## `H1Dimension(G, f, K): GrpFP, Map, Rng -> RngIntElt`

This function is equivalent to `CohomologicalDimension(G, M, 1)` where `M := PermutationModule(P, K)` and $P$ is defined by the images of generators of G under the map $f$, but is generally much faster, since it uses sparse matrices and avoids the explicit construction of the permutation module.

## `H1DimensionSymmetricSquare(G, f, K): GrpFP, Map, Rng -> RngIntElt`

## `H1DimensionExteriorSquare(G, f, K): GrpFP, Map, Rng -> RngIntElt`

These functions are equivalent to `CohomologicalDimension(G, M, 1)` where $M$ is the symmetric square or exterior square, respectively, of `PermutationModule(P, R)`, and $P$ is defined by the images of generators of G under the map $f$. But the functions are generally much faster, since they use sparse matrices and avoid the explicit construction of the modules.

## `Example: Coho Example (ex-096719)`

We examine the first and second cohomology groups of the group $A_8$.

```magma
> G := Alt(8);
> M := PermutationModule(G, GF(3));

```

We first calculate the dimensions of $H^1(G,M)$ and $H^2(G,M)$ using the old functions.

```magma
> time CohomologicalDimension(G, M, 1);
0
Time: 0.020
> time CohomologicalDimension(G, M, 2);
1
Time: 0.020

```

We now recalculate the dimensions of $H^1(G,M)$ and $H^2(G,M)$ using the new functions.

```magma
> X := CohomologyModule(G, M);
> time CohomologicalDimension(X, 1);
0
Time: 0.020
> time CohomologicalDimension(X, 2);
1
Time: 0.920
> X := CohomologyModule(G, M);
> time C:=CohomologyGroup(X, 2);
Time: 4.070
> C;
Full Vector space of degree 1 over GF(3)

```

## `Example: Coho Module4 Cont (ex-46f77b)`

We do a similar comparison with Example [Example: Coho Module4](creation.md#example-ex-233494) above.

```magma
> G := ASL(3,5);
> N := pCore(G,5);
> M := GModule(G,N);
> CM := CohomologyModule(G,M);
> time [CohomologyGroup(CM,i) : i in [0..2]];
[
    Full Vector space of degree 0 over GF(5),

    Full Vector space of degree 1 over GF(5),

    Full Vector space of degree 1 over GF(5)
]
Time: 46.940
> CM := CohomologyModule(G,M);
> time [CohomologicalDimension(CM,i) : i in [0..2]];
[ 0, 1, 1 ]
Time: 0.320

```

## `Example: More Difficult (ex-023d07)`

In the case of $\Omega^-(8,3)$ acting on its natural module, the new function succeeds, but the old function does not.

```magma
> G := OmegaMinus(8, 3);
> M := GModule(G);
> X := CohomologyModule(G, M);
> time CohomologicalDimension(X, 2);
2
Time: 290.280
> phi, P := PermutationRepresentation(G);
> MM := GModule(P, [ActionGenerator(M, i): i in [1..Ngens(G)]] );
> time CohomologicalDimension(P, MM, 2);

Out of space.

>> time CohomologicalDimension(P, MM, 2);
                              ^
Runtime error in 'CohomologicalDimension': Cohomology failed

```
