


The
first step in attempting to calculate the cohomology of a group G is to
decide on how best to represent the group. In some cases G will admit a
decomposition into subgroups and quotient groups where the various
component groups need to be represented differently. We try to
illustrate this
with a simple example. Consider the tessellation of the plane R^{2} by congruent equilateral triangles, and let G be the group of isometries of the plane which preserve this tessellation. The group G is generated by two translations S,T together with two reflections X,Y. By using the embedding R^{2} → R^{3 }(u,v) → (u,v,1) these affine transformations can be represented as 3×3 matrices involving the square root of 3. The following commands construct G. 

gap>
x:=Indeterminate(Rationals);; gap> p:=x^23;; gap> K:=AlgebraicExtension(Rationals,p);; gap> one:=One(K);; gap> rt3:=RootOfDefiningPolynomial(K);; gap> reflectionX:=[[1,0,0],[0,1,0],[0,0,1]]*one;; gap> reflectionY:=[[1/2,rt3/2,0],[rt3/2,1/2,0],[0,0,1]]*one;; gap> translationS:=[[1,0,2],[0,1,0],[0,0,1]]*one;; gap> translationT:=[[1,0,1],[0,1,rt3],[0,0,1]]*one;; gap> G:=Group([reflectionX,reflectionY,translationS,translationT]);; gap> P:=Group([reflectionX,reflectionY]);; gap> N:=Group([translationS,translationT]);; 

The
linear isometries in G form a finite group P (called the point group). The translations S
and T generate a free abelian group N. The general theory of space
groups tells us that N is normal in G and that the quotient G/N is
isomorphic to P. The groups N and P are created above. The
following command shows that P is the symmetric group of degree 3. 

gap>
StructureDescription(P); "S3" 

We
can construct a ZPresolution as
follows. 

gap>
RP:=ResolutionFiniteGroup(P,12);; 

Using
the fact that N is free abelian of rank 2 we construct a ZNresolution
as follows. 

gap>
RN:=ResolutionAbelianGroup([0,0],12);; gap> fpN:=RN!.group;; gap> fpNhomN:=GroupHomomorphismByImages(fpN,N, GeneratorsOfGroup(fpN),[translationS,translationT]);; gap> RN!.group:=N;; gap> RN!.elts:=List(RN!.elts,x>Image(fpNhomN,x));; 

We
construct a homomorphism G→P, together with a section P→G, as
follows. 

gap>
################################ gap> GhomPfn:=function(MM) > local M,i,j; > M:=[]; > for i in [1..3] do M[i]:=[]; > for j in [1..3] do > M[i][j]:=MM[i][j]; > od; > od; > M[1][3]:=0*one; > M[2][3]:=0*one; > return M; > end;; gap> ################################ gap> GhomP:=GroupHomomorphismByFunction(G,P,GhomPfn); gap> PmapG:=function(MM); return MM; end; 

We
can now combine the ZPresolution and ZNresolution into a free
ZGresolution as follows. 

gap>
RG:=ResolutionExtension(GhomP,RN,RP,"Don't Test Finiteness", PmapG);; 

The following commands show that H_{1}(G,Z)=Z_{2}, H_{2}(G,Z)=Z_{2}, H_{3}(G,Z)=Z_{3}+Z_{3}+Z_{6}, H_{4}(G,Z)=Z_{2 }and suggest that the homology is periodic with period 4.  
gap>
TRG:=TensorWithIntegers(RG);; gap> for n in [1..11] do > Print("The homology in dimension ",n," is ",Homology(TRG,n),"\n"); > od; The homology in dimension 1 is [ 2 ] The homology in dimension 2 is [ 2 ] The homology in dimension 3 is [ 3, 3, 6 ] The homology in dimension 4 is [ 2 ] The homology in dimension 5 is [ 2 ] The homology in dimension 6 is [ 2 ] The homology in dimension 7 is [ 3, 3, 6 ] The homology in dimension 8 is [ 2 ] The homology in dimension 9 is [ 2 ] The homology in dimension 10 is [ 2 ] The homology in dimension 11 is [ 3, 3, 6] 

The following
command shows however that the resolution RG is not periodic with
period 4. 

gap>
List([1..11],n>RG!.dimension(n)); [ 4, 8, 12, 16, 21, 28, 36, 44, 52, 60, 68 ] 

The
following command yields the presentation <s, t, a, y  a^{3} =
y^{2} = (ay)^{2} = sat^{1}sa^{1} =
tasa^{1} = (sy)^{2} = tyt^{1}sy, tst^{1}s^{1}
>
for the infinite group G.


gap>
PresentationOfResolution(RG); rec( freeGroup := <free group on the generators [ f1, f2, f3, f4 ]>, relators := [ f4^2, f3^3, f3*f4*f3*f4, f1*f3*f2^1*f1*f3^1, f2*f3*f1*f3^1, f1*f4*f1*f4, f2*f4*f2^1*f1*f4, f2*f1*f2^1*f1^1 ] ) 

A
periodic ZGresolution can be obtained by replacing the above
ZPresolution by a periodic one. The following additional commands
construct such a periodic ZGresolution. 

gap>
F:=FreeGroup(2);; gap> relators:=[ F.1^2, F.1*F.2*F.1^1*F.2^2 ];; gap> RP:=ResolutionSmallFpGroup(F/relators,12);; gap> hom:=GroupHomomorphismByImagesNC(RP!.group,P, GeneratorsOfGroup(RP!.group), [reflectionX,reflectionX*reflectionY]);; gap> Order(Kernel(hom)); 1 gap> Order(Image(hom)); 6 gap> # So hom is an isomorphism. gap> RP!.group:=P;; gap> RP!.elts:=List(RP!.elts,x>Image(hom,x));; gap> RG:=ResolutionExtension(GhomP,RN,RP,"Don't Test Finiteness", PmapG);; gap> List([1..11],n>RG!.dimension(n)); [ 4, 7, 7, 5, 5, 7, 7, 5, 5, 7, 7 ] 

The
above techniques can be applied to any almost crystallographic group G
(that is, a nilpotentbyfinite group G with no nontrivial finite
normal subgroups).
Such groups can be produced using the Cryst and AClib packages. The function ResolutionAlmostCrystalGroup(G,n) allows one to construct the resolution directly if G is an almost crystallographic pcp group. For example, the following commands compute the ranks of the mod 2 cohomology of a 2dimensional space group with point group equal to the cyclic group of order 4. 

gap>
G:=SpaceGroup(2,10);; gap> StructureDescription(PointGroup(G)); "C4" gap> G:=Image(IsomorphismPcpGroup(G));; gap> R:=ResolutionAlmostCrystalGroup(G,6);; gap> HomR:=HomToIntegersModP(R,2);; gap> for n in [1..5] do > Print("The mod 2 cohomology in dimension ",n," has rank ",Cohomology(HomR,n),"\n"); > od; The mod 2 cohomology in dimension 1 has rank 2 The mod 2 cohomology in dimension 2 has rank 3 The mod 2 cohomology in dimension 3 has rank 3 The mod 2 cohomology in dimension 4 has rank 3 The mod 2 cohomology in dimension 5 has rank 3 

An
almost crsystallographic group G has a normal nilpotent subgroup T of
finite index. We define T_{1}=T and T_{c+1}=[T_{c},G].
The command ResolutionAlmostCrystallographicQuotient(G,n,c) produces a
free ZQresolution for the group Q=G/T_{c}. The following commands calculate the ranks of the mod 2 cohomology of Q=G/T_{c} for the preceding space group G and c=2,3,4,5. 

gap>
#CASE C=2. gap> S:=ResolutionAlmostCrystalQuotient(G,6,2);; Q:=S!.group;; gap> Order(Q); 8 gap> Coclass(Q); 2 gap> HomS:=HomToIntegersModP(S,2);; gap> for n in [1..5] do > Print("The mod 2 cohomology in dimension ",n," has rank ",Cohomology(HomS,n), "\n"); > od; The mod 2 cohomology in dimension 1 has rank 2 The mod 2 cohomology in dimension 2 has rank 3 The mod 2 cohomology in dimension 3 has rank 4 The mod 2 cohomology in dimension 4 has rank 5 The mod 2 cohomology in dimension 5 has rank 6 gap> #CASE C=3. gap> S:=ResolutionAlmostCrystalQuotient(G,6,3);; Q:=S!.group;; gap> Order(Q); 16 gap>Coclass(Q); 2 gap> HomS:=HomToIntegersModP(S,2);; gap> for n in [1..5] do > Print("The mod 2 cohomology in dimension ",n," has rank ",Cohomology(HomS,n), "\n"); > od; The mod 2 cohomology in dimension 1 has rank 2 The mod 2 cohomology in dimension 2 has rank 4 The mod 2 cohomology in dimension 3 has rank 6 The mod 2 cohomology in dimension 4 has rank 9 The mod 2 cohomology in dimension 5 has rank 12 gap> #CASE c=4. gap> S:=ResolutionAlmostCrystalQuotient(G,6,4);; Q:=S!.group;; gap> Order(Q); 32 gap>Coclass(Q); 2 gap> HomS:=HomToIntegersModP(S,2);; gap> for n in [1..5] do > Print("The mod 2 cohomology in dimension ",n," has rank ",Cohomology(HomS,n), "\n"); > od; The mod 2 cohomology in dimension 1 has rank 2 The mod 2 cohomology in dimension 2 has rank 4 The mod 2 cohomology in dimension 3 has rank 6 The mod 2 cohomology in dimension 4 has rank 9 The mod 2 cohomology in dimension 5 has rank 12 gap> #CASE c=5. gap> S:=ResolutionAlmostCrystalQuotient(G,6,5);; Q:=S!.group;; gap> Order(Q); 64 gap> Coclass(Q); 2 gap> HomS:=HomToIntegersModP(S,2);; gap> for n in [1..5] do > Print("The mod 2 cohomology in dimension ",n," has rank ",Cohomology(HomS,n), "\n"); > od; The mod 2 cohomology in dimension 1 has rank 2 The mod 2 cohomology in dimension 2 has rank 4 The mod 2 cohomology in dimension 3 has rank 6 The mod 2 cohomology in dimension 4 has rank 9 The mod 2 cohomology in dimension 5 has rank 12 

A
finite group of order p^{n} and nilpotency class c is said to
have coclass r=nc. It was
shown by Charles LeedhamGreen and others [C.LeedhamGreen, The
structure of finite pgroups, J.
London Mathematical Society, (2) 50 (1994) 4967] that, with a
finite number of exceptions, every pgroup of coclass r is associated
to one of only a finite number of padic uniserial space
groups G. In particular, for sufficiently large m the groups G/T_{m}
all have
coclass r. The above calculations are consistent with the conjecture
that almost all groups of coclass r associated to a particular space
group G have "very similar cohomological properties". For the prime p=2 it is known [J. Carlson, Coclass and cohomology, J Pure Applied Algebra 200 (2005) 251266] that there are only finitely many isomorphism classes of mod 2 cohomology rings of 2groups of a given coclass r. 

