/* M23 presented on its standard generators. Length: 190 [or 238]. NoRels: 8 [or 9]. [Depends on whether (x*y*x*y^2*x*y^2)^6=1 is included.] Enumerates quite well with (x*y*x*y^2*x*y^2)^6=1. It enumerates quite appallingly without it. */ G:=Group; a:=x;b:=y; H1:=sub; // C23, of index 443520. H2:=sub; // D12, of index 850080. H0:=sub; // Centraliser of the involution a [i.e. 2^4:L3(2)], index 3795. H:=sub; // Visibly the same as H0. // Maximal subgroups. M1:=sub; // M22, of index 23. M2:=sub; // L3(4):2b, of index 253. M3:=sub; // 2^4:A7, of index 253. M4:=sub; // A8, of index 506. M5:=sub; // M11, of index 1288. M6:=sub; // 2^4:(A5 x 3):2, of index 1771. M7:=sub; // 23:11, of index 40320. K:=sub; // K = A7, of index 4048. /* Demonstration of correctness. Without (x*y*x*y^2*x*y^2)^6 = 1. One must enumerate the cosets of H = H0, which visibly centralises x. One gets an index of 3795, which is what we expect in M23. It is not too hard to show that G is perfect (though you do have to abelianise one of the long relations as is not perfect.) Then G will be generated by conjugates of x. Since M23 has trivial Schur multiplier, we get G = M23. This enumeration is hard, the other possible enumerations, on the cosets of H1 or H2 are even harder. The following should work. Index(G,H:Print:=2,Hard:=true,Grain:=10^6,CosetLimit:=2*10^6);""; 23*Index(G,H1:Print:=2,Hard:=true,Grain:=10^6,CosetLimit:=16*10^6);""; 12*Index(G,H2:Print:=2,Hard:=true,Grain:=10^6,CosetLimit:=23*10^6);""; Index(G,M1:Print:=2,Hard:=true,Grain:=10^6,CosetLimit:=1000);""; Index(G,M2:Print:=2,Hard:=true,Grain:=10^6,CosetLimit:=2*10^6);""; Index(G,M3:Print:=2,Hard:=true,Grain:=10^6,CosetLimit:=200000);""; Index(G,M4:Print:=2,Hard:=true,Grain:=10^6,CosetLimit:=14*10^6);""; Index(G,M5:Print:=2,Hard:=true,Grain:=10^6,CosetLimit:=20000);""; Index(G,M6:Print:=2,Hard:=true,Grain:=10^6,CosetLimit:=100000);""; Index(G,M7:Print:=2,Hard:=true,Grain:=10^6,CosetLimit:=16*10^6);""; Index(G,K:Print:=2,Hard:=true,Grain:=10^6,CosetLimit:=600000);""; With (x*y*x*y^2*x*y^2)^6 = 1. Demonstration of correctness as above, required coset enumerations are much easier however. The following should work. Index(G,H:Print:=2,Hard:=true,Grain:=10^5,CosetLimit:=40000); 23*Index(G,H1:Print:=2,Hard:=true,Grain:=10^5,CosetLimit:=500000); 12*Index(G,H2:Print:=2,Hard:=true,Grain:=10^5,CosetLimit:=10^6); Index(G,M1:Print:=2,Hard:=true,Grain:=10^5,CosetLimit:=1000); Index(G,M2:Print:=2,Hard:=true,Grain:=10^5,CosetLimit:=20000); Index(G,M3:Print:=2,Hard:=true,Grain:=10^5,CosetLimit:=30000); Index(G,M4:Print:=2,Hard:=true,Grain:=10^5,CosetLimit:=20000); Index(G,M5:Print:=2,Hard:=true,Grain:=10^5,CosetLimit:=10000); Index(G,M6:Print:=2,Hard:=true,Grain:=10^5,CosetLimit:=10000); Index(G,M7:Print:=2,Hard:=true,Grain:=10^5,CosetLimit:=150000); Index(G,K:Print:=2,Hard:=true,Grain:=10^5,CosetLimit:=30000); */