Previous
About HAP: Piecing things together - a space group example
next

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 R2 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 R2R(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^2-3;;
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 ZP-resolution as follows.
gap> RP:=ResolutionFiniteGroup(P,4);;
Using the fact that N is free abelian of rank 2 we construct a ZN-resolution as follows.
gap> RN:=ResolutionAbelianGroup([0,0],4);;

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 ZP-resolution and ZN-resolution into a free ZG-resolution as follows.
gap> RG:=ResolutionExtension(GhomP,RN,RP,"Don't Test Finiteness", PmapG);;
The following commands suggest that H1(G,Z)=Z2 and H2(G,Z)=Z2.
gap> TRG:=TensorWithIntegers(RG);;
gap> Homology(TRG,1);
[ 2 ]
gap> Homology(TRG,2)
[ 2 ]
However, there is a problem that needs looking into: the boundary map in RG doesn't square to zero in higher dimension!! So the reliability of the above homology calculations is also in question. I suspect that the problem lies with the contracting homotopy in the function ResolutionDirectProduct() .  Things work with mod 2 coefficients, so maybe it's a problem with signs.
Previous Page
Contents
Next page