Analogous to finite-index subgroups of SL_2(ℤ), we define a new type ProjectiveModularSubgroup
for representing subgroups of PSL_2(ℤ). It consists essentially of two permutations σ_overlineS} and σ_overlineT} describing the action of overlineS and overlineT on the cosets of the given subgroup, where overlineS and overlineT are the images of S and T in PSL_2(ℤ).
The methods implemented for PSL_2(ℤ) subgroups are mostly the same as for SL_2(ℤ) subgroups and behave more or less identically. Nevertheless we list them here.
‣ ProjectiveModularSubgroup ( s, t ) | ( operation ) |
Returns: A projective modular subgroup.
Constructs a ProjectiveModularSubgroup
object corresponding to the finite-index subgroup of PSL_2(ℤ) described by the permutations s and t.
This constructor tests if the given permutations actually describe the coset action of overlineS and overlineT 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 := ProjectiveModularSubgroup( > (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 SL_2(ℤ), construct from these a ModularSubgroup
, and then project it to PSL_2(ℤ) via Projection
.
‣ SAction ( G ) | ( operation ) |
Returns: A permutation.
Returns the permutation σ_overlineS} describing the action of overlineS on the cosets of G.
‣ TAction ( G ) | ( operation ) |
Returns: A permutation.
Returns the permutation σ_overlineT} describing the action of overlineT on the cosets of G.
‣ Index ( G ) | ( attribute ) |
Returns: A natural number.
For a given projective modular subgroup G this method returns its index in 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 overlineS and overlineT.
gap> G := ProjectiveModularSubgroup((1,2),(2,3)); <projective modular subgroup of index 3> gap> RightCosetRepresentatives(G); [ <identity ...>, S, S*T ]
‣ GeneratorsOfGroup ( G ) | ( attribute ) |
Returns: A list of words.
Calculates a list of generators (as words in overlineS and overlineT) 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> GeneratorsOfGroup(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 ∈ 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 ∞ 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 PSL_2(ℤ) to an even subgroup of SL_2(ℤ), i.e. a group that contains -1 and whose projection to 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 12>
‣ LiftToSL2ZOdd ( G ) | ( operation ) |
Returns: A modular subgroup.
Lifts a given subgroup G of PSL_2(ℤ) to an odd subgroup of SL_2(ℤ), i.e. a group that does not contain -1 and whose projection to 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 barG of G in 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 Γ of PSL_2(ℤ) was introduced in [WS15]. It is defined as the index [Γ(N) : Γ(N) ∩ Γ] where Γ(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
‣ Conjugate ( G, A ) | ( operation ) |
Returns: A ProjectiveModularSubgroup.
Conjugates the group G by (the redidue class in 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 PSL_2(ℤ), i.e. the maximal subgroup of G that is normal in 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 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 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 PSL_2(ℤ) is an element of the group G.
gap> G := ProjectiveModularSubgroup((1,2),(2,3)); <modular subgroup of index 3> gap> IsElementOf([[1,1],[0,1]], G); true gap> IsElementOf([[0,-1],[1,0]], G); false
‣ Genus ( G ) | ( attribute ) |
Returns: A non-negative integer.
Computes the genus of the quotient G ∖ ℍ via an algorithm described in [Sch04].
gap> G := ProjectiveModularSubgroup((1,2),(2,3)); <modular subgroup of index 3> gap> Genus(G); 0
generated by GAPDoc2HTML