GAP Lesson 5
Change to the directory where you store your GAP files, and then start up GAP.
gap> LogTo("GAPlesson5");
gap> At:=KnownAttributesOfObject;
More about groups given by presentations
References: ?Creating Presentations
Also: D.L. Johnson, Presentations of Groups, Cambridge U.P.
In the next example we study the group SL(2,Z) which is known to be isomorphic to the free product with amalgamation of a cycle of order 4 with a cycle of order 6, amalgamating the subgroups of order 2. In other words it has a presentation as follows.
gap> g:=FreeGroup(2,"g");
gap> g:=g/[g.1^6,g.2^4,g.1^3*g.2^2];
gap> AbelianInvariants(g);
GAP calls an integer matrix diagonalization program which computes Smith normal form to find AbelianInvariants, the elementary divisors of the quotient by the commutator subgroup. This will work even if the commutator quotient group is infinite. We could also have done the following:
gap> h:=CommutatorFactorGroup(g);
gap> RelatorsOfFpGroup(h);
gap> AbelianInvariants(h);
gap> Size(h);
gap> DerivedSubgroup(g);
Although the commutator subgroup only has index 12, something seems to be rather difficult for the computer here. You might well wonder what the computer is trying to do anyway. We use a different approach, observing that the commutator subgroup is the smallest normal subgroup containing the commutators of the generators.
gap> sub:=Subgroup(g,[g.1*g.2*g.1^-1*g.2^-1]);
gap> NormalClosure(g,sub);
Something went wrong there as well. We try a new idea.
gap> p:=PresentationNormalClosure(g,sub);
gap> Print(p);
gap> TzPrint(p);
gap> TzPrintRelators(p);
gap> AbelianInvariants(p);
To change between a group presentation and a group we use FpGroupPresentation and PresentationFpGroup.
gap> pg:=FpGroupPresentation(p);
gap> RelatorsOfFpGroup(pg);
gap> AbelianInvariants(pg);
gap> SimplifyPresentation(p);
At this stage we know that our group has a free subgroup of rank 2 as a normal subgroup, with abelian quotient which is cyclic of order 12. We could try to do more computations. For example we know from theory that the center of this group has order 2. However, the command Center does not help us. Computing with groups given as presentations is not so easy!
Exercise: Find out what you can about the normal closure of the first generator g.1 in g.
Here is another example of the kind of thing GAP can do:
gap> k:=GL(2,7);
gap> P := PresentationViaCosetTable( k );
gap> TzPrint(P);
gap> TzPrintRelators(P);
gap> SimplifyPresentation(P);
gap> FpGroupPresentation( P );
gap> Size(last);
The command PresentationViaCosetTable does not return the homomorphism to the presentation, which is useful if we wish to express an element of a group as a word in its generators. Instead we may use IsomorphismFpGroup or IsomorphismFpGroupByGenerators which are similar to IsomorphismPermGroup which we used in the last lesson. This would be useful for solving Rubik's cube.
gap> s4;
gap> gens:=GeneratorsOfGroup(s4);
gap> IsomorphismFpGroup(s4);
gap> iso:=IsomorphismFpGroupByGenerators(s4,gens);
gap> Image(iso, (1,2,3));
Records
gap> k:=Group((1,5)(2,6),(1,3)(4,6),(2,3)(4,5));
gap> kinfo:=rec();
gap> kinfo.size:=24;
gap> kinfo;
gap> kinfo.name:="s4";
gap> kinfo;
gap> RecNames(kinfo);
gap> kinfo.size;
How GAP works: Stabilizer chains
References: ?Stabilizer Chains
Also: Chapter 8 of A.M. Cohen et al. (eds.), Some tapas of computer algebra, Springer-Verlag.
gap> sc:=StabChain(k);
gap> BaseOfGroup(k);
gap> sc.orbit;
gap> sc.stabilizer.orbit;
gap> sc.stabilizer.generators;
Save the file lesson5code in your filespace and then do
gap> Read("lesson6code");
gap> Print(images);
gap> Print(righttransversal);
gap> images(sc);
gap> righttransversal(sc);
gap> m11;