--------------------------------
CONGRUENCE SUBGROUPS OF PSL(2,Z)
--------------------------------
(c) by C Cummins and S Pauli
OVERVIEW OF THE MAGMA FUNCTIONS
-------------------------------
The files pre.m, csg.m, func.m, table.m, and html.m contain the functions
we used to compute the tables of congruence subgroups. The congruence
subgroups ar represented by a record of type CongSubGrp. In the parameters
of the functions described below G and H denote congruence subgroups and L
denotes a list of congruence subgroups. The names of functions (and
procedures) that take a group (or two) as parameters start with csg, the
names of those that take a list L of groups as a parameter start with csg_list.
Note that although the groups are represented as subgroups of SL(2,Z) and
SL(2,Z/mZ), some of the functions only give correct results if the subgroups
are regarded as subgroups of PSL(2,Z).
-----------------------------------------------------------------------------
Let S and T denote the following matrices:
S = [[0,1],[-1,0]]
T = [[1,1],[0,1]]
A congruence subgroup G of PSL(2,Z) is represented by the following record:
CongSubGrp := recformat
;
-----------------------------------------------------------------------------
-----
pre.m
-----
We precompute permutation representations of the groups PSL(2,Z/mZ) and
GL(2,Z/mZ), which are needed frequently in other computations. The global
variable MAXGENUS determines how many groups should be precomputed.
-----
csg.m
-----
Here you find the functions for computing a raw list of congruence subgroups,
that contains only the index, genus, and level of the group and its generators.
Important functions are:
csg(maxgenus)
-------------
Returns all congruence subgroups of PSL(2,Z).
csg_perm_group(G)
-----------------
returns G as a subgroup of SL(2,Z/mZ) in permutation representation, where m
is the level of G.
------
func.m
------
The functions that compute other invariants of a congruence subgroup are in
func.m.
csg_compare(G,H)
----------------
compares two congruence subgroups. It gives the ordering used in the tables,
for which it is used combined with Sort: Sort(L,csg_compare).
csg_is_subgroup(g,h)
--------------------
returns true if g is a subgroup of h, false otherwise
csg_matrix_generators(G)
------------------------
returns the generators of G as a subgroups of PSL(2,Z/mZ), where m is the level
of G, as matrices.
csg_c3(G)
csg_c2(G)
---------
return the lengths of the orbits of S and S*T in the coset represenation.
number_of_fixed_points(list)
----------------------------
returns the number of fixed points of order 2 or 3 when called with the output
of csg_c3(G) or csg_c2(G) respectively.
csg_length(G)
-------------
computes the number of conjugates of G in PSL(2,Z).
csg_GLZ_conj(G)
---------------
returns the GL(2,Z) conjugate of G.
csg_galois_conjugates(G)
------------------------
returns the value for the record entry gc, see the explanation of the record
above.
-------
table.m
-------
Most functions in this file take a list L of groups as a parameter.
csg_list_by_genus(L,g)
----------------------
returns all groups in L with genus g.
csg_list_by_index(L,n)
----------------------
returns all groups in L with index n.
csg_list_by_level(L,l)
----------------------
returns all groups in L with level m.
csg_list_with_special_name(L)
-----------------------------
returns all groups in L that have a special name.
csg_list_by_name(L,s)
------------------------
returns the group with name s, where s is a string of the form
(level)(label)(genus) as used in the tables.
csg_list_tree_to_subgroups(~L)
------------------------------
uses the information form treename and treesupergroups to obtain the complete
super/subgroupstructure. The entries supergroups and subgroups do NOT contain
all super/subgroups of the groups. They include enough information to conpute
the direct supergroups.
csg_list_direct_subgroups(~L)
-----------------------------
adds lists of direct to the groups in the list L.
csg_list_sort(~L)
-----------------
sorts the list L, using the criteria from csg_compare.
csg_list_label(L)
-----------------
returns a new list, which includes the group names of the form
(level)(label)(genus) as used in the tables.
csg_list_complete_data(~L)
--------------------------
sets the number of PSL(2,Z) conjugates, the cusp width, the numbers of
classes of elements of order 2 and 3, the matrix generators and the galois
conjugates.
csg_list_special_names(~L)
--------------------------
adds special names to some of the groups in L; the special names are added in
TeX and HTML formats.
csg_list_fill(~L)
-----------------
sets the entries for GL(2,Z/mZ) conjugates (and removes the GL(2,Z/mZ)
conjugates from L), calls csg_list_complete_data(~L), sets the names and
special names, sorts the list of groups and adds the super/subgroup structure.
------
html.m
------
csg_list_to_html(L)
-------------------
Converts a list of groups into nice html format.
Before running it a second time you should remove the html files (they are
called csgN.html, where N is the genus of the groups in the list) output by
this function. Otherwise the new code will be appended to the files output
previously.
-------------------------------------------------------------------------