Introduction

The group GL^ + 2(R) of 2 by 2 matrices defined over R with positive determinant acts on the upper half complex plane Hh={x∈C | Im(x) > 0}} by fractional linear transformation: pmatrix(a & b
c & d):z |-> (az + b /cz + d). Any subgroup Γ of GL^ + 2(R) also acts on Hh. To compactify the quotient Γ - Hh it is necessary to adjoin the cusps, which are points in P1(Q)=Q∪{∞}. We set Hh * := Hh ∪P1(Q).

A fundamental domain for the action of Γ is a region of Hh * containing a representative of each orbit of the action. The fundamental domain is most useful when it can be taken to be compact with finite area under the hyperbolic metric on Hh. This is the situation for congruence subgroups.

This chapter gives a description of how to work in Magma with Hh * and with congruence subgroups and their action on Hh * . This allows the computation of generators for congruence subgroups, and various other information, such as coset representatives. Farey symbols are used for this computation, and can be computed and manipulated by the user. Procedures are provided for producing graphical images, in the form of postscript files, which illustrate the fundamental domains. These procedures can be used to draw geodesics and polygons in the upper half plane.

This package has been written by Helena Verrill, and is partly based on a java program for drawing fundamental domains ([Ver00]). The Farey sequence algorithm used here is that described by Kulkarni [Kul91].

Example GrpPSL2_basic-example (H139E1)

An example of what can be computed with this package.
> G := CongruenceSubgroup(0,35);
> G;
Gamma_0(35)
> Generators(G);
[
    [1 1]
    [0 1],
    [ 11  -3]
    [ 70 -19],
    [ 13  -8]
    [ 70 -43],
    [  8  -3]
    [ 35 -13],
    [ 29 -21]
    [105 -76],
    [ 11  -6]
    [ 35 -19],
    [ 29 -17]
    [ 70 -41],
    [ 16 -11]
    [ 35 -24],
    [ 22 -17]
    [ 35 -27]
]
> C := CosetRepresentatives(G);
> H := UpperHalfPlaneWithCusps();
> triangle := [H|Infinity(),H.1,H.2];
> triangle_translates := [g*triangle : g in C];
> DisplayPolygons(triangle_translates,"/tmp/Gamma035.ps": Show := false);
[ 0.E-57, 1.000000000000000000000000000, 1.500000000000000000000000000, 300 ]

In the example the command DisplayPolygons produces a postscript file "/tmp/Gamma035.ps" of a drawing of all the translates of the given triangle under the cosets of Γ0(35). If the Show option is set to true, a system command is issued and a window pops up for viewing the file created. Continuing with the above example, one can also find the vertices of a polygon defining the Fundamental domain of the group:

> FD := FundamentalDomain(G);
> // Print a FD in a reasonable format:
> &cat[Sprintf(" %o ",c) : c in FD];
 oo  0  1/6  1/5  1/4  3/11  2/7  1/3  2/5  3/7  1/2  4/7  3/5  5/8  2/3  5/7
3/4  1  oo
> DisplayPolygons([FD],"/tmp/Gamma0_35_Domain.ps": Show := false);
[ 0.E-28, 1.000000000000000000000000000, 1.500000000000000000000000000, 300 ]
V2.28, 13 July 2023