F := FreeGroup(7); G := quo; H := sub; V := CosetSpace(G, H); ON := CosetImage(V); /* element of (projective) order */ ElementOfOrder := function (P, RequiredOrder, Limit : Fct := Order) if Type (RequiredOrder) eq RngIntElt then RequiredOrder := {RequiredOrder}; end if; NmrTries := Limit; repeat g, w := Random (P); o := Fct (g); NmrTries -:= 1; rem := exists (x) {x : x in RequiredOrder | (o mod x eq 0)}; until rem or (NmrTries eq 0); if rem then return g^(o div x), w^(o div x); else return false, _; end if; end function; /* sporadic maximal subgroup record format */ SporadicRF := recformat ; /* maximal subgroup list production */ ListMaximals := function (G, ParentName, L) X := []; Names := []; Orders := []; Index := []; for i in [1..#L] do if assigned L[i]`Parent and L[i]`Parent eq ParentName and #L[i]`generators gt 0 then F := Parent (L[i]`generators[1]); a := F.1; b := F.2; f := hom G | [G.1, G.2]>; images := [f (w): w in L[i]`generators]; X[#X + 1] := sub ; Names[#Names + 1] := L[i]`Name; Orders[#Orders + 1] := L[i]`Order; Index[#Index + 1] := L[i]`Index; end if; end for; return X, Names, Orders, Index; end function; /* presentation on standard generators for ON */ PresentationON := function (G : UserGenerators := [], Projective := false) Fct := Projective select ProjectiveOrder else Order; if #UserGenerators eq 0 then UserGenerators := [G.i : i in [1..Ngens (G)]]; end if; if #UserGenerators ne 2 then "Require 2 user generators"; return false; end if; a := UserGenerators[1]; b := UserGenerators[2]; "Warning: presentation not available"; return true; end function; /* black box recognition procedure for O'N */ StandardGeneratorsON := function (G : Projective := false, Limit := 100) Fct := Projective select ProjectiveOrder else Order; P := RandomProcessWithWords (G); g, w := ElementOfOrder (P, {20,28}, Limit: Fct := Fct); if Type (g) eq BoolElt then return false, _; end if; o := Fct (g); x := g^(o div 2); xw := w^(o div 2); b := g^(o div 4); bw := w^(o div 4); nmr := Limit; repeat nmr -:= 1; c, cw := Random (P); a := x^c; until Fct (a * b) eq 11 or nmr eq 0; if nmr eq 0 then return false, _; end if; aw := xw^cw; if not PresentationON (G: UserGenerators := [a, b], Projective := Projective) then return false, _; end if; return [a, b], [aw, bw]; end function; /* generators for maximal subgroups of ON */ GeneratorsONMax1 := function (a,b) w1 := a; w2 := b; w3:=w1*w2; w4:=w3*w2; w5:=w4*w4; w4:=w5^-1; w6:=w4*w2; w2:=w6*w5; w4:=w3^-1; w5:=w4*w1; w1:=w5*w3; return [w1,w2]; end function; GeneratorsONMax2 := function (a,b) w1 := a; w2 := b; w3:=w1*w2; w4:=w3*w2; w5:=w4*w4; w6:=w5^-1; w3:=w2^-1; w4:=w2*w1; w1:=w4*w3; w4:=w6*w3; w2:=w4*w5; return [w1,w2]; end function; GeneratorsONMax3 := function (a,b) w1 := a; w2 := b; w3:=w1*w2; w4:=w3*w2; w5:=w3*w4; w6:=w3*w5; w8:=w6*w5; w9:=w3*w8; w8:=w9*w9; w2:=w8*w8; w6:=w5^6; w7:=w6^-1; w8:=w7*w2; w2:=w8*w6; w5:=w4^7; w6:=w5^-1; w7:=w6*w1; w1:=w7*w5; return [w1,w2]; end function; GeneratorsONMax4 := function (a,b) w1 := a; w2 := b; w3:=w1*w2; w4:=w3*w2; w5:=w3*w4; w6:=w5^10; w7:=w6*w2; w8:=w2*w6; w9:=w8^-1; w6:=w9*w7; w1:=w6^14; w2:=w3*w4; return [w1,w2]; end function; GeneratorsONMax5 := function (a,b) w1 := a; w2 := b; w3:=w1*w2; w4:=w3*w2; w5:=w3*w4; w6:=w3*w5; w7:=w6*w3; w8:=w7*w4; w9:=w7*w8; w2:=w9*w9; w1:=w9*w9; w7:=w6*w4; w8:=w7^19; w9:=w8^-1; w10:=w9*w1; w1:=w10*w8; w7:=w4*w6; w8:=w7^17; w6:=w5*w4; w7:=w6*w3; w9:=w7^8; w7:=w8*w9; w6:=w7^-1; w8:=w6*w2; w2:=w8*w7; return [w1,w2]; end function; GeneratorsONMax6 := function (a,b) w1 := a; w2 := b; w3:=w1*w2; w4:=w3*w2; w5:=w3*w4; w6:=w3*w5; w7:=w6*w3; w8:=w7*w4; w9:=w7*w8; w2:=w9*w9; w1:=w9*w9; w7:=w6*w4; w8:=w7^19; w9:=w8^-1; w10:=w9*w1; w1:=w10*w8; w8:=w4*w6; w6:=w5*w4; w7:=w6*w3; w9:=w7^12; w7:=w8*w9; w6:=w7^-1; w8:=w6*w2; w2:=w8*w7; return [w1,w2]; end function; GeneratorsONMax7 := function (a,b) w1 := a; w2 := b; w3:=w1*w2; w4:=w3*w2; w5:=w3*w4; w4:=w5*w2; w5:=w4*w4; w2:=w5*w5; w4:=w3*w3; w5:=w3*w4; w4:=w5^-1; w3:=w4*w1; w1:=w3*w5; return [w1,w2]; end function; GeneratorsONMax8 := function (a,b) w1 := a; w2 := b; w3:=w1*w2; w4:=w3*w2; w5:=w4*w2; w4:=w5*w3; w3:=w4*w4; w2:=w3*w3; w4:=w5*w5; w3:=w5*w4; w4:=w3^-1; w5:=w4*w1; w1:=w5*w3; return [w1,w2]; end function; GeneratorsONMax9 := function (a,b) w1 := a; w2 := b; w3:=w1*w2; w4:=w3*w2; w5:=w3*w4; w6:=w3*w5; w8:=w6*w5; w9:=w3*w8; w8:=w9*w9; w2:=w8*w8; w5:=w4*w4; w4:=w5*w5; w5:=w4^-1; w6:=w5*w2; w2:=w6*w4; w4:=w3*w3; w3:=w4*w4; w4:=w3^-1; w5:=w4*w1; w1:=w5*w3; return [w1,w2]; end function; GeneratorsONMax10 := function (a,b) w1 := a; w2 := b; w3:=w1*w2; w4:=w3*w2; w5:=w3*w4; w6:=w3*w5; w7:=w6*w3; w8:=w7*w4; w9:=w7*w8; w2:=w9*w9; w7:=w6*w4; w8:=w7^4; w9:=w8^-1; w10:=w9*w1; w1:=w10*w8; w7:=w4*w6; w8:=w7^19; w6:=w5*w4; w7:=w6*w3; w9:=w7^2; w7:=w8*w9; w6:=w7^-1; w8:=w6*w2; w2:=w8*w7; return [w1,w2]; end function; GeneratorsONMax11 := function (a,b) w1 := a; w2 := b; w3:=w1*w2; w4:=w3*w2; w5:=w3*w4; w6:=w3*w5; w7:=w6*w3; w8:=w7*w4; w9:=w7*w8; w2:=w9*w9; w7:=w6*w4; w8:=w7^14; w9:=w8^-1; w10:=w9*w1; w1:=w10*w8; w7:=w4*w6; w8:=w7^2; w6:=w5*w4; w9:=w6*w3; w7:=w8*w9; w6:=w7^-1; w8:=w6*w2; w2:=w8*w7; return [w1,w2]; end function; GeneratorsONMax12 := function (a,b) w1 := a; w2 := b; w3:=w1*w2; w4:=w3*w2; w5:=w3*w4; w6:=w3*w5; w9:=w2*w5; w2:=w9*w9; w8:=w6*w4; w9:=w8^-1; w10:=w9*w1; w1:=w10*w8; w7:=w4*w6; w8:=w7^10; w6:=w5*w4; w7:=w6*w3; w9:=w7^3; w7:=w8*w9; w6:=w7^-1; w8:=w6*w2; w2:=w8*w7; return [w1,w2]; end function; GeneratorsONMax13 := function (a,b) w1 := a; w2 := b; w3:=w1*w2; w4:=w3*w2; w5:=w3*w4; w6:=w3*w5; w9:=w2*w5; w2:=w9*w9; w7:=w6*w4; w8:=w7^13; w9:=w8^-1; w10:=w9*w1; w1:=w10*w8; w7:=w4*w6; w8:=w7^27; w6:=w5*w4; w7:=w6*w3; w9:=w7^3; w7:=w8*w9; w6:=w7^-1; w8:=w6*w2; w2:=w8*w7; return [w1,w2]; end function; /* list of subgroups of ON */ DataON := function () F := SLPGroup (2); L := [ rec , rec , rec , rec , rec , rec , rec , rec , rec , rec , rec , rec , rec , rec ]; return L; end function; /* code to find standard generators of O'N and produce listing of maximal subgroups */ MaximalsON := function (G) x, y := StandardGeneratorsON(G); if Type(x) eq BoolElt then "Unable to find Standard Generators"; return false; end if; G := sub; return ListMaximals(G, "ON", DataON()); end function; m:=MaximalsON(ON); m;