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

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.