// gettestwords.m : This is a Magma program which generates testwords
// used in the construction of Khukhro's 2-generator 7-group and
// 3-generator 5-group anti-Hughes groups, and for other counterexamples
// to the Hughes conjecture. These are written to two files
// "twB27c8" and "twB35c5" and are described in HVL09
// In the comments mathematical notation, not Magma notation, is used.
// Thus, in the comments [a, b] is a commutator, not a sequence.
// First contruct "twB27c8", used for 7-group computations
d := 2; p := 7; cl := 8; // ngens; prime; class
G := pQuotient( FreeGroup(d), p, cl : Exponent := p );
print "|B(2,7 : 8)| = ", FactoredOrder(G);
lastg := pRanks(G)[cl];
wt5start := pRanks(G)[4]+1; wt4start := pRanks(G)[3]+1;
G5 := sub< G | [ G.i : i in [wt5start..lastg] ] >; // G5 is gamma_5 of G
S := [ (a, G.i) : i in [wt4start..lastg] ] ; // S = < [a, gamma_4(G)] >
extrasa := [];
for i := lastg to wt5start by -1 do // reverse order matters
if G.i notin sub< G | S > then
Append( ~S, G.i ); Append( ~extrasa, G.i );
end if;
end for; //extrasa generates a complement for [a, gamma_4(G)] in gamma_5(G)
// Confirm that extrasa also generates a complement for
// [a * (b,a,b)^i * (b,a,b,b)^j, gamma_4(G)] in gamma_5(G)
// (This relies on the way this complement was built)
for i in [0..p-1] do for j in [0..p-1] do
S := [ (a * (b,a,b)^i * (b,a,b,b)^j, G.k) : k in [wt4start..lastg] ] ;
if sub< G | S cat extrasa > ne G5 then
print i, j, "ARGGGHHHH!!!!!!";
end if;
end for; end for; // OK as long as there is no ARGGGHHHH!!!!!!
//Now do it for b
S := [ (b, G.i) : i in [wt4start..lastg] ] ;
extrasb := [];
for i := lastg to wt5start by -1 do
if G.i notin sub< G | S > then
Append( ~S, G.i ); Append( ~extrasb, G.i );
end if;
end for; //extrasb generates a complement for [b, gamma_4(G)] in gamma_5(G)
for m in [0..p-1] do for i in [0..p-1] do for j in [0..p-1] do
S := [ (a^m * b * (b,a,a)^i * (b,a,a,a)^j, G.k) : k in [wt4start..lastg] ] ;
if sub< G | S cat extrasb > ne G5 then
print m, i, j, "ARGGGHHHH!!!!!!";
end if;
end for; end for; end for;
Reverse(~extrasa); Reverse(~extrasb); // We now need extras in normal order
wts := [ PCClass(x) : x in extrasa ];
words := [];
for i in [0..p-1] do for j in [0..p-1] do
g := a * (b,a,b)^i * (b,a,b,b)^j;
weight := 1 + 3*i + 4*j;
explen := 1 + i + j;
//Apply Higman's Lemma
if weight gt 14 then continue; end if;
if explen gt 1 and explen lt 7 then
if weight+7-explen gt 14 then continue; end if;
end if;
Append( ~words, g );
explen := explen+1;
for k in [1..#extrasa] do
if weight+wts[k] gt 14 then continue; end if;
if weight+wts[k]+7-explen gt 14 then continue; end if;
Append( ~words, g*extrasa[k] );
end for;
end for; end for;
wts := [ PCClass(x) : x in extrasb ];
for m in [0..p-1] do for i in [0..p-1] do for j in [0..p-1] do
g := a^m * b * (b,a,a)^i * (b,a,a,a)^j;
weight := m + 1 + 3*i + 4*j;
explen := m + 1 + i + j;
if weight gt 14 then continue; end if;
if weight+7-explen gt 14 then continue; end if;
Append( ~words, g );
explen := explen+1;
for k in [1..#extrasb] do
if weight+wts[k] gt 14 then continue; end if;
if weight+wts[k]+7-explen gt 14 then continue; end if;
Append( ~words, g*extrasb[k] );
end for;
end for; end for; end for;
print #words, "testwords for B(2,7 : 8)";
SetOutputFile( "twB27c8" : Overwrite := true );
print "testwords := [";
for i in [1..#words-1] do print words[i], "," ; end for;
print words[#words], "];" ;
UnsetOutputFile();
//Now compute the testwords for Khukhro's 3-generator 5-group counterexample
d := 3; p := 5; cl := 5; // ngens; prime; class
G := pQuotient( FreeGroup(d), p, cl : Exponent := p );
lastg := pRanks(G)[cl];
wt3start := pRanks(G)[2]+1; wt2start := pRanks(G)[1]+1;
print "|B(3,5 : 5)| = ", FactoredOrder(G);
G3 := sub< G | [ G.i : i in [wt3start..lastg] ] >; // G3 is gamma_3 of G
S := [ (a, G.i) : i in [wt2start..lastg] ] ; // S = < [a, gamma_2(G)] >
extrasa := [];
for i := lastg to wt3start by -1 do
if G.i notin sub< G | S > then
Append( ~S, G.i ); Append( ~extrasa, G.i );
end if;
end for; //extrasa generates a complement for [a, gamma_2(G)] in gamma_3(G)
// Check that extrasa also generates a complement for
// [a * (c,b)^i, gamma_2(G)] in gamma_3(G)
for i in [0..p-1] do
S := [ (a * (c,b)^i, G.k) : k in [wt2start..lastg] ] ;
if sub< G | S cat extrasa > ne G3 then
print i, "ARGGGHHHH!!!!!!";
end if;
end for;
S := [ (b, G.i) : i in [wt2start..lastg] ] ;
extrasb := [];
for i := lastg to wt3start by -1 do
if G.i notin sub< G | S > then
Append( ~S, G.i ); Append( ~extrasb, G.i );
end if;
end for;
for m in [0..p-1] do for i in [0..p-1] do
S := [ (a^m * b * (c,a)^i, G.k) : k in [wt2start..lastg] ] ;
if sub< G | S cat extrasb > ne G3 then
print m, i, "ARGGGHHHH!!!!!!";
end if;
end for; end for;
//And now for c
S := [ (c, G.i) : i in [wt2start..lastg] ] ;
extrasc := [];
for i := lastg to wt3start by -1 do
if G.i notin sub< G | S > then
Append( ~S, G.i ); Append( ~extrasc, G.i );
end if;
end for;
for m in [0..p-1] do for n in [0..p-1] do for i in [0..p-1] do
S := [ (a^m * b^n * c * (b,a)^i, G.k) : k in [wt2start..lastg] ] ;
if sub< G | S cat extrasc > ne G3 then
print m, n, i, "ARGGGHHHH!!!!!!";
end if;
end for; end for; end for;
Reverse(~extrasa); Reverse(~extrasb); Reverse(~extrasc);
// Compute HVL09 conjugacy class representatives (3)
wts := [ PCClass(x) : x in extrasa ];
words := [];
for i in [0..4] do for j1 in [0..2] do for j2 in [0..2] do
for j3 in [0..2] do for j4 in [0..2] do for j5 in [0..2] do
weight := 1 + 2*i + 3*(j1+j2+j3+j4+j5);
if weight gt 9 then continue; end if;
explen := 1 + i + j1+j2+j3+j4+j5;
if weight+5-explen gt 9 then continue; end if;
g := a * (c,b)^i * extrasa[1]^j1 * extrasa[2]^j2 * extrasa[3]^j3
* extrasa[4]^j4 * extrasa[5]^j5;
Append( ~words, g );
explen := explen+1;
for k in [6..#extrasa] do
if weight+wts[k] gt 9 then continue; end if;
if weight+wts[k]+5-explen gt 9 then continue; end if;
Append( ~words, g*extrasa[k] );
end for;
end for; end for; end for; end for; end for; end for;
// Compute HVL09 conjugacy class representatives (4)
wts := [ PCClass(x) : x in extrasb ];
for m in [0..4] do for i in [0..4] do for j1 in [0..2] do for j2 in [0..2] do
for j3 in [0..2] do for j4 in [0..2] do for j5 in [0..2] do
weight := m + 1 + 2*i + 3*(j1+j2+j3+j4+j5);
if weight gt 9 then continue; end if;
explen := m + 1 + i + j1+j2+j3+j4+j5;
if weight+5-explen gt 9 then continue; end if;
g := a^m * b * (c,a)^i * extrasb[1]^j1 * extrasb[2]^j2 * extrasb[3]^j3
* extrasb[4]^j4 * extrasb[5]^j5;
Append( ~words, g );
explen := explen+1;
for k in [6..#extrasb] do
if weight+wts[k] gt 9 then continue; end if;
if weight+wts[k]+5-explen gt 9 then continue; end if;
Append( ~words, g*extrasb[k] );
end for;
end for; end for; end for; end for; end for; end for; end for;
// Compute HVL09 conjugacy class representatives (5)
wts := [ PCClass(x) : x in extrasc ];
for m in [0..4] do for n in [0..4] do
if m+n eq 0 then continue; end if;
for i in [0..4] do for j1 in [0..2] do for j2 in [0..2] do
for j3 in [0..2] do for j4 in [0..2] do for j5 in [0..2] do
weight := m + n + 2*i + 3*(j1+j2+j3+j4+j5);
//Note that c does not contribute to the weight or exponent length.
if weight gt 9 then continue; end if;
explen := m + n + i + j1+j2+j3+j4+j5;
if weight+5-explen gt 9 then continue; end if;
g := a^m * b^n * c * (b,a)^i * extrasc[1]^j1 * extrasc[2]^j2
* extrasc[3]^j3 * extrasc[4]^j4 * extrasc[5]^j5;
Append( ~words, g );
explen := explen+1;
for k in [6..#extrasc] do
if weight+wts[k] gt 9 then continue; end if;
if weight+wts[k]+5-explen gt 9 then continue; end if;
Append( ~words, g*extrasc[k] );
end for;
end for; end for; end for; end for; end for; end for; end for; end for;
print #words, "testwords for B(3,5 : 5)";
SetOutputFile( "twB35c5" : Overwrite := true );
print "testwords := [";
for i in [1..#words-1] do print words[i],","; end for;
print words[#words],"];";
UnsetOutputFile();