/*
Presentation for the Gauss-Picard modular group
*/
G* := Group**;
/*
Auxiliary elements
*/
a := i*(t^-1*i*q)^2*i;
r := (i*t)^3;
s := i*t*q*i;
/*
Representatives for the conjugacy classes of torsion in G. Our list has repetition, since we enumerate the elements of each finite group. The groups are:
* Cyclic of order 2
Cyclic of order 8
Cyclic of order 12
* Group of order 32
This group has a normal index 2 subgroup generated by a and i*a*i^-1 = i*a*i, which commute, hence is the direct product of two cyclic groups of order 4. The group of order 32 is a semi-direct product of this abelian group with a cyclic group of order 2 generated by i.
** Cyclic of order 2
Cyclic of order 4
Cyclic of order 4
Abelian of order 8
** Symmetric group on 3 letters
*/
torsion := [* q, q*s, (q*s)^2, (q*s)^3, (q*s)^4, (q*s)^5, (q*s)^6, (q*s)^7, i*t, (i*t)^2, (i*t)^3, (i*t)^4, (i*t)^5, (i*t)^6, (i*t)^7, (i*t)^8, (i*t)^9, (i*t)^10, (i*t)^11, a, a^2, a^3, i*a*i, i*a^2*i, i*a^3*i, a*i*a*i, a*i*a^2*i, a*i*a^3*i, a^2*i*a*i,a^2*i*a^2*i, a^2*i*a^3*i, a^3*i*a*i, a^3*i*a^2*i, a^3*i*a^3*i, a*i, a^2*i, a^3*i, i, i*a, i*a^2, i*a^3, a*i*a, a*i*a^2, a*i*a^3, a^2*i*a, a^2*i*a^2, a^2*i*a^3, a^3*i*a, a^3*i*a^2, a^3*i*a^3, r, r^2, r^3, r*i, r^2*i, r^3*i, i*q, (i*q)^2, i*q*i *];
/*
The finite quotient of G of order 1536.
*/
F := Group;
printf "The group F is finite of order "; #F;
Fp, Fphom := PermutationGroup(F);
Fhoms := Homomorphisms(G, Fp);
/*
The subgroup associated with our surface
*/
Fhom := Fhoms[1];
Fp, Fphom := PermutationGroup(F);
H := Rewrite(G, Kernel(Fhom));
/*
The index of H in G.
*/
printf "Index of H in G is "; Index(G, H);
printf "Thus the Euler number of the cover is "; Index(G, H)/32;
/*
Check that H is torsion-free.
*/
for t in torsion do
tf := true;
if t in H then
tf := false;
break t;
end if;
end for;
if tf then
print "The group H is torsion free";
else
printf "The group H contains the torsion element "; t;
end if;
/*
The image in G/H of the peripheral subgroup of G.
*/
FB := sub;
/*
Compute the number of cusps by calculating the index of B/(B meet H) in G/H.
*/
printf "Number of cusps for the cover is "; Index(Fp, FB);
/*
Abstract presentation for the maximal peripheral subgroup of G.
*/
B := Group;
/*
Calculate the peripheral subgroup for any of the 24 cusps by computing a presentation for the kernel of the homomorphism from B to G/H.
*/
bhom := homFp | R->Fhom(r), Q->Fhom(q), T->Fhom(t)>;
BK := Rewrite(B, Kernel(bhom));
print "The fundamental group of each cusp cross-section is:";
BK;
/*
The usual presentation for the candidate cusp subgroup.
*/
Bnew := Group;
print "Candidate cusp group has standard presentation:";
Bnew;
print "Search for isomorphism of Bnew with known cusp subgroup:";
SearchForIsomorphism(Bnew, BK, 10);
*