Frequently Asked Questions
General
Obtaining GAP
Installation
Hardware/OS
Usage
Complaints
Computing with GAP
Programming GAP
7. Computing with GAP
7.10: "Is it possible using GAP to check that a given presentation defines a
nilpotent group of class 2 or not?"
For example $G=\langle a,b,c a^{p^5}, b^{p^3}, c^{p^2},
[a,b]=a^{p^3}, [a,c]=c^p, [b,c]=b^{p^2} \rangle $ where $p$ is a
prime.
Also how can we determine its automorphism group using GAP?
Answer:
The question was asked in this form in a GAP Forum letter on Jan. 27, 2010
and was answered in the Forum by three letters on Jan. 28. The answer
given here joins the contents of these.
First please note that the 'example' really is not a presentation of a
single group, but a family of presentations parametrized by the primes p.
GAP has no methods for handling such a family of presentations in one step.
However GAP has methods to investigate each such presentation for any
given (not too big) prime p. In her reply Bettina Eick recommends:
you can use GAP to investigate your question for any fixed prime p.
For example, the nilpotent quotient algorithm of the NQ package or the
NQL package of GAP allows you to determine the largest classc quotient
of a finitely presented group for any positive integer c or even the
largest nilpotent quotient (if this exists).
Further, there are methods available in GAP to determine the automorphism
group of a finite pgroup. Check the AutPGrp package for this purpose.
In your given example, you can implement your considered group G in GAP
as function in p:
G := function(p)
local F, f, r, a, b, c;
F := FreeGroup(3);
f := GeneratorsOfGroup(F); a := f[1]; b := f[2]; c := f[3];
r := [a^(p^5), b^(p^3), c^(p^2),
Comm(a,b)/a^(p^3),
Comm(a,c)/c^p,
Comm(b,c)/b^(p^2) ];
return F/r;
end;
Then you load the relevant packages
LoadPackage("nq");
LoadPackage("autpgrp");
And then you can do the following (for example for p=3):
gap> H := G(3);
[fp group on the generators [ f1, f2, f3 ]]
gap> K := NilpotentQuotient(H);
Pcpgroup with orders [ 27, 9, 3, 9, 3, 3 ]
gap> Length(LowerCentralSeries(K));
3
gap> A := AutomorphismGroupPGroup(K);;
gap> A.size;
14348907
Hence for p=3 your group has class 2 and you can see the size
of its automorphism group. Generators and further information on
the automorphisms is also stored in A, but is perhaps too long to
be displayed here.
In a second letter Derek Holt recommends:
You can use the GAP package KBMAG to prove nilpotency of finitely presented
groups, using the method described by Charles Sims in his book of computing
in finitely presented groups. This uses the KnuthBendix completion
algorithm.
This process is described and illustrated in Example 4 (p. 13) of the KBMAG
manual. I have successfully verifed that your group below is nilpotent of
order p^10 for p=2,3,5,7,11,13,17, and I am trying to do 19.
Of course, since these groups are (apparently) finite, you could try
use coset enumeration. This will work for small primes such as 2 and 3, but
for larger primes the group order will probably be too large, and I think
the Sims algorithm will work better.
You first run NilpotentQuotient (as described in Bettina Eick's reply) to
find the maximal nilpotent quotient of your group. The aim is then to
prove that the group is actually isomorphic to this quotient.
You do this by introducing new generators in the presentation which
correspond to the powercommutator generators in the maximal nilpotent
quotient. You order the generators so that those at the bottom of the
group come first and then use the socalled recursive ordering on strings
to run KnuthBendix.
Here is the basic GAP code to do this.
LoadPackage("kbmag");
SetInfoLevel(InfoRWS,2);
F:=FreeGroup("j","i","h","g","f","e","d","c","b","a");;
j:=F.1;; i:=F.2;; h:=F.3;; g:=F.4;; f:=F.5;;
e:=F.6;; d:=F.7;; c:=F.8;; b:=F.9;; a:=F.10;;
p:=3;;
rels := [a^p/e, b^p/f, c^p/d, e^p/g, f^p/h, g^p/i, i^p/j,
j^p, h^p, d^p, Comm(a,b)/i, Comm(a,c)/d, Comm(b,c)/h ];;
G := F/rels;;
R := KBMAGRewritingSystem(G);;
SetOrderingOfKBMAGRewritingSystem(R, "recursive");
MakeConfluent(R);
If successful it will halt with a confluent presentation containing the
relations of the powercommutator presentation of the computed maximal
nilpotent quotient. You have then proved that these relations hold in
the group itself (not just in the nilptent quotient), so you have proved
that the group is nilpotent. This consists of 65 reduction equations
(or 62 when p=2).
The above works quickly for p=2,3,5,7. For larger primes, it helps to
restrict the length of the stored reduction relations, and then rerun
after completion. You have to experiment to find the optimal maximal
length to store. So, for example, the following works fast for p=17:
p:=17;;
rels := [a^p/e, b^p/f, c^p/d, e^p/g, f^p/h, g^p/i, i^p/j,
j^p, h^p, d^p, Comm(a,b)/i, Comm(a,c)/d, Comm(b,c)/h ];;
G := F/rels;;
R := KBMAGRewritingSystem(G);;
SetOrderingOfKBMAGRewritingSystem(R, "recursive");
O := OptionsRecordOfKBMAGRewritingSystem(R);
O.maxstoredlen := [40,40];
MakeConfluent(R);
Unbind(O.maxstoredlen);
MakeConfluent(R);
In a final letter Charles Wright gave an elegant proof 'by hand' that in
fact all the groups for arbitrary primes are of nilpotency class 2 and order at
most p^10, a proof, the clues for which can perhaps be obtained from the
results of the GAP computations (which of course can be applied in
similar form also to other presentations). He writes:
If all you want to show is that this particular example is class 2 of
order (at most) p^10, though, it's easy to do it by hand.
We're given that a^b = a^(1+p^3), c^a = c^(1p) and b^c = b^(1+p^2).
Hence, (a^(p^3))^b = (a^b)^(p^3) = a^((1+p^3)p^3) = a^(p^3) and
c^(a^(p^3)) = c^((1p)^(p^3)) = c [what a mess of superscripts!],
so a^(p^3) (i.e., [a,b]) is in Z(G).
Similarly, a^(b^(p^2)) = a^((1+p^3)^(p^2)) = a and
(b^(p^2))^c = (b^c)^(p^2) = b^((1+p^2)p^2) = b^(p^2), so
b^(p^2) (i.e., [b,c]) is central.
Finally, (c^p)^a = c^((1p)p) = c^p and b^(c^p) = b^((1+p^2)^p) = b, so
c^p (i.e., [a,c]) is central.
Thus G/Z(G) is abelian. Since G' has order (at most) p^4 and G/G' has
order (at most) p^6, G has order (at most) p^10.
In the spirit of Burnside, I'll leave the elimination of "(at most)" to
the reader.
