// this script checks all genus 2 generating triples // setup SetLogFile("genus2check.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(5); CheckTriple(2,5,[5,5,5],G,x,x,x^3); print "###case 2"; G := CyclicGroup(6); CheckTriple(2,6,[3,6,6],G,x^4,x,x); print "###case 3"; G := CyclicGroup(8); CheckTriple(2,8,[2,8,8],G,x^4,x,x^3); print "###case 4"; G := PolycyclicGroup; x := a; y := b; CheckTriple(2,8,[4,4,4],G,x,y,y*x); [Order(x),Order(y)]; [x^2,y^2]; [y^x,y^(-1)]; print "###case 5"; G := CyclicGroup(10); CheckTriple(2,10,[2,5,10],G,x^5,x^2,x^3); print "###case 6"; G := AbelianGroup([6,2]); CheckTriple(2,12,[2,6,6],G,y,y-x,x); print "###case 7"; G := PolycyclicGroup; x :=a; y :=c; CheckTriple(2,12,[3,4,4],G,y,(x*y)^(-1),x); [Order(x),Order(y)]; [y^x, y^(-1)]; print "###case 8"; G := PolycyclicGroup; x :=a; y :=b; CheckTriple(2,16,[2,4,8],G,x,(y*x)^(-1),y); [Order(x),Order(y)]; [y^x, y^3]; print "###case 9"; G := PolycyclicGroup; CheckTriple(2,24,[2,4,6],G,x,(z*w*x)^(-1),z*w); print "###case 10"; G := SpecialLinearGroup(2,3); CheckTriple(2,24,[3,3,4],G,x,(y*x)^(-1),y); print "###case 11"; G := GeneralLinearGroup(2,3); CheckTriple(2,48,[2,3,8],G,x,y,(x*y)^(-1)); // finish UnsetLogFile();