Structure of Congruence Subgroups#

CosetRepresentatives(G): GrpPSL2 -> SeqEnum#

If \(G\) is a subgroup of finite index in \({\operatorname{PSL}}_2({\mathbb{Z}})\), then returns a sequence of coset representatives of \(G\) in \({\operatorname{PSL}}_2({\mathbb{Z}})\).

Generators(G): GrpPSL2 -> SeqEnum#

Returns a sequence of generators of the congruence subgroup \(G\).

FindWord(G, g): GrpPSL2, GrpPSL2Elt -> SeqEnum#

For a congruence subgroup \(G\), and an element \(g\) of \(G\), this function returns a sequence of integers corresponding to an expression for \(g\) in terms of a fixed set of generators for \(G\). Let \(L\) be the list of generators for \(G\) output by the function Generators. Then the return sequence \([e_1n_1,e_2n_2,\dots,e_m n_m]\), where \(n_i\) are positive integers, and \(e_i=1\) or \(-1\), means that \(g=L[n_1]^{e_1}L[n_2]^{e_2}\dots L[n_m]^{e_m}\). Note that since the computation is in \(PSL_2({\mathbb{R}})\), this equality only holds up to multiplication by \(\pm 1\).

Genus(G): GrpPSL2 -> RngIntElt#

The genus of the upper half plane quotiented by the congruence subgroup G.

FundamentalDomain(G): GrpPSL2 -> SeqEnum#

For \(G\) a subgroup of \({\operatorname{PSL}}_2({\mathbb{Z}})\) returns a sequence of points in the Upper Half plane which are the vertices of a fundamental domain for \(G\).

Example Of Finding Coset Representatives (ex-5c2d72)#

In this example we compute a set of generators for \(\Gamma_0(12)\).

> G := CongruenceSubgroup(0,12);
> Generators(G);
[
    [1 1]
    [0 1],

    [ 5 -1]
    [36 -7],

    [  5  -4]
    [ 24 -19],

    [  7  -5]
    [ 24 -17],

    [ 5 -3]
    [12 -7]
]
> C := CosetRepresentatives(G);
> H<i,r> := UpperHalfPlaneWithCusps();
> triangle := [H|Infinity(),r,r-1];
> translates := [g*triangle : g in C];

Run in calculator

Example: Element Of Congruence Subgroup In Terms Of Generators (ex-15bd49)#

This example illustrates how any element of a congruence subgroup can be written in terms of the set of generators output by the generators function.

> N := 34;
> Chi := DirichletGroup(N, CyclotomicField(EulerPhi(N)));
> GaloisConjugacyRepresentatives(Chi);
[
    1,
    $.1,
    $.1^2,
    $.1^4,
    $.1^8
]
> char := Chi.1^8;
> G := CongruenceSubgroup([N,Conductor(char),1],char);
> G;
Gamma_0(2) intersection Gamma_1(17) with character $.1^8
> gens := Generators(G);
> #gens;
21
> g := G! [21, 4, 68, 13];
> // express g in terms of Generators(G)
> FindWord(G, g);
[ -8, 1 ]
> // This means that up to sign, g = gens[8]^(-1) * gens[1]
> gens[8]^(-1) * gens[1];
[-21  -4]
[-68 -13]

Run in calculator

Cusps and Elliptic Points of Congruence Subgroups#

Cusps(G): GrpPSL2 -> SeqEnum#

Returns a sequence of inequivalent cusps of the congruence subgroup \(G\).

CuspWidth(G, x): GrpPSL2, SetCspElt -> RngIntElt#

Returns the width of \(x\) as a cusp of the congruence subgroup \(G\).

EllipticPoints(G): GrpPSL2 -> [SpcHypElt]#
EllipticPoints(G, H): GrpPSL2, SpcHyp -> [SpcHypElt]#

Returns a list of inequivalent elliptic points for the congruence subgroup \(G\). A second argument may be given to specify the upper half plane \(H\) containing these elliptic points.

Example: Cusp Example (ex-f5387a)#

We can compute a set of representative cusps for \(\Gamma_1(12)\), and their widths as follows:

> G := CongruenceSubgroup(0,12);
> Cusps(G);
[
    oo,
    0,
    1/6,
    1/4,
    1/3,
    1/2
]
> Widths(G);
[ 1, 12, 1, 3, 4, 3 ]
> // Note that the sum of the cusp widths is the same as the Index:
> &+Widths(G);
24
> Index(G);
24

Run in calculator

In the following example we find which group \(\Gamma_0(N)\) has the most elliptic points for \(N\) less than 20, and list the elliptic points in this case.

> H := UpperHalfPlaneWithCusps();
> [#EllipticPoints(Gamma0(N),H) : N in [1..20]];
[ 2, 1, 1, 0, 2, 0, 2, 0, 0, 2, 0, 0, 4, 0, 0, 0, 2, 0, 2, 0 ]
> // find the index where the maximal number of elliptic points is attained:
> Max($1);
4 13
> // find the elliptic points for Gamma0(13):
> EllipticPoints(Gamma0(13));
[
    5/13 + (1/13)*root(-1),
    8/13 + (1/13)*root(-1),
    7/26 + (1/26)*root(-3),
    19/26 + (1/26)*root(-3)
]

Run in calculator