If G is a subgroup of finite index in PSL_2(Z), then returns a sequence of coset representatives of G in PSL_2(Z).
Returns a sequence of generators of the congruence subgroup G.
The genus of the upper half plane quotiented by the congruence subgroup G.
For G a subgroup of PSL_2(Z) returns a sequence of points in the Upper Half plane which are the vertices of a fundamental domain for G.
> 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];
Returns a sequence of inequivalent cusps of the congruence subgroup G.
Returns the width of x as a cusp of the congruence subgroup G.
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.
> 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 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)
]