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.
‣ 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.
‣ 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.
‣ 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.
‣ 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
‣ 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
‣ 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.
‣ 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 ]
‣ 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
‣ 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 ]
‣ 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
‣ 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
‣ 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
‣ 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>
‣ 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>
‣ 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
‣ 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
‣ 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
‣ 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\).
‣ 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>
‣ 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>
‣ 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> )
‣ 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
‣ 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
‣ 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
‣ 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
generated by GAPDoc2HTML