Group Cohomology

All those Platonic polyhedral groups are subgroups of SO(3) which has double cover SU(2). There are connections (see [Con99]) to so called icosians, quaternions, the E8- as well as even the Leech-lattice. Some people call the icosians the group algebra of A(5), and others treat the icosian ring as the 'Z-span of the root system of the non-crystallographic Coxeter group H4'. The Binary Polyhedral Groups (as well called covering groups) for our three examples are 2.A(4) SL(2,3) , 2.S(4) and 2.A(5) SL(2,5) . We speak of a Double Binary Polyhedral Group when reflections are also included. And the universal cover has to do with an embedding into a simply-connected group.

Now (we follow [Gri98]) let K, E, G be some groups, then the following short sequence:


is exact iff (if and only if) α is injective, β is surjective and Kernel( β ) = Image( α ), so β induces an isomorphism G E / Im(α) and can be written G E / K .

This is called a short exact sequence. We say E is an extension of G by K (in most cases if G is nonsolvable and K Abelian). The extension is split if there is a group homomorphism σ : G E such that σ ∘ β 1 , otherwise nonsplit. K is the extension, G is the quotient. E operates on K by conjugation and so we have a homomorphism E Aut(K) . In case K is Abelian, it's in the kernel of this map and we have a homomorphism from G to Aut(K), whence K acquires the structure of a G-module. An extension is central if the extension kernel is in the center, and it's covering (an essential central extension in other words) if the kernel is in the derived group. A central extension is a covering group if the extension is maximal essential.

See [Hup67] and [Gor82] a representation group (Darstellungsgruppe) is a group E which is a central extension of G such that the following diagram (Equation 11.4, “Commutative Diagram”) commutes:


In case F = GF(q), we write GL(n,q) instead of GL(n,F). Pay attention to the fact that PSL(2,5) needs 6 (and not 5) labels as a permutation group (5 and infinity), and PSL(IsMatrixGroup,2,5) doesn't work.

E is an auxiliary object (in general not unique up to isomorphism) and lifts projective representations (for example over the complex numbers, the field ) to linear ones. It's also called a universal covering group of G. In case G finite, a covering group exists and any such is a representation group, and if G is perfect then a covering group is unique (up to isomorphism). K is called the 'Schur multiplier' which can as well be defined as H2(G,Fx) where Fx denotes the multiplicative group of nonzero elements of some algebraically closed field F.

For example A(4), S(4) and A(5) have got the Schur multiplier Z(2).

A(4) (Z(2) × Z(2)) : Z(3) and Ê 6 2.A(4) is actually (see [Cip00]) Q : Z(3) SL(2,3) and the preimage of A(4) in SU(2), so the stuff below becomes a short exact sequence:


The perfect double cover 2.A(5) of A(5) is the icosian group and as well called the Binary Icosahedral group. See Chapter 15, Lattices for more information about the quaternions and icosians.

Now let's see if the Binary Polyhedral Groups are split or not:

gap>G:=AlternatingGroup(5);;
gap>d:=SchurCover(G);;
gap>i:=Image(IsomorphismPermGroup(d),d);;
gap>l:=NormalSubgroups(i);;
gap>GG:=i/l[2];;
gap>IsomorphismGroups(GG, G);
ok
gap>hom:=NaturalHomomorphismByNormalSubgroup(i,l[2]);;
gap>IsomorphismGroups(ImagesSource(hom),G);
ok
gap>FactorGroup(i,l[2]);;
gap>OneCocycles(i,l[2]);
... isSplitExtension := false
gap>sp25:=Sp(IsMatrixGroup,2,5);
SL(2,5)
gap>IsSimple(sp25);
false;
gap>IsSolvable(sp25);
false;
gap>RadicalGroup(sp25);;
gap>u:=SylowSubgroup(sp25,2);; Size(u); 
8
gap>Size(Normalizer(sp25,u));
24
gap>Size(Centralizer(sp25,u));
2

Well, let's for now continue with the cover thing. When we start with the 'vector' group G of the ico_stl_II example:

gap>AbelianInvariantsMultiplier(G);
[ 2, 2 ]
gap>SCG:=SchurCover(G);;
gap>Size(SCG)/Size(G);
4

It seems now there some deeper work is needed what we shouldn't postpone for too long. For a finite group G being polycyclic and solvable are the same. In that case all is feasable of course (doubletetra example, other candidates are rhombic_dode, rubik_cube 2 and 3, costa, dcb_068, oct_stl_II etc.):

gap>Size(G);
648
gap>IsSolvable(G);
true;
gap>gp:=Image(IsomorphismPcGroup(G));;
gap>mats:=List( Pcgs(gp), x -> IdentityMat(1, GF(2)) );;
gap>M:=GModuleByMats(mats, GF(2));;
gap>TwoCohomology(gp,M);;
gap>li:=Extensions(gp, M);;
gap>List(li, ModuleOfExtension);;
gap>cli:=List(li, h -> Intersection(Centre(h), DerivedSubgroup(h)));;
gap>AbelianInvariants(Centre(li[4]));
[ 2 ]
gap>sc:=SchurCover(G);;
gap>iso:=IsomorphismGroups(li[2], sc);
fail
gap>iso:=IsomorphismGroups(li[4], sc);
ok

Alternatively we can use another package:

gap>LoadPackage("polycyclic");;
gap>gpc:=Image(IsomorphismPcpGroup(G));;
gap>mats:=List( Pcgs(gpc), x -> IdentityMat(1, GF(2)) );;
gap>cr:=CRRecordByMats(gpc,mats);;
gap>TwoCohomologyCR(cr);;
gap>ExtensionClassesCR(cr);;

In general unfortunately things aren't that easy :-(. Perhaps (regarding all our graph examples) it's possible to construct Schur covers for all the 'vector' groups or at least (if this is more feasable) directly their character tables (maybe from the tables of the maximally cyclic central extensions or s.th.) for the McKay thing (see the section called “ McKay Correspondence ”)?

Well, the polyhedral groups and their binary counterparts have defining relations (Table 11.3, “Relations of (Binary) Polyhedral Groups”).


That's why 2.S(4) for example is called the order 48 Binary Octahedral (reflection) group {4,3,2}. Those relations equal -1 in the cover but 1 when projected to the polyhedral group. Working on directed edges, a can be looked at as the good-old local face rot, b as the dual rot (backwards) around vertices, and c-1 = ab is the edge flip then. This gives us enough hints to construct permutations for the regular polyhedra. We implemented a probabilistic algorithm to find groups fulfilling those requirements (but actually it can be done using linear algebra :-)), but for the general case the desired holonomy cover group is not solved thereby. One can of course construct groups for all our graphs where rotation, dual_rot and edge flip fulfill analog rules, but for example in case of the doublecube the resulting group size is a twice the size of the cover of the standard rot/flip group and factor 4 too big comparing to the Schur cover of the 'vector' groups. Take a look at the sophisticated approach later on in this chapter.

To concretize the statements above there is a lot of talking (see [Hsu00]) about central extensions of triangle groups, like

< a,b,c,z with 1=[z,a]=[z,b]=[z,c]
	    and  a^1 = z^p, b^m = z^q, c^n = z^r, abc = z^s >

where z is some torsion generator of course. There is a straight-forward way then to arrive at some Seifert groups and 3-string braid groups B3 = <p/q, q/m, r/n>, especially <1/3, -1/2, 0>. Well, and then it's time to speak about 'moonshine'.

First of all we will use the 'cohomolo' package a little bit:

gap>LoadPackage("cohomolo");;
gap>G:=AlternatingGroup(5));;
gap>chr:=CHR(G,2);;
gap>SetInfoLevel(InfoCohomolo,1);
gap>SchurMultiplier(chr);
#I  Indices in the subgroup chain are: 5 3
...
[ 2 ]
gap>CoveringGroup(chr);;

We have to add some more info (relations and some matrices) for the last thing to work and should investigate this area a little further in the future. In any case, once we have some matrices for the module action (see below) we can use it here to compute the dimension of the first cohomology.

For now let's take a look (Table 11.4, “Schur multiplier”) at the Schur multipliers for all our graph examples for the 'vector' group (of piece A type), not the rot/flip thing (we write [remedy] in case some helping measures would be needed for further accomplishments).


One has to test for all primes dividing the group order. For example we set G:=PSL(3,4), and using CHR(G,2) we get a multiplier [4, 4], and with CHR(G,3) we get [3], and G has a Schur cover (Z(12) × Z(4)).PSL(3,4).

The 3×4 torus and the hexa torus (as well as for example M(24)) get [ ]. We speak of 'torsion-free', this is a property of a Riemannian connection. Otherwise we speak of a Riemann-Cartan manifold.

It seems that the number of topologically equivalent edges has to do with the multiplier, but that's not the whole truth. For example the hexa_tor has vertices with 3 or 4 faces meeting and we know the multiplier to be Z(2) A(n) , n 8 .

What seems to be understood is that once a Schur cover is found, subsequent attempts to embed the result again into GL won't change anything. We now present a constructive computational solution. In general it seems this is the homotopy approach to cohomology.

Let's take a cube with group S(4) and a Chess piece of type A (Example 11.2, “Cube and Schur Cover”).


We start with the "b" generator's cycle (1,2,3,4) and double the labels (+24) since after one round we have got the spinned situation (for example the label 1 stands for a coordinate system with the "a" axis from face with id 0 to a face with id 1, and the "b" axis rotated counter-clockwise thereby going from 0 to 2). Then we do the "a" generator for all already occured labels. Always we use the standard label of the original group for the initial occurence, and for the first four cycles of the "a" generator there are always fresh labels to use. Well, so then we continue with the "b" generator, and there finally the question arises if to use the label 9 or 33. The situation did occur already, 9 = (bbaaa) 1, and we are working on the label 7 = (a) 1, and it's now at (9 or 33) = (bb) 7. The loop goes (cccddabb) and we 'shrink it to a point' (also called collapsing or contracting) by simplyfying (inserting identities such as ac or bd (to break into atomic rots), using rot = abc = cda along cycles, rota = brot to move the rots to one end; aabb rot^2 or other shortcuts), find that we have rot^4 and use 33. Actually the first time an already used label is found to be not rotated is at 15 because dcdaba = drotba=dcrota=dcbrot=rot^-1rot=1 . Well, once you have understood the construction it's quite easy and only a technical task to teach it to the computer.

Decisive is the question if a label (in some atlas net) can be recycled or not. Probably this can be described in the context of maximal edge trees and those known paper model constructions. Remember that we mentioned some full (counter-clockwise) spin when introducing the 'vector' groups and looking at [a,b]3 or (abc)4? Actually this same occurs when doing a4 or b4, and so we double the label set. Only after two full rotations the original situation is reached again. Somehow this means thinking modulo 2, and a full clockwise rotation (consisting of poly-many atomic rots) gives the same as a full counter-clockwise rotation. This is not ad hoc, because depending on if you shrink to the left or the right you get rot4 or rot-4, what must be in fact equal (it simple shouldn't matter which direction we preferred). It seems this is because it's not possible to store more information (than these two states) in such a short cycle (compare the section called “Morphing Group” where we speak about the finiteness of the morphing groups). Actually for bigger graphs we cannot simply only double the label set, instead we will later on use for example GF(8) for a Binary double-tetra cover, but forget about this for now.

The next easy example is the tetrahedron, you will manage for yourself. We will give you some hints: you will have to insert 'on the line', that is aaa=(bb^-1)aaa=b(aa^-1)b^-1aaa=rot^-1a^-1b^-1aaa = … etc., and it's a good idea to move negative powers of rot to one side (left) and positive powers to the other (right). Besides you will make use of dual_rot local_dual_valence = -1 = rot poly finally. Come on, just try and feel the spirit.

Interesting to visualize how such a loop gets moved on the graph while collecting information about the torsion thereby …

By the way, such things like [rot, flip]=? and rota=brot belong to the field of vector analysis or exterior Grassmann algebra perhaps? Well, the latter equation can be equivalently formulated as: the two automorphisms "a" and "b" (of some algebra) are similar, there exists an intertwining automorphism called "rot". Actually all stuff gets involved in our project, yeah.

gap>sc:=SchurCover(PGL(2,3));;
gap>IsomorphismGroups(sc, GL(2,3));
ok
gap>IsomorphismGroups(sc, SCG);
fail
gap>IsPerfect(G);
false

As we know the desired group is not uniquely determined, so no problem with that output above either.

Let's take a look at the following lovely little script (see the GAP™ source code in the file lib/schur.gi) for computing a finite presentation of a representation group (Darstellungsgruppe) of a finitely presented group, using the Hopf formula. Simply take a finite presentation F/R for a group G and compute a presentation of one of G's representation groups (Darstellungsgruppen, Schur covers). This is done by assembling a presentation for F/[R,F] and then finding a generating set for a complement C/[R,F] for the intersection of R and [F,F] in R/[R,F] (all possible covers would be achieved by computing all complements).

  1 gap>DarstellungsgruppeFP := function( G )
    	local g, i, m, n, r, D, I, M, M2, fgens, rels, gens, Drels;
    
    	fgens:=FreeGeneratorsOfFpGroup(G);
  5 	rels:=RelatorsOfFpGroup(G);
    	n := Length( fgens );
    	m := Length( rels );
    	    
    	D := FreeGroup( n+m );
 10 	gens:=GeneratorsOfGroup(D);
    	Drels := [];
    	for i in [1..m] do
    	   r := rels[i];
    	   Add(Drels, MappedWord( r, fgens, gens{[1..n]} ) / gens[n+i] );   
 15 	od;
    	for g in gens{[1..n]} do
    	   for r in gens{[n+1..n+m]} do
    	      Add( Drels, Comm( r, g ) );
    	   od;
 20 	od;
    	    
    	M := [];
    	for r in rels do
    	   Add( M, List( fgens, g->ExponentSumWord( r, g ) ) );
 25 	od;
    	    
    	M{[1..m]}{[n+1..n+m]} := IdentityMat(m);
    	M := HermiteNormalFormIntegerMat( M );          
    	M:=Filtered(M,i->not IsZero(i));
 30 	    
    	r := 1; i := 1;
    	while r <= m and i <= n do
    	   while i <= n and M[r][i] = 0 do
    	      i := i+1;
 35 	   od;
    	   if i <= n then  r := r+1; fi;
    	od;
    	r := r-1;
    	    
 40 	if r > 0 then
    	   M2 := M{[1..r]}{[n+1..n+m]};
    	   M2 := HermiteNormalFormIntegerMat( M2 );     
    	   M2:=Filtered(M2,i->not IsZero(i));
    	   for i in [1..Length(M2)] do
 45 	      Add(Drels,LinearCombinationPcgs(gens{[n+1..n+m]},M2[i]));
    	   od;
    	fi;
    	    
    	D:=D/Drels;
 50 	return D;
       end;
12

here HermiteNormalFormIntegerMat is used

Let G denote our holonomy group and GSC our cover, as shown below using the double-tetrahedron example:

gap>gens:=GeneratorsOfGroup(G);;
gap>iso:=IsomorphismFpGroupByGenerators(G, gens);;
gap>G_fp:=Image(iso);;
gap>dar:=DarstellungsgruppeFP(G_fp);
<fp group on the generators [ f1, f2, f3, f4, f5, f6, f7, f8 ]>
gap># (now K:=SimplifiedFpGroup(dar);; would be an option)
gap>P:=PresentationFpGroup(dar);;
gap>TzOptions(P).protected:=2;;
gap>TzOptions(P).printLevel:=2;;
gap>TzOptions(P).loopLimit:=10;;
gap>v:=GeneratorsOfPresentation(P);;
gap>TzEliminate(P,v[3]);;
gap>SimplifyPresentation(P);;
gap>K:=FpGroupPresentation(P);
<fp group on the generators [ f1, f2 ]>
gap>is:=IsomorphismPermGroup(K);;
gap>K_p:=Image(is);;
gap>SmallerDegreePermutationRepresentation(K_p);;
IdentityMapping( <permutation group of size 1296 with 2 generators> )
gap>NrMovedPoints(K_p);
 432

That's too much, and for bigger graphs the isomorphism to a permutation group is anyway not feasable anymore. Can we find a better solution?

gap>tom:=TableOfMarks(K_p);;
gap>ctl:=CharacterTable(K_p);;
gap>trueperms:=PermCharsTom(ctl,tom);;

There are for example some of degree 36, but how to go from such a character to the corresponding representation? And while they are not just possible candidates for characters, still that's only a necessary (and not sufficient) condition for s.th. faithful. Actually the kernel of a character are all group elements where the character has got the same value as for the identity element, and the corresponding representation is faithful if and only if the kernel is trivial (so in the example above 48 could be the minimal degree).

By the way, here you get s.th. isomorph to G on just 9 points (but somehow we still prefer the 18 points, probably because then we need only two generators):

gap>blocks:=Blocks(G, MovedPoints(G));
[ [ 1, 3 ], [ 2, 4 ], [ 5, 10 ], [ 6, 11 ], [ 7, 12 ], [ 8, 13 ], [ 9, 14 ], 
  [ 15, 16 ], [ 17, 18 ] ]
gap>blockhom:=ActionHomomorphism(G,blocks,OnSets);;
gap>Gb:=Image(blockhom);;
gap>IsomorphismGroups(G,Gb);;
gap>Length(GeneratorsOfGroup(Gb));
 7

Actually the question arises what is the minimal degree of a faithful permutation representation for our cover. It is the index of the largest core-free subgroup. Well, core-free is definitely not a synonym for Abelian. Let us mention that a permutation representation of degree n is actually a homomorphism into S(n) and leave this minimality problem for the moment.

For bigger examples the approach above is not feasable, and we don't like the big degree 432 anyway. We will now very closely follow [Hul01a] (more often than not by copy/paste whole passages, but we must be explicit in our construction for a wide, unexperienced audience) and lift our permutation representation for G of degree 18 to a cover (on 144 labels). Perhaps (see the mentioned paper for the actual state of the art) it is not completely sophisticated to work with some arbitrary Darstellungsgruppe, but for the moment this will just suffice:

gap>h:=GroupHomomorphismByImages(K,G,GeneratorsOfGroup(K),GeneratorsOfGroup(G));
[ f1, f2 ] -> [ (1,2,3,4)(5,15,11,8)(6,13,10,16)(7,17,14)(9,12,18), 
  (1,5,6)(2,7,8,9)(3,10,11)(4,12,13,14)(15,17,16,18) ]
gap>Size(Image(MaximalAbelianQuotient(K)));
2
gap>DerivedSubgroup(K);
Group([  f1^-2, f2*f1^-1  ])
gap>Size(last)
648
gap>Size(Kernel(h));
2

The kernel(h) must be K', that means the largest Abelian quotient of the cover K that of G . Now let s be the subgroup which is the preimage of a point stabilizer:

gap>s:=PreImage(h,Stabilizer(G,1));; Index(K,s);
18
gap>h2:=IsomorphismFpGroup(s);;
gap>q:=Range(h2);;

Next, we compute the permutation images of the (new) generator preimages under the epimorphism onto G and construct the corresponding epimorphism from the new fp group onto the point stabilizer in G.

gap>gens:=List(GeneratorsOfGroup(q),i->Image(h,PreImagesRepresentative(h2,i)));
[ (7,14,17)(9,18,12), (2,9,8,7)(4,14,13,12)(15,18,16,17) ]
gap>h3:=GroupHomomorphismByImages(q,Subgroup(G,gens),GeneratorsOfGroup(q),gens);
#I  CosetTableFromGensAndRels called:
#I  	2	1	1	2
#I  CosetTableFromGensAndRels called:
#I  	2	1	1	2
[ F1, F2 ] -> [ (7,14,17)(9,18,12), (2,9,8,7)(4,14,13,12)(15,18,16,17) ]
gap>o:=Orbits(Range(h3),[1..18]);
[ [ 1 ], [ 2, 9, 8, 13, 7, 18, 16, 12, 4, 15, 14, 17 ], [ 3 ], 
 [ 5 ], [ 6 ], [ 10 ], [ 11 ] ]

Taking the orbit of length 12 now would give the inferior result on 432 points from above.

gap>t:=Stabilizer(Image(h3),o[1][1]);
Group([ (7,14,17)(9,18,12), (2,9,8,7)(4,14,13,12)(15,18,16,17) ])
gap>DisplayCompositionSeries(t);;
gap>tp:=PreImage(h3,t);; Index(q,tp);
1

We now compute the epimorphism from tp onto its commutator factor group (by first rewriting the presentation to one of tp and then Abelianizing the presentation, the resulting Abelian quotient of size 8 is represented as a pc group).

gap>maxab:=MaximalAbelianQuotient(tp);; Size(Image(maxab));
8

Let's pull this quotient back to a subgroup of the finitely presented group K (of index 18). For this we need a generating set for this subgroup (which is obtained by taking the primary generators of an augmented coset table).

gap>U:=PreImage(h2,tp);; Index(K,U);
18
gap>Ugens:=GeneratorsOfGroup(U);; Length(Ugens);
4
gap>Umax:=RestrictedMapping(h2,U)*maxab;;

We want to induce this representation to K. Now first of all the ugly way, involving the computation of a stabilizer chain for the permutation image, this won't be ok for bigger groups. The representation below on the cosets is faithful if and only if the core of ke in K (that is the intersection of all K-conjugates of ke) is trivial.

gap>ke:=Kernel(Umax);; Index(K,ke);
144
gap>Core(K,ke);
Group(())
gap>tab:=CosetTable(K,ke);;
gap>tab:=List(tab{[1,3..Length(tab)-1]},PermList);;
gap>kk:=Group(tab);; Size(kk); Size(G);
1296
648

And now instead here comes the better way how to do it. By the Krasner-Kaloujnine embedding theorem, the induced permutation representation goes in a wreath product of the images of the original representation with the permutation representation on the cosets. DefiningQuotientHomomorphism of a subgroup is not necessarily the action on the cosets, but only some homomorphism whose kernel is contained in the subgroup. In this particular case it is this particular homomorphism.

gap>Ucosrep:=DefiningQuotientHomomorphism(U);;
gap>perms:=KuKGenerators(K,Ucosrep,Umax);;
gap>NrMovedPoints(perms);
144

Now we could first of all use IsomorphismSimplifiedFpGroup(K); to find redundant generators within the perms, but for the moment we just take them all. The use of straight line program elements might be overkill in the concrete example but will be appropriate in bigger cases.

gap>p3:=StraightLineProgGens(perms);;
gap>P:=Group(p3);;
gap>StabChainOptions(P).random:=1;; Size(P);
1296
gap>bas:=BaseStabChain(StabChainMutable(P));;
gap>Length(bas);
3

The computed stabilizer chain provides us with a base for the group. Knowledge of this base will speed up comparisons of straight line program elements enormously (we only have to test equality on the 3 points of the base instead of the 144 points of the domain). For the further calculations we therefore create the straight line program generators anew, this time with a base. We also create the permutation group P anew and store its size.

gap>p3:=StraightLineProgGens(perms,bas);; P:=Group(p3);
gap>SetSize(P,Size(G)*2);;

So finally we have the result for our double-tetrahedron example (Example 11.3, “DoubleTetrahedron and Schur Cover”).


You can see that the original 4-cycles are now looping twice (and all this in 4 copies in parallel), and the old 3-cycles go 23-fold around.

Finally let's look at the kernel of the lift:

gap>RelatorsOfFpGroup(dar)[1];
 f1^-2*f2^-1*f1^-2*f2^-1*f3^-1
gap>elm:=(P.1^-2*P.2^-1*P.1^-2*P.2^-1) ; Order(elm);
2
gap>S:=SubgroupNC(P,[elm]);;
gap>N:=SolvableNormalClosurePermGroup(P,S);;

N is indeed the whole kernel - otherwise we would have had to add further elements.

gap>IsElementaryAbelian(N);
true
gap>pcgs:=Pcgs(N);;
gap>mats:=LinearActionLayer(P,pcgs);
gap>module:=GModuleByMats(mats,GF(2));
rec( field := GF(2), isMTXModule := true, dimension := 1, 
  generators := [ <an immutable 1x1 matrix over GF2>, 
	          <an immutable 1x1 matrix over GF2> ] )
gap>MTX.IsIrreducible(module);
true

What _is_ a module? The Schur multiplier is a GF(2) G-module by virtue of (amplitude-)_modulating_ the G action (vertically).

Now looking at similar graphs, we recognize that the 5-bipyramid and 7-bipyramid as well behave alike. And the 6-bipyramid shows familiar behavior: the old 4-cycles loop twice again (in 2 copies), and the original 6-cycles go 22-fold. The 8-bipyramid then shows only 16-cycles.

Let's investigate the results for oct_stl_I (small tetrahedron reticulated) type A holonomy group (Example 11.4, “Tetrahedron Reticulated and Schur Cover”).


Again it's 23-fold sheets, but [4] as kernel. Now the result for dcb_hole_0_10:


Finally we present the result for the deltoid (stellated tetrahedron) (see Example 11.6, “Tetrahedron Stellated and Schur Cover”).


Dealing with the big reticulated tetrahedron we have Z(6), and it is realized with 6-cycles only (with a total of 12-fold sheets) whilst we luckily had no need for s.th. iterated. The bigger reticulated tetrahedron gets a 24-fold cover with cycles of length 24 (in 2 copies) and kernel Z(8). The tall reticulation then again uses only 6-cycles for a total of 20-fold cover and kernel Z(10).

The L2_7 and S5 covers get a doubled set of labels and correct cover group, whereby the orbit cycle lenghts are the same as those of the original group. Wait a moment, perhaps that's why while having a non-trivial Schur multiplier they are nevertheless still called Riemannian instead of Cartanian manifolds?! This would make some sense after all.

In case of the ico_stl_I (and delt_trunc etc.) graph the above procedure somehow multiplies the label set without actually changing the group towards a proper cover, it seems this happens because the Core(K,ke) is nontrivial and we must take care of this.

Anyway, in general actually this is what we mean with understanding spin. Can we speak of local and global obstruction, regarding the triangle group torsion relations and the additional relators from the Hopf theorem respectively?! Or has it to do with moduli spaces, branched coverings and ramification? The very question comes to mind: the edges have distinct representatives in each 'sheet' (locally speaking, for actually it's only one sheet altogether). But for example if we do go around a vertex multiple times until we are back, then it's only one single vertex, and not multiple instances in several 'sheets'. This is Riemann-Roch or so?!

Well, finally we have a permutation representation for the Schur cover, induced by the representation for the original group. Instead of the holonomy groups, we could have started with the rot/flip/dual_rot groups and asked for their Schur covers. Well, it wouldn't have made much difference. As we know sometimes the rotation can be expressed over translation, in other cases it's some additional ingredient.

We could count the labels modulo 3 as well (then shrinking to the left doesn't give the same as doing so to the right though). But (see the phenomenon related to the morphing group, you can't store an infinite number of torsions in a finite path) probably it's not arbitrary that the torsion is not infinite cyclic but naturally within some finite range?!

In case of boundaries it can happen that rot^2 = -1 , then we won't be able to distinguish rot from its inverse when presented an atomic loop, such places will cause severe problems?! The problematic 'connect over multiple edges' case will show this for the dual_rot already as well, probably then we can't tell from the walk what generators we have.

Let's assume that now we know how to construct the cover for ourselves. This might turn out to be beneficial as soon as parts of the construction above become too complicated for really big graphs.

We embed our holonomy groups into s.th. else. The character tables apparently tell us if the covers have a faithful two-dimensional representation. Running through some class representative and so on will perhaps be a next step. Our final aim then are generic character tables for all our graphs!

How is the cover of the holonomy group (of piece type A) in relation to those for the other piece types?

At the moment we restricted ourselves to genus 0 graphs because there is only the 'shrinking to a point', on other graphs we have additional entities (the good old torus knots and so on) against which to check if we have a rotation or not. But there is no principal problem anymore to come. Btw. we could moreover add some rotation (and perhaps even some 'boost' thing) generator as well in cases where it would make a difference.

gap>ctl:=CharacterTable(P);
gap>Length(Irr(ctl));
gap>CharacterDegrees(ctl);

Here (Table 11.5, “Holonomy Group Schur Covers”) are some results for various graphs (multiplier, sheets, number of conjugacy classes of a Schur cover (what is the same as the number of Irrs), and the lists of degrees of the absolutely irreducible complex characters). Remember that for example in case of M(24) we have a boundary and reflection, the two-sheeted covering arising because of this has already been incorporated into our holonomy groups, and here only the number of sheets caused by the additional embedding into GL is taken into account.

Table 11.5. Holonomy Group Schur Covers

graphmultiplier#sheets#Irrsdegrees
tetrahedronZ(2)27[1,3][2,3][3,1]
cube/octahedronZ(2)28[1,2][2,3][3,2][4,1]
icosahedron / dodecahedronZ(2)29[1,1][2,2][3,2][4,2] [5,1][6,1]
icosa var_1    
tetra_stl_I (deltoid)Z(2)421[1,6][2,9][3,2][4,3] [6,1]
delt_truncZ(2)6  
tetra_stl_II Z(2)^2    
doubletetrahedronZ(2)826[1,2][2,3][3,2][4,1] [6,8][8,6][12,4]
cube_triang_I (bipyramid_hexa)Z(2)426[1,2][2,3][3,2][4,1] [6,8][8,6][12,4]
cube_triang_IIZ(2)   
bipyramid_pentaZ(2)850[1,2][2,3][3,2][4,1] [6,16][8,12][12,8][24,6]
bipyramid_heptaZ(2)884[1,2][2,3][3,2][4,1] [6,24][8,18][12,12][24,22]
bipyramid_octaZ(2)818[1,2][2,3][3,6][4,1] [6,3][8,3]
oct_stl_IZ(4)830[1,6][2,6][3,2][4,12] [6,4]
tetra_reticulZ(6)1254[1,6][2,9][3,14][4,3] [6,17][9,4][12,1]
tetra_reticul_bigZ(8)1668[1,6][2,6][3,2][4,12] [6,12][8,24][12,6]
tetra_reticul_tallZ(10)2090[1,6][2,6][3,2][5,24] [6,16][10,24][12,4][15,8]
oct_stl_II    
L2_7Z(2)211[1,1][3,2][4,2][[6,3] [7,1][8,2]
M_24()126[1,1][23,1][45,2][231,2] [252,1][253,1][483,1][770,2] [990,2][1035,3][1265,1] [1771,1][2024,1][2277,1] [3312,1][3520,1][5313,1] [5544,1][5796,1][10395,1]
doublecube    
doublecube h_10    
doublecube_h_0_10Z(2)210[1,8][2,2]
2x3 rectangle Z(2)^2 837[1,6][2,6][3,2][4,15] [6,4][8,3][12,1]
triplecube    
ico_stl_IZ(2)2  
ico_stl_II    
torus_3x4()112[1,12]
torus_hexa_3()115[1,15]
S5Z(2)212[1,2][4,5][5,2][6,3]
quad_star    
rubik_cube_2    
rubik_cube_3    
rhombic_dodeca Z(2)^2 626[1,4][2,9][4,2][6,4] [9,4][12,2][18,1]
zonotope_5    
costa Z(2) × Z(4)^6    
quasi_0Z(2)50145[1,20][2,85][4,40]
quasi_tria_0Z(2)215[1,12][2,3]
quasi_hepta_0Z(2)98329[1,28][2,175][4,126]

Probably it won't be always some SL(2,q), at least for our hexa_tor with A(432) because Galois's last dream seemingly doesn't allow this for reasonably small q. Well, |SL(2,q)| = |PGL(2,q)| = q(q2-1), we will use this as a quick check.

We might speculate that things like invariant metric or bilinear forms in general can now be retrieved as module isomorphisms from some module M over GF(q) defined by G to its dual module (see [Hol05]).

Finally anyway it's all about a representation involving some field or ring. And every matrix group is a Lie group, so we are safe to say that our embedding and their projections (the holonomy groups) have to do with Lie algebras, yep.

Last but not least (see [Gri99]) one can think about embedding into (instead of GL only) linear algebraic groups in general. Perhaps the icosahedron's morphing group from below needs some twistors to become E8?!