GAP QA #7

Cohomology of a crystal

Keywords: cohomology

Respondent:

Franz Gähler ( gaehler@itap.physik.uni-stuttgart.de)

Question:

I am trying to compute the 1-cohomology of a crystal, specifically
H1(G,L)
where G is the point group of the crystal and L is the free abelian group
generated by the lattice vectors.
The only functions I can find in GAP compute in H1(G/M,M) for M a normal
p-subgroup of G.
I can express the point group G as either matrices or permutations.

Answer:

Computing H1(G,L) in GAP can be done in (at least) two ways. In the
following, I assume G is expressed with respect to a lattice basis,
so that L = Zn. G acts from the right on L.
If G is solvable (all point groups in three dimensions are), you can
use the polycyclic package as illustrated in the following example
(worked out by Bettina Eick):

# take a finite subgroup of GL(d,Z)
gap> G := MatGroupZClass( 3, 14 );
MatGroupZClass( 3, 2, 3, 1 )
# create an isomorphism into a pcp group
gap> iso1 := IsomorphismPcGroup(G);;
gap> iso2 := IsomorphismPcpGroup(Image(iso1));;
gap> H := Image( iso2 );
Pcp-group with orders [ 2, 2 ]
# get the action for the generators of H
gap> m := List( Igs(H), x -> PreImagesRepresentative( iso1*iso2, x) );
[ [ [ 1, 0, 0 ], [ 0, -1, 0 ], [ 0, 0, 1 ] ],
  [ [ -1, 0, 0 ], [ 0, -1, 0 ], [ 0, 0, -1 ] ] ]
# set up the cohomology record
gap> C := CRRecordByMats( H, m );;
# compute the 1-cohomology
gap> r := OneCohomologyCR(C).factor.rels;
[ 2, 2, 2 ]

Another option, which is available also for non-solvable groups G, where
H0(G,Rn)=0
is to make use of the isomorphism between H1(G,L) and
H0(G,Rn/L).
This isomorphism holds whenever G is finite, for the same reasons
as the isomorphism between H2(G,L) and
H1(G,Rn/L).
H0(G,Rn/L) consists of all points in the torus Rn/L that
are G-invariant (modulo L). So, with the same group G as above,
we can proceed as follows:

gap> G := MatGroupZClass( 3, 14 );
MatGroupZClass( 3, 2, 3, 1 )
gap> d := DimensionOfMatrixGroup(G);
3
gap> M := TransposedMat( Concatenation( List( GeneratorsOfGroup(G), 
>           x -> TransposedMat(x)-IdentityMat(d) ) ) );
[ [ -2, 0, 0, -2, 0, 0 ], [ 0, -2, 0, 0, 0, 0 ], [ 0, 0, -2, 0, 0, -2
] ]

We now seek all solutions of x * M = 0 (mod Z) in the 3-torus R3/L.
This is best done by computing the Smith normal form of M:

gap> NormalFormIntMat(M,1);
rec( 
  normal := [ [ 2, 0, 0, 0, 0, 0 ], [ 0, 2, 0, 0, 0, 0 ], [ 0, 0, 2, 0, 0, 0 
         ] ], rank := 3 )

Again, we see that there are 2x2x2 solutions. If you need the actual
fixed points in the original basis, you can ask NormalFormIntMat to
return also the basis transformations it applies.

Back to the GAP QA list