[Next][Prev] [Right] [Left] [Up] [Index] [Root]

Structure of Congruence Subgroups

Subsections
CosetRepresentatives(G) : GrpPSL2 -> SeqEnum
If G is a subgroup of finite index in PSL2(Z), then returns a sequence of coset representatives of G in PSL2(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 [e1n1, e2n2, ..., em nm], where ni are positive integers, and ei=1 or -1, means that g=L[n1]e1L[n2]e2 ... L[nm]em. Note that since the computation is in PSL2(R), this equality only holds up to multiplication by +- 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 PSL2(Z) returns a sequence of points in the Upper Half plane which are the vertices of a fundamental domain for G.

Example GrpPSL2_Example-of-finding-coset-representatives (H130E3)

In this example we compute a set of generators for Γ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];

Example GrpPSL2_Element-of-congruence-subgroup-in-terms-of-generators (H130E4)

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;
> characters := DirichletGroup(N,CyclotomicField(EulerPhi(N)));
> char := Elements(characters)[5];
> G := CongruenceSubgroup([N,Conductor(char),1],char);
>
> // We can create a list of generators:
> gens := Generators(G);
> #gens;
21
> // given an element of G,
> g := G![ 21, 4, 68, 13 ];;
> // we can find g in terms of these generators:
> FindWord(G,g);
[ -8, 1 ]
> // This means that up to sign, g = gens[8]^(-1)*gens[1],
> // which can be verified as follows:
> gens[8]^(-1)*gens[1];
[-21  -4]
[-68 -13]

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, SpcHyp -> [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 GrpPSL2_cusp-example (H130E5)

We can compute a set of representative cusps for Γ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

In the following example we find which group Γ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)
]      

 [Next][Prev] [Right] [Left] [Up] [Index] [Root]

Version: V2.19 of Mon Dec 17 14:40:36 EST 2012