Goto Chapter: Top 1 2 3 Bib Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

3 Subgroups of \({\rm PSL}_2(ℤ)\)
 3.1 Construction of projective modular subgroups
 3.2 Getters for the coset action
 3.3 Computing with projective modular subgroups

3 Subgroups of \({\rm PSL}_2(ℤ)\)

Analogous to finite-index subgroups of \({\rm SL}_2(ℤ)\), we define a new type ProjectiveModularSubgroup for representing subgroups of \({\rm PSL}_2(ℤ)\). It consists essentially of two permutations \(\sigma_{\overline{S}}\) and \(\sigma_{\overline{T}}\) describing the action of \(\overline{S}\) and \(\overline{T}\) on the cosets of the given subgroup, where \(\overline{S}\) and \(\overline{T}\) are the images of \(S\) and \(T\) in \({\rm PSL}_2(ℤ)\).
The methods implemented for \({\rm PSL}_2(ℤ)\) subgroups are mostly the same as for \({\rm SL}_2(ℤ)\) subgroups and behave more or less identically. Nevertheless we list them here.

3.1 Construction of projective modular subgroups

3.1-1 ProjectiveModularSubgroup
‣ ProjectiveModularSubgroupViaRightAction( s, t )( operation )

Returns: A projective modular subgroup.

Constructs a ProjectiveModularSubgroup object corresponding to the finite-index subgroup of \({\rm PSL}_2(ℤ)\) described by the permutations s and t.
This constructor tests if the given permutations actually describe the coset action of \(\overline{S}\) and \(\overline{T}\) on some subgroup by checking that they act transitively and satisfy the relations

\[s^2 = (s t)^3 = 1\]

Upon creation, the cosets are renamed in a standardized way to make the internal interaction with extisting GAP methods easier.

gap> G := ProjectiveModularSubgroupViaRightAction(
> (1,2)(3,4)(5,6)(7,8)(9,10),
> (1,4)(2,5,9,10,8)(3,7,6));
<projective modular subgroup of index 10>

If you want to construct a ProjectiveModularSubgroup from a list of generators, you can lift each generator to a matrix in \({\rm SL}_2(ℤ)\), construct from these a ModularSubgroup, and then project it to \({\rm PSL}_2(ℤ)\) via Projectivization.

‣ ProjectiveModularSubgroupViaLeftAction( s, t )( operation )

Returns: A projective modular subgroup.

Analogous to ProjectiveModularSubgroupViaRightAction, but with left coset actions.

3.2 Getters for the coset action

3.2-1 SAction
‣ SRightAction( G )( operation )

Returns: A permutation.

Returns the permutation \(\sigma_{\overline{S}}\) describing the action of \(\overline{S}\) on the right cosets of G.

‣ SLeftAction( G )( operation )

Returns: A permutation.

Analogous to SRightAction, but with left coset actions.

3.2-2 TAction
‣ TRightAction( G )( operation )

Returns: A permutation.

Returns the permutation \(\sigma_{\overline{T}}\) describing the action of \(\overline{T}\) on the right cosets of G.

‣ TLeftAction( G )( operation )

Returns: A permutation.

Analogous to TRightAction, but with left coset actions.

3.3 Computing with projective modular subgroups

3.3-1 Index
‣ Index( G )( attribute )

Returns: A natural number.

For a given projective modular subgroup G this method returns its index in \({\rm PSL}_2(ℤ)\). As G is internally stored as permutations \((s,t)\) this is just


      LargestMovedPoint(s,t)
    

(or \(1\) if the permutations are trivial).

gap> G := ProjectiveModularSubgroup((1,2),(2,3));
<projective modular subgroup of index 3>
gap> Index(G);
3

3.3-2 GeneralizedLevel
‣ GeneralizedLevel( G )( attribute )

Returns: A natural number.

This method calculates the general Wohlfahrt level (i.e. the lowest common multiple of all cusp widths) of G as defined in [Woh64].

gap> G := ProjectiveModularSubgroup(
> (1,2)(3,6)(4,8)(5,9)(7,11)(10,13)(12,15)(14,17)(16,19)(18,21)(20,23)(22,24),
> (1,3,7,4)(2,5)(6,9,8,12,14,10)(11,13,16,20,18,15)(17,21,22,19)(23,24)
> );
<projective modular subgroup of index 24>
gap> GeneralizedLevel(G);
12

3.3-3 CosetRepresentatives
‣ RightCosetRepresentatives( G )( attribute )

Returns: A list of words.

This function returns a list of representatives of the (right) cosets of G as words in \(\overline{S}\) and \(\overline{T}\).

gap> G := ProjectiveModularSubgroup((1,2),(2,3));
<projective modular subgroup of index 3>
gap> RightCosetRepresentatives(G);
[ <identity ...>, S, S*T ]
‣ LeftCosetRepresentatives( G )( attribute )

Returns: A list of words.

Analogous to LeftCosetRepresentatives, but with left coset actions.

3.3-4 WordGeneratorsOfGroup
‣ WordGeneratorsOfGroup( G )( attribute )

Returns: A list of words.

Calculates a list of generators (as words in \(\overline{S}\) and \(\overline{T}\)) of G. This list might include redundant generators.

gap> G := ProjectiveModularSubgroup((1,2)(3,5)(4,6), (1,3)(2,4)(5,6));
<projective modular subgroup of index 6>
gap> WordGeneratorsOfGroup(G);
[ T^-2, S*T^-2*S^-1 ]

3.3-5 IsCongruence
‣ IsCongruence( G )( attribute )

Returns: True or false.

This method test whether a given modular subgroup G is a congruence subgroup. It is essentially an implementation of an algorithm described in [Hsu96].

gap> G := ProjectiveModularSubgroup(
> (1,2)(3,5)(4,6),
> (1,3)(2,4)(5,6)
> );
<projective modular subgroup of index 6>
gap> IsCongruence(G);
true

3.3-6 Cusps
‣ Cusps( G )( attribute )

Returns: A list of rational numbers and infinity.

This method computes a list of inequivalent cusp representatives with respect to G.

gap> G := ProjectiveModularSubgroup(
> (1,2)(3,6)(4,8)(5,9)(7,11)(10,13)(12,15)(14,17)(16,19)(18,21)(20,23)(22,24),
> (1,3,7,4)(2,5)(6,9,8,12,14,10)(11,13,16,20,18,15)(17,21,22,19)(23,24)
> );
<projective modular subgroup of index 24>
gap> Cusps(G);
[ infinity, 0, 1, 2, 3/2, 5/3 ]

3.3-7 CuspWidth
‣ CuspWidth( c, G )( operation )

Returns: A natural number.

This method takes as input a cusp c (a rational number or infinity) and a modular group G and calculates the width of this cusp with respect to G.

gap> G := ProjectiveModularSubgroup(
> (1,2)(3,7)(4,8)(5,9)(6,10)(11,12),
> (1,3,4)(2,5,6)(7,10,11)(8,12,9)
> );
<projective modular subgroup of index 12>
gap> CuspWidth(-1, G);
3
gap> CuspWidth(infinity, G);
3

3.3-8 CuspsEquivalent
‣ CuspsEquivalent( p, q, G )( operation )

Returns: True or false.

Takes two cusps p and q and a projective modular subgroup G and checks if they are equivalent modulo G, i.e. if there exists \(A \in G\) with \(Ap = q\).

gap> G := ProjectiveModularSubgroup(
> (1,2)(3,7)(4,8)(5,9)(6,10)(11,12),
> (1,3,4)(2,5,6)(7,10,11)(8,12,9)
> );
<projective modular subgroup of index 12>
gap> CuspsEquivalent(infinity, 1, G);
false
gap> CuspsEquivalent(-1, 1/2, G);
true

3.3-9 CosetRepresentativeOfCusp
‣ CosetRepresentativeOfCusp( c, G )( operation )

Returns: A word in S and T.

For a cusp c this function returns a right coset representative \(A\) of G such that \(A \infty \) and c are equivalent with respect to G.

gap> G := ProjectiveModularSubgroup(
> (1,2)(3,7)(4,8)(5,9)(6,10)(11,12),
> (1,3,4)(2,5,6)(7,10,11)(8,12,9)
> );
<projective modular subgroup of index 12>
gap> CosetRepresentativeOfCusp(4, G);
T*S

3.3-10 LiftToSL2ZEven
‣ LiftToSL2ZEven( G )( operation )

Returns: A modular subgroup.

Lifts a given subgroup G of \({\rm PSL}_2(ℤ)\) to an even subgroup of \({\rm SL}_2(ℤ)\), i.e. a group that contains \(-1\) and whose projection to \({\rm PSL}_2(ℤ)\) is G.

gap> G := ProjectiveModularSubgroup(
> (1,2)(3,7)(4,8)(5,9)(6,10)(11,12),
> (1,3,4)(2,5,6)(7,10,11)(8,12,9)
> );
<projective modular subgroup of index 12>
gap> LiftToSL2ZEven(G);
<modular subgroup of index 12>

3.3-11 LiftToSL2ZOdd
‣ LiftToSL2ZOdd( G )( operation )

Returns: A modular subgroup.

Lifts a given subgroup G of \({\rm PSL}_2(ℤ)\) to an odd subgroup of \({\rm SL}_2(ℤ)\), i.e. a group that does not contain \(-1\) and whose projection to \({\rm PSL}_2(ℤ)\) is G.

gap> G := ProjectiveModularSubgroup(
> (1,2)(3,7)(4,8)(5,9)(6,10)(11,12),
> (1,3,4)(2,5,6)(7,10,11)(8,12,9)
> );
<projective modular subgroup of index 12>
gap> LiftToSL2ZOdd(G);
<modular subgroup of index 24>

3.3-12 IndexModN
‣ IndexModN( G, N )( operation )

Returns: A natural number.

For a projective modular subgroup G and a natural number N this method calculates the index of the projection \(\bar{G}\) of \(G\) in \({\rm PSL}_2(ℤ/Nℤ)\).

gap> G := ProjectiveModularSubgroup(
> (1,2)(3,6)(4,8)(5,9)(7,11)(10,13)(12,15)(14,17)(16,19)(18,21)(20,23)(22,24),
> (1,3,7,4)(2,5)(6,9,8,12,14,10)(11,13,16,20,18,15)(17,21,22,19)(23,24)
> );
<projective modular subgroup of index 24>
gap> IndexModN(G, 2);
6

3.3-13 Deficiency
‣ Deficiency( G, N )( operation )

Returns: A natural number.

For a projective modular subgroup G and a natural number N this method calculates the so-called deficiency of G from being a congruence subgroup of level N.
The deficiency of a finite-index subgroup \(\Gamma\) of \({\rm PSL}_2(ℤ)\) was introduced in [Wei15]. It is defined as the index \([\Gamma(N) \colon \Gamma(N) \cap \Gamma]\) where \(\Gamma(N)\) is the principal congruence subgroup of level \(N\).

gap> G := ProjectiveModularSubgroup(
> (1,2)(3,6)(4,8)(5,9)(7,11)(10,13)(12,15)(14,17)(16,19)(18,21)(20,23)(22,24),
> (1,3,7,4)(2,5)(6,9,8,12,14,10)(11,13,16,20,18,15)(17,21,22,19)(23,24)
> );
<projective modular subgroup of index 24>
gap> Deficiency(G, 4);
4

3.3-14 Deficiency
‣ Deficiency( G )( attribute )

Returns: A natural number.

Shorthand for Deficiency(G, GeneralizedLevel(G)).

gap> G := ProjectiveModularSubgroup(
> (1,2)(3,6)(4,8)(5,9)(7,11)(10,13)(12,15)(14,17)(16,19)(18,21)(20,23)(22,24),
> (1,3,7,4)(2,5)(6,9,8,12,14,10)(11,13,16,20,18,15)(17,21,22,19)(23,24)
> );
<projective modular subgroup of index 24>
gap> Deficiency(G);
4
gap> Deficiency(G, GeneralizedLevel(G));
4

3.3-15 ConjugateGroup
‣ ConjugateGroup( G, A )( operation )

Returns: A ProjectiveModularSubgroup.

For an \({\rm SL}_2(ℤ)\) matrix A, conjugates the group G by (the residue class in \({\rm PSL}_2(ℤ)\) of) A and returns the group \(A^{-1}*G*A\).

3.3-16 NormalCore
‣ NormalCore( G )( attribute )

Returns: A projective modular subgroup.

Calculates the normal core of G in \({\rm PSL}_2(ℤ)\), i.e. the maximal subgroup of G that is normal in \({\rm PSL}_2(ℤ)\).

gap> G := ProjectiveModularSubgroup(
> (1,2)(3,6)(4,8)(5,9)(7,11)(10,13)(12,15)(14,17)(16,19)(18,21)(20,23)(22,24),
> (1,3,7,4)(2,5)(6,9,8,12,14,10)(11,13,16,20,18,15)(17,21,22,19)(23,24)
> );
<projective modular subgroup of index 24>
gap> NormalCore(G);
<projective modular subgroup of index 3456>

3.3-17 QuotientByNormalCore
‣ QuotientByNormalCore( G )( attribute )

Returns: A finite group.

Calculates the quotient of \({\rm PSL}_2(ℤ)\) by the normal core of G.

gap> G := ProjectiveModularSubgroup(
> (1,2)(3,6)(4,8)(5,9)(7,11)(10,13)(12,15)(14,17)(16,19)(18,21)(20,23)(22,24),
> (1,3,7,4)(2,5)(6,9,8,12,14,10)(11,13,16,20,18,15)(17,21,22,19)(23,24)
> );
<projective modular subgroup of index 24>
gap> QuotientByNormalCore(G);
<permutation group with 2 generators>

3.3-18 AssociatedCharacterTable
‣ AssociatedCharacterTable( G )( attribute )

Returns: A character table.

Returns the character table of \({\rm PSL}_2(ℤ)/N\) where \(N\) is the normal core of G.

gap> G := ProjectiveModularSubgroup(
> (1,2)(3,6)(4,8)(5,9)(7,11)(10,13)(12,15)(14,17)(16,19)(18,21)(20,23)(22,24),
> (1,3,7,4)(2,5)(6,9,8,12,14,10)(11,13,16,20,18,15)(17,21,22,19)(23,24)
> );
<projective modular subgroup of index 24>
gap> AssociatedCharacterTable(G);
CharacterTable( <permutation group of size 3456 with 2 generators> )

3.3-19 IsElementOf
‣ IsElementOf( A, G )( operation )

Returns: True or false.

This function checks if the image of a given matrix A in \({\rm PSL}_2(ℤ)\) is an element of the group G.

gap> G := ProjectiveModularSubgroup((1,2),(2,3));
<projective modular subgroup of index 3>
gap> IsElementOf([[1,1],[0,1]], G);
true
gap> IsElementOf([[0,-1],[1,0]], G);
false

3.3-20 IsWordElementOf
‣ IsWordElementOf( s, G )( operation )

Returns: True or false.

This function checks if a given string s represents an element of the group G, written in the generators S and T.

gap> G := ProjectiveModularSubgroup((1,2),(2,3));
<projective modular subgroup of index 3>
gap> IsWordElementOf("S^2 * T", G);
true

3.3-21 IsWordElementOf
‣ IsWordElementOf( w, G )( operation )

Returns: True or false.

This function checks if a given word w in the generators S and T represents an element of the group G.

gap> G := ProjectiveModularSubgroup((1,2),(2,3));
<projective modular subgroup of index 3>
gap> F := FreeGroup("S", "T");
<free group on the generators [ S, T ]>
gap> S := F.1;
S
gap> T := F.2;
T
gap> PSL2Z := F / ParseRelators([S, T], "S^2, (S*T)^3");
<fp group on the generators [ S, T ]>
gap> S := GeneratorsOfGroup(PSL2Z)[1];
S
gap> T := GeneratorsOfGroup(PSL2Z)[2];
T
gap> IsWordElementOf(S^2 * T, G);
true

3.3-22 Genus
‣ Genus( G )( attribute )

Returns: A non-negative integer.

Computes the genus of the quotient \(G \setminus ℍ\) via an algorithm described in [Sch04].

gap> G := ProjectiveModularSubgroup((1,2),(2,3));
<projective modular subgroup of index 3>
gap> Genus(G);
0
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 Bib Ind

generated by GAPDoc2HTML