// p7exp.m
print "Construct Khukhro's 2-generator 7-group counterexample to the Hughes",
"\nconjecture, and then repeatedly factor out complements to [b,a]^7 in",
"\nthe centre of the group, so as to obtain smaller counterexamples";
d := 2; p := 7; cl := 13; // ngens; prime; class
P := pQuotient( FreeGroup(d), p, cl : Exponent := p );
printf "\nB(2,7 : 13) has order %o^%o\n", p, FactoredOrder(P)[1][2];
G := pCoveringGroup(P);
printf "\nThe p-covering group G has order %o^%o and class %o",
p, FactoredOrder(G)[1][2], pClass(G);
print "\nG is generated by a and b; and [b,a] has order", Order( (b,a) ),
"\n[b,a,a] has order", Order( (b,a,a) ),
"; [b,a,b] has order", Order( (b,a,b) ),
"\ngamma_3(G) is the normal closure of < [b,a,a], [b,a,b] >,",
"\nand gamma_3(G) has class at most 4, so gamma_3(G) has exponent 7";
print "\nNow compute suitable 7th powers of elements outside the derived group";
load "twB27c8"; // should be already computed by gettestwords.m
S := [ x^p : x in testwords ];
H := quo< G | S >;
printf "The quotient group H has order %o^%o", p, FactoredOrder(H)[1][2];
print "\nH is generated by a and b; and [b,a] has order", Order( (b,a) ),
"\nH is Khukhro's 2-generator anti-Hughes 7-group";
print "\nNow factor out a complement for [b,a]^7 in the multiplier";
cl14start := FactoredOrder(P)[1][2] + 1;
ba7 := Eltseq( (b,a)^p );
// try all possible single PCP generators in [b,a]^7
for alive in [cl14start..1075] do
if ba7[alive] eq 0 then continue; end if; // skip if dead
// Since the exponent of H.alive is nonzero in [b,a]^7 we
// choose a complement of H.alive
print "\nFactoring out a complement of", H.alive,
"gives us a smaller anti-Hughes group";
CurrentQ :=
quo< H | [ H.i : i in ([669..alive-1] cat [alive+1..1075]) ] >;
printf "CurrentQ with order %o^%o", p, FactoredOrder(CurrentQ)[1][2];
print "\n CurrentQ is generated by a and b; and [b,a]^7 =", (b,a)^p;
//Repeatedly factor out complements for [b,a]^7 in the centre
Z := Centre(CurrentQ);
while Order(Z) ne p do
rank := FactoredOrder(Z)[1][2];
printf " Z, its centre, has order %o^%o", p, rank;
print "\n Now build a complement for [b,a]^7 in Z";
ZGens := [ CurrentQ!Z.i : i in [1..rank] ];
_, index := Max( Eltseq( (b,a)^p ) );
ComplGens := [ ZGens[i] * (CurrentQ.index)^-Eltseq(ZGens[i])[index]
: i in [1..rank] ];
NextQ := quo< CurrentQ | ComplGens >;
printf " Factor it out to get an anti-Hughes group of order %o^%o",
p, FactoredOrder(NextQ)[1][2];
print "\n generated by a and b; and [b,a]^7 =", (b,a)^p;
CurrentQ := NextQ;
Z := Centre(CurrentQ);
end while;
printf "The centre is generated by %o and has order %o^%o",
CurrentQ!(Z.1), p, FactoredOrder(Z)[1][2];
printf "\nSo this method reduces to an anti-Hughes group with order %o^%o",
p, FactoredOrder(CurrentQ)[1][2];
print "\nwhich is as far as we can reduce the group (by this method!)";
end for;