// this script checks all genus 3 generating triples // setup SetLogFile("genus3check.log":Overwrite := true); CheckTriple := function(sigma,g,ords,G,a,b,c); print sigma,g,ords; print G, [a,b,c]; l := ords[1]; m := ords[2]; n := ords[3]; RH := (2*sigma-2)/g -(1-1/l-1/m-1/n); return([ RH eq 0, g eq #G, #G eq #sub, l eq Order(a),m eq Order(b), n eq Order(c), a*b*c eq Identity(G)]); end function; // tests print "###case 1"; G := CyclicGroup(7); CheckTriple(3,7,[7,7,7],G,x,x,x^5); print "###case 2"; G := CyclicGroup(7); CheckTriple(3,7,[7,7,7],G,x,x^2,x^4); print "###case 3"; G := CyclicGroup(8); CheckTriple(3,8,[4,8,8],G,x^6,x,x); print "###case 4"; G := CyclicGroup(8); CheckTriple(3,8,[4,8,8],G,x^2,x,x^5); print "###case 5"; G := CyclicGroup(9); CheckTriple(3,9,[3,9,9],G,x^3,x^5,x); print "###case 6"; G := CyclicGroup(12); CheckTriple(3,12,[2,12,12],G,x^6,x^5,x); print "###case 7"; G := CyclicGroup(12); CheckTriple(3,12,[3,4,12],G,x^8,x^3,x); print "###case 7"; G := CyclicGroup(12); CheckTriple(3,12,[3,4,12],G,x^8,x^3,x); print "###case 8"; G := PolycyclicGroup; x := a; y := c; CheckTriple(3,12,[4,4,6],G,x,x*y^2,x^2*y); [Order(x),Order(y)]; [y^x,y^(-1)]; print "###case 9"; G := CyclicGroup(14); CheckTriple(3,14,[2,7,14],G,x^7,x^6,x); print "###case 10"; G := AbelianGroup([8,2]); CheckTriple(3,16,[2,8,8],G,y,y-x,x); print "###case 11"; G := PolycyclicGroup; x := a; y := b; CheckTriple(3,16,[2,8,8],G,x,x*y^(-1),y); [Order(x),Order(y)]; [y^x,y^5]; print "###case 12"; G := AbelianGroup([4,4]); CheckTriple(3,16,[4,4,4],G,x,y,-x-y); print "###case 13"; G := PolycyclicGroup; x := a; y := c; CheckTriple(3,16,[4,4,4],G,x,y,(x*y)^(-1)); [Order(x),Order(y)]; [y^x,y^(-1)]; print "###case 14"; G := PolycyclicGroup; CheckTriple(3,21,[3,3,7],G,x,(y*x)^(-1),y); print "###case 15"; G := PolycyclicGroup; x :=a; y :=b; CheckTriple(3,24,[2,4,12],G,x,(y*x)^(-1),y); [Order(x),Order(y)]; [y^x,y^5]; print "###case 16"; G := PolycyclicGroup; x := a; y := b; z := c; CheckTriple(3,24,[2,6,6],G,z,y*x,(z*y*x)^(-1)); [Order(x),Order(y), Order(z)]; [z,z^y,z^(y^2)]; print "###case 17"; G := SpecialLinearGroup(2,3); CheckTriple(3,24,[3,3,6],G,x,x^y,(x*x^y)^(-1)); print "###case 18"; G:= SymmetricGroup(4); x := G!(1,2,3,4); y :=G!(1,4,2,3); x; y; CheckTriple(3,24,[3,4,4],G,(x*y)^(-1),x,y); print "###case 19"; G := PolycyclicGroup; x := a; y := b; z := c; CheckTriple(3,32,[2,4,8],G,x,x*z,(z)^(-1)); [Order(x),Order(y),Order(z)]; [z^x,y*z^3]; print "###case 20"; G := PolycyclicGroup; x := a; y := b; z := c; CheckTriple(3,32,[2,4,8],G,x,x*z,(z)^(-1)); [Order(x),Order(y),Order(z)]; [y^x,y*z^4]; [z^x,y*z^3]; [z^y,z^5]; print "###case 21"; G := PolycyclicGroup; CheckTriple(3,48,[2,3,12],G,x*z,y*z*w,x*y^2*z*w); print "###case 22"; G:= DirectProduct(CyclicGroup(2),SymmetricGroup(4)); CheckTriple(3,48,[2,4,6],G,x*z,y^(-1),y*z*x); print "###case 23"; G := PolycyclicGroup; x := a; y := b; z := c; CheckTriple(3,48,[3,3,4],G,x,(y*x)^(-1),y); [Order(x),Order(y), Order(z)]; [y^x,z]; [z^x,(y*z)^(-1)]; print "###case 24"; G := PolycyclicGroup; x := a; y := b; z := c; w := d; CheckTriple(3,96,[2,3,8],G,x*y^(-1),y*w,x*z^(-1)); [Order(x),Order(y), Order(z),Order(w)]; [y^x,y^2]; [z^x,w]; [w^x,z]; [z^y,w]; [w^y,(z*w)^(-1)]; print "###case 25"; P := SymmetricGroup(8); x := P!(1,6)(2,3)(4,5)(7,8); y := P!(1,8,7)(2,6,4); z := P!(1,2,3,4,5,6,7); G := sub; CheckTriple(3,168,[2,3,7],G,x^(-1),y^(-1),z^(-1)); // finish UnsetLogFile();