2. Usage

All the functions described below taking an argument n do whatever the manual says they do until some stage n. n is normally a homological degree of some kind. These functions are idempotent in the sense that called a second time with the same argument n, they do nothing, but called with a bigger n, they continue computing from where the previous calculations left off.

2.1 Cohomology Objects

The calculation of group cohomology involves several computations, the results of which are reused in later calculations, and are thus collected in an object of type CObject, created with the following operation.

2.1-1 CohomologyObject
> CohomologyObject( G, k, M )( operation )
> CohomologyObject( G )( operation )

Returns: a cohomology object

This function creates a cohomology object, initially having components the group G, the ring k, and the MeatAxe module M. The second invocation creates a cohomology object, initially having components the p-group G, the finite field GF(p), and the trivial MeatAxe module.

Notwithstanding,the reader shouldn't get too excited about the generality of the first invocation, as the package is not currently designed to work with groups which aren't p-groups or with rings which aren't GF(p). However, you can put whatever $kG$-module you like as the third argument if G is a p-group and k=GF(p). The cohomology object is used to store, in addition to the group, ring, and module mentioned above, the boundary maps, the Betti numbers, the multiplication table, etc.

2.2 Minimal Projective Resolutions

Given a p-group G, the field k=GF(p), and a kG-module M, the function below computes the minimal projective resolution

\[P_n -> ... P_2 -> P_1 -> P_0 -> k \]

with P_i=(kG)^(b_i) for certain numbers b_i, the Betti numbers of the resolution. Then the groups Ext^n(M,N) are simply Hom(P_n,N), and if N=k is the trivial kG-module, then H^n(G,k)=Ext^n(k,k)=k^(b_n).

2.2-1 ProjectiveResolution
> ProjectiveResolution( C, n )( operation )

Returns: a list containing the Betti numbers b_0, b_1,..., b_n

Given a cohomology object C having components G, k, and M, this function computes the first n+1 terms of the minimal projective resolution P* of M of the form P_i=(kG)^(b_i) for i=0,1,...,n, and returns the numbers b_i as a list.

2.3 Cohomology Rings

See [CT+03] for the details of the calculation of cohomology products using composition of chain maps.

2.3-1 CohomologyRing
> CohomologyRing( C, n )( operation )
> CohomologyRing( G, n )( operation )

Returns: the cohomology ring of G

Given a cohomology object C having module component the trivial kG module, possibly with projective resolution already computed, this function returns the degree n truncation of the cohomology ring H*(G,k). The object returned is an structure constant algebra. Users interested only in working with the cohomology ring of a group as a GAP object, and not in calculating generators, relators, induced maps, etc, can use the second invocation of this function, which returns the cohomology ring immediately, throwing away all intermediate calculations.

2.3-2 IsHomogeneous
> IsHomogeneous( e )( operation )

Returns: true or false

Given an element e of some cohomology ring A, this operation determines whether or not e is homogeneous, that is, whether or not e is contained in some hom_component of A.

2.3-3 Degree
> Degree( e )( operation )

Returns: the degree of e

This function is intended to return the degree of the possibly non-homogeneous element e of some cohomology ring A, but in principle, it works for any element of any graded SCAlgebra. Specifically, if A = A_0 + A_1 + A_2 + ..., that is, if the A_i are the hom_components of A, then this function returns the minimum n such that e is in A_0 + A_1 + ... + A_n.



gap> A:=CohomologyRing(DihedralGroup(8),10);
<algebra of dimension 66 over GF(2)>
gap> b:=Basis(A);
CanonicalBasis( <algebra of dimension 66 over GF(2)> )
gap> x:=b[2]+b[4];
v.2+v.4
gap> IsHomogeneous(x);
false
gap> Degree(x);
2 


2.4 Cohomology Generators and Relators

2.4-1 CohomologyGenerators
> CohomologyGenerators( C, n )( operation )

Returns: a list containing the degrees of the generators of the cohomology ring

Given a cohomology object C having components G, k, and M, this function computes the generators of H*(G,k) of degree less than or equal to n, and stores them in C. The function returns a list of the degrees of the generators.

The actual cohomology generators are represented by maps P_n -> k and are stored in C as column vectors. Only their degrees are returned.

2.4-2 CohomologyRelators
> CohomologyRelators( C, n )( operation )

Returns: the generators and the relators

Given a cohomology object C having components G, k, and M, this function computes a set of generators of the ideal of relators of H*(G,k) having multidegree less than or equal to n. The function returns two lists. The first list contains the variables z, y, x, etc. corresponding to the generators of H*(G,k) if there are fewer than 12 generators, and contains the variables X_1, X_2, X_3 otherwise. The second list is a list of polynomials in the variables of the first list. The result of this function should be interpreted as follows. The degree n truncation of the cohomology ring H*(G,k) is the polynomial ring in the noncommuting variables in the first list, having degrees returned by CohomologyGenerators above, and subject to the relators in the second list.

For example, the following commands



gap> C:=CohomologyObject(DihedralGroup(8));
<object>
gap> CohomologyGenerators(C,10);
[ 1, 1, 2 ]
gap> CohomologyRelators(C,10);
[ [ z, y, x ], [ z*y+y^2 ] ]


tell us that for G=D_8, the cohomology ring H*(G,k) is the polynomial ring in non-commuting variables z, y, and x subject to the relations zy+y^2. In fact, since H*(G,k) is graded-commutative, over GF(2), it is commutative so that H*(G,k)=GF(2)[z,y,x]/(zy+y^2).

2.5 Induced Maps

Let f: G -> H be a group homomorphism for p-groups G and H. Then f induces a homomorphism on cohomology H*(H,k) -> H*(G,k) which is returned by the following function.

2.5-1 InducedHomomorphismOnCohomology
> InducedHomomorphismOnCohomology( C, D, f, n )( operation )

Returns: the induced homomorphism on cohomology rings

This function returns the induced homomorphism on cohomology H*(H,k) -> H*(G,k) where the groups G and H are the components of the cohomology objects C and D and f: G -> H is a group homomorphism. If the cohomology rings have not yet been calculated, they will be computed to degree n, and in this case, they can then be accessed by calling CohomologyRing (see 2.3-1).

The following example calculates the homomorphism on cohomology induced by the inclusion of the cyclic group of size 4 into the dihedral group of size 8.



gap> G:=CyclicGroup(4);H:=DihedralGroup(8);
<pc group of size 4 with 2 generators>
<pc group of size 8 with 3 generators>
gap> C:=CohomologyObject(G);D:=CohomologyObject(H);
<object>
<object>
gap> f:=GroupHomomorphismByImages(G,H,[G.1],[H.2]);
[ f1 ] -> [ f2 ]
gap> F:=InducedHomomorphismOnCohomology(C,D,f,10);
CanonicalBasis( <algebra of dimension 66 over GF(2)> ) ->
[ v.1, 0*v.1, v.2, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1,
  0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1,
  0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1,
  0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1,
  0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1,
  0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1,
  0*v.1, 0*v.1, 0*v.1, 0*v.1, 0*v.1 ]
gap> B:=CohomologyRing(D,10);
<algebra of dimension 66 over GF(2)>
gap> B.1^F;B.2^F;
v.1
0*v.1

2.6 Massey Products

See [K66] for the definitions and [B01] for the details of the calculation using the Yoneda cocomplex.

2.6-1 MasseyProduct
> MasseyProduct( x1, x2, ..., xn )( function )

Returns: the Massey product < x1, x2, ... , xn>

Given =x1, x2, ... , xn elements of some cohomology ring returned by CohomologyRing (see 2.3), this function computes the n-fold Massey product < x1, x2, ... , xn > provided that the lower-degree Massey products < x_i ,x_{i+1}, ... , x_j > vanish for all 1 <= i < j <= n, and returns fail otherwise.

As an example, recall that the cohomology rings of the cyclic groups C_3 and C_9 of size 3 and 9 over k=GF(3) are both given by k< z,y >/(z^2), that is, they are isomorphic as rings. However, the following example shows that < z, z, z > is non-zero in H*(C_3,k) but is zero in H*(C_9,k).



gap> A:=CohomologyRing(CyclicGroup(3),10);
<algebra of dimension 11 over GF(3)>
gap> z:=Basis(A)[2];
v.2
gap> MasseyProduct(z,z);
0*v.1
gap> MasseyProduct(z,z,z);
v.3
gap> A:=CohomologyRing(CyclicGroup(9),10);
<algebra of dimension 11 over GF(3)>
gap> z:=Basis(A)[2];
v.2
gap> MasseyProduct(z,z);
0*v.1
gap> MasseyProduct(z,z,z);
0*v.1
gap> MasseyProduct(z,z,z,z,z,z,z,z,z);
v.3





generated by GAPDoc2HTML