// gettestwq.m : This program is analogous to gettestwords.m but is used for // various quotient groups // Compute the testwords for the 3-generator 5-group example, // with normal closures of the generators having classes 4,4,1 d := 3; p := 5; cl := 2; // ngens; prime; class P := pQuotientProcess( FreeGroup(d), p, cl : Exponent := p ); NextClass( ~P : Exponent := p, MaxOccurrence := [4,4,1] ); NextClass( ~P : Exponent := p, MaxOccurrence := [4,4,1] ); NextClass( ~P : Exponent := p, MaxOccurrence := [4,4,1] ); G := ExtractGroup(P); cl := pClass(P); lastg := pRanks(G)[cl]; wt3start := pRanks(G)[2]+1; wt2start := pRanks(G)[1]+1; print "|B(3,5 : 5) mo441| = ", 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 generates [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) 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; 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 first part of conjugacy class representatives 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 weight := 1 + 2*i + 3*(j1+j2+j3); if weight gt 9 then continue; end if; explen := 1 + i + j1+j2+j3; if weight+5-explen gt 9 then continue; end if; g := a * (c,b)^i * extrasa[1]^j1 * extrasa[2]^j2 * extrasa[3]^j3 ; Append( ~words, g ); explen := explen+1; for k in [4..#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; //Compute second part of conjugacy class representatives 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 weight := m + 1 + 2*i + 3*(j1+j2+j3); if weight gt 9 then continue; end if; explen := m + 1 + i + j1+j2+j3; 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 ; Append(~words,g); explen := explen+1; for k in [4..#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; //Compute third part of conjugacy class representatives 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) mo441"; SetOutputFile( "twB35c5mo441" : Overwrite := true ); print "testwords := ["; for i in [1..#words-1] do print words[i],","; end for; print words[#words],"];"; UnsetOutputFile(); // Compute the testwords for the 3-generator 5-group example // with additional defining relators F := FreeGroup(3); Q := quo < F | (c,a,b), (c,b,b,b,a) >; d := 3; p := 5; cl := 5; // ngens; prime; class G := pQuotient( Q, p, cl : Exponent := p ); lastg := pRanks(G)[cl]; wt3start := pRanks(G)[2]+1; wt2start := pRanks(G)[1]+1; print "|B(3,5 : 5) quotient| = ", 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) quotient"; SetOutputFile( "twB35c5q" : Overwrite := true ); print "testwords := ["; for i in [1..#words-1] do print words[i],","; end for; print words[#words],"];"; UnsetOutputFile(); // Compute the testwords for the 3-generator 5-group example, // with normal closures of the generators having classes 4,4,1 // and additional defining relators F := FreeGroup(3); Q := quo < F | (c,a,b), (c,b,b,b,a) >; P := pQuotientProcess( Q, 5, 2 : Exponent := 5 ); NextClass( ~P : Exponent := p, MaxOccurrence := [4,4,1] ); NextClass( ~P : Exponent := p, MaxOccurrence := [4,4,1] ); NextClass( ~P : Exponent := p, MaxOccurrence := [4,4,1] ); G := ExtractGroup(P); cl := pClass(P); lastg := pRanks(G)[cl]; wt3start := pRanks(G)[2]+1; wt2start := pRanks(G)[1]+1; print "|B(3,5 : 5) quotient mo441| = ", 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 generates [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) 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; 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 first part of conjugacy class representatives 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 weight := 1 + 2*i + 3*(j1+j2+j3); if weight gt 9 then continue; end if; explen := 1 + i + j1+j2+j3; if weight+5-explen gt 9 then continue; end if; g := a * (c,b)^i * extrasa[1]^j1 * extrasa[2]^j2 * extrasa[3]^j3 ; Append( ~words, g ); explen := explen+1; for k in [4..#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; //Compute second part of conjugacy class representatives 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 weight := m + 1 + 2*i + 3*(j1+j2+j3); if weight gt 9 then continue; end if; explen := m + 1 + i + j1+j2+j3; 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 ; Append(~words,g); explen := explen+1; for k in [4..#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; //Compute third part of conjugacy class representatives 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) quotient mo441"; SetOutputFile( "twB35c5qmo441" : Overwrite := true ); print "testwords := ["; for i in [1..#words-1] do print words[i],","; end for; print words[#words],"];"; UnsetOutputFile(); // Compute the testwords for the 2-generator 7-group example // with additional defining relators // In this case we "hand select" complements!!! F := FreeGroup(2); Q := quo < F | (b,a,a,a,a,b),(b,a,a,a,a,a,b),(b,a,a,a,a,a,a,b), (a,b,b,b,b,a),(a,b,b,b,b,b,a),(a,b,b,b,b,b,b,a) >; d := 2; p := 7; cl := 8; // ngens; prime; class G := pQuotient( Q, p, cl : Exponent := p ); print "|B(2,7 : 8) quotient| = ", 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 := [ G.38, G.37, G.35, G.33, G.31, G.27, G.26, G.21, G.20, G.18, G.14, G.12, G.10 ]; //extrasa generates a complement for [a, gamma_4(G)] in gamma_5(G) if sub< G | S cat extrasa > ne G5 then "FAIL 1"; end if; if G.31 in sub< G | S > then "FAIL 1A"; end if; // Confirm that this complement has the property claimed for i in [0..p-1] do for j in [0..p-1] do SS := [ (a * (b,a,b)^i * (b,a,b,b)^j, G.k) : k in [wt4start..lastg] ] ; if sub< G | SS cat extrasa > ne G5 then print i, j, "ARGGGHHHH!!!!!!"; end if; end for; end for; //Now do it for b S := [ (b, G.i) : i in [wt4start..lastg] ] ; extrasb := [ G.34, G.32, G.30, G.28, G.25, G.23, G.19, G.16, G.15, G.13, G.11, G.9 ]; if sub< G | S cat extrasb > ne G5 then "FAIL 2"; end if; if G.32 in sub< G | S > then "FAIL 2A"; end if; for m in [0..p-1] do for i in [0..p-1] do for j in [0..p-1] do SS := [ (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 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) quotient"; SetOutputFile( "twB27c8q" : Overwrite := true ); print "testwords := ["; for i in [1..#words-1] do print words[i], "," ; end for; print words[#words], "];" ; UnsetOutputFile();