How to construct different modules using Gap?

151 Views Asked by At

I want to calculate the cohomology of some space group using Gap, with the coefficient different $\mathbb{Z}$-modules corresponding to different group actions on $\mathbb{Z}$. For example, for the space group be $p4m$, there can be eight different actions on $\mathbb{Z}$, and I want to calculate the cohomology of all of them using Gap.

I can first calculate the resolution using Gap.

R:=ResolutionSpaceGroup(SpaceGroupIT(2, 11), 9);

When the $\mathbb{Z}$-module corresponds to the trivial action of the space group, I can calculate the cohomology using the following syntax.

List([0..8], x->Cohomology(HomToIntegers(R), x));

I can also calculate the cohomology of a different module defined by the function "Determinant".

Zor:=GroupHomomorphismByFunction(SpaceGroupIT(2, 11), GL(1, Integers), x->[[Determinant(x)]]); C:=HomToIntegralModule(R, Zor); List([0..8], x->Cohomology(C, x));

But I do not know how to input the rest six modules.

1

There are 1 best solutions below

0
On BEST ANSWER

The following GAP commands provide one possible answer to your question. But there may be smarter ways of performing your computation.

gap> G:=SpaceGroupIT(2,11);;                                                                                               
gap> G:=Image(IsomorphismPcpGroup(G));; #convert G to a pcp group so that we don't need to call Polymake software
gap> R:=ResolutionAlmostCrystalGroup(G,9);; #A resolution for G
gap> iso:=IsomorphismFpGroup(G);; #create an isomorphism from the pcp group G to an fp group F
gap> F:=Image(iso);;
gap> L:=LowIndexSubgroupsFpGroup(F,2);; #List all subgroups of F of index 2.
gap> Length(L); #This will be the number of homomorphisms G--> GL(1,Z)                                         
8
gap> #For example let's work with the second of these homomorphisms G-->GL(1,Z)                                          
gap> hom:=NaturalHomomorphismByNormalSubgroup(F,L[2]);; #This creates the homomorphism G --> G/L[2]
gap> fn:=function(x);
 if x=(1,2) then return [[-1]]; fi;
 return [[1]];
 end;;
gap> rho:=GroupHomomorphismByFunction(G,GL(1,Integers),x-> fn(Image(hom,Image(iso,x))));; #rho: G --> GL(1,Z)
gap> C:=HomToIntegralModule(R,rho);;
gap> Cohomology(C,1);
[ 2 ]
gap> Cohomology(C,2);
[ 2, 2 ]
gap> Cohomology(C,3);
[ 2, 2, 2, 2 ]
gap> Cohomology(C,4);
[ 2, 2, 2, 2, 4 ]