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 calculations can be found here. His methods rely on matrix algebra over the field of p elements and are not really 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 is highly unlikely to produce a wrong answer. However, we have no automatic proof that the algorithm always produces the correct answer.
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. One can attempt to prove that the Mathieu group G=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. We currently don't have a method implemented for this. However, the following commands show for example that the radical series for S=S1 and S=S2 have the same dimensions. Other invariants of S1 and S2 can also be shown to be equal.
gap> RadSer1:=[S1];; RadSer2:=[S2];; gap> for i in [1..11] do > Add(RadSer1,Rad(RadSer1[Length(RadSer1)])); > Add(RadSer2,Rad(RadSer2[Length(RadSer2)])); > od; gap> List(RadSer1,x->x!.dimension); [ 3008, 2900, 2705, 2413, 2037, 1661, 1285, 909, 535, 263, 82, 0 ] gap> List(RadSer2,x->x!.dimension); [ 3008, 2900, 2705, 2413, 2037, 1661, 1285, 909, 535, 263, 82, 0 ]
STEP 4 Assuming that S1 is isomorphic to S2 (which we haven't proved) 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