Previous | About HAP: Mod p cohomology rings | next

There is much interest in the ring structure of the mod p cohomology H*(G,Zp) of p-groups G.

- Jon Carlson has computed these rings for all groups of order 64, the smaller 2-groups having been handled previously. He has contributed some very efficient functions to the Magma computer algebra system. His methods are described here, and his calculations can be found here. His methods rely on matrix algebra over the field of p elements and are not directly suitable for large groups.
- David Green has developed non-abelian Gröbner basis methods for calculating the mod p homology of larger groups. He has implemented his methods as a stand-alone C package. His calculations can be found here.
- Marcus Bishop has implemented Jon Carlson's functions in the GAP package Crime.

Since the GAP package Crime focuses on mod p cohomology, only a few functions on this topic have so far been included in HAP.
At present these HAP functions work differently to those for integral cohomology in that they rely heavily on matrix algebra and minimal resolutions. More work needs to be done on improving the effeciency of these functions.

Let G be the group G=SmallGroup(64,135) in the small groups library. The following HAP commands compute the ring H*(G,Zp) modulo all elements of degree greater than 10. The ring is returned as a structure constant algebra A over the field of two elements.
gap> R:=ResolutionPrimePowerGroup(SmallGroup(64,135),10); Resolution of length 10 in characteristic 2 for <pc group of size 64 with 6 generators> . No contracting homotopy available. A partial contracting homotopy is available. gap> A:=ModPCohomologyRing(R); <algebra of dimension 187 over GF(2)>
The following additional command shows that the ring H*(G,Zp) is generated by three elements in degree 1, two in degree 2, one in degree 3, one in degree 5, one in degree 8 and possibly some generators of degree greater than 10.
gap> S:=ModPRingGenerators(A); [ 0, 1, 1, 1, 2, 2, 3, 5, 8 ]

The Poincare series for the cohomology ring H*(G,Zp) is the infinite series
a0 + a1x + a2x2 + a3x3 + ...
where ak is by definition the dimension of the vector space Hk(G,Zk) . The Poincare function is a rational function P(x)/Q(x) equal to the Poincare series.
The following commands compute the Poincare function for the Sylow 2-subgroup of the Mathieu group M12. They rely on an algorithm which seems unlikely to produce a wrong answer but for which we have no proof that the answer is always correct.

PoincareSeries(MathieuGroup(SylowSubgroup(MathieuGroup(12),2)); (1)/(-x^3+3*x^2-3*x+1)
Poincare series for groups of order 32 and most of the groups of order 64 are listed here.

Proof of correctness of the conjectured Poincare series
One can prove that Sylow 2-subgroup G of Mathieu group M12 does indeed have the Poincare series f(x)=1/(-x3+3x2-3x+1) by using the following steps.
STEP 1
Create a minimal free FG-resolution
R: ... → Rn → Rn-1 → ... → R1 → R0 → F
for G, where F is the field of two elements. Also create the non-free FG-modules
Kn = ker(dn:Rn → Rn-1) .
The following commands achieve this for n in the range 1 to 15, storing the modules Kn as a list.

gap> G:=SylowSubgroup(MathieuGroup(12),2);; gap> R:=ResolutionPrimePowerGroup(G,15);; gap> K:=List([1..15],i->FpGCyclesModule(R,i));;
STEP 2 Define the radical series of an arbitary module M by Rad1(K) = K, Radc+1(K) = Radical(Radc(K)) . Create a list L of the dimensions, over F, of (for example) third radicals Rad3n = Radical(Radical(Radical(Kn))) of the modules Kn, Then find a Poincare series g(x) which agrees with L. The folllowing commands do this for n=1 to 15.
gap> Rad:=RadicalOfFpGModule;; gap> L:=List(K,k->Rad(Rad(Rad(k)))!.dimension);; gap> g:=PoincareSeries(L,15); (40*x^6-40*x^5-41*x^4+42*x^3+5*x^2+85*x+85)/(-x^7+x^6+x^5-x^4+x^3-x^2-x+1)
Note that the denominator of g is a multiple of the denominator of f. Inspired by the denominator -x7+x6+x5-x4+x3-x2-x+1 form the direct sums of modules S1 = K1 + K4 + K6 + K7 and S2 = K2 + K3 + K5 +K8 . The following commands achieve this.
gap> S1:=DirectSumOfFpGModules(K{[1,4,6,7]});; gap> S2:=DirectSumOfFpGModules(K{[2,3,5,8]});;
STEP 3 Prove that S1 and S2 are isomorphic using the following commands.
gap> Dimension(S1); #The dimension of S1 as a vector space over GF(2) 3008 gap> Dimension(S2); 3008 gap> f:=RandomHomomorphismOfFpGModules(S1,S2);; gap> Rank(f); 3007 gap> g:=RandomHomomorphismOfFpGModules(S1,S2);; gap> Rank(g); 3007 gap> Rank(f+g); 3008 gap> #So we are lucky: the homomorphism f+g:S1-->S2 is in fact an isomorphism.

STEP 4
Since S1 is isomorphic to S2 we can use the minimal free FG-resolution R* to construct two minimal free FG-resolutions of S1=S2, namely
(R*+2 + R*+5 + R*+7 + R*+8) → S1
and
(R*+3 + R*+4 + R*+6 + R*+9) → S2
where + denotes direct sum. It follows (using properties of minimal resolutions) that the minimal resolution of the trivial module F has the form
... → ( R3+R6+R8+R9)/(R4+R5+R7) → ( R2+R5+R7+R8)/(R3+R4+R6) → R8 → ... → R1 → R0 → F .
It follows that G=M12 has Poincare series f(x)=1/(-x3+3x2-3x+1) .

Previous Page | Contents | Next page