#### 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

H^{1}(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 H^{1}(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 H^{1}(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 = Z^{n}. 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

H^{0}(G,R^{n})=0

is to make use of the isomorphism between H^{1}(G,L) and

H^{0}(G,R^{n}/L).

This isomorphism holds whenever G is finite, for the same reasons

as the isomorphism between H^{2}(G,L) and

H^{1}(G,R^{n}/L).

H^{0}(G,R^{n}/L) consists of all points in the torus R^{n}/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 R^{3}/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