28.1 Congruence subgroups of $ \SL _2(\mathbf{Z})$

Module: sage.modular.congroup

Author: William Stein

TODO: - added "gens" functions for each subgroup (since this is such a frequently requested features).

Module-level Functions

lift_to_sl2z( c, d, N)

If this Manin symbol is (c,d) viewed modulo N, this function computes and returns a list [a,b, c',d'] that defines a 2x2 matrix with determinant 1 and integer entries, such that c=c'(mod N) and d=d'(mod N).

Class: CongruenceSubgroup

class CongruenceSubgroup
CongruenceSubgroup( self, level)

Functions: are_equivalent,$  $ coset_reps,$  $ generators,$  $ is_abelian,$  $ is_finite,$  $ is_subgroup,$  $ level,$  $ order

Special Functions: __call__,$  $ __cmp__,$  $ _repr_

Class: Gamma0

class Gamma0
The congruence subgroup $ \Gamma_0(N)$ .

sage: G = Gamma0(11); G
Congruence Subgroup Gamma0(11)
sage: loads(G.dumps()) == G
True
Gamma0( self, level)

Functions: coset_reps,$  $ generators,$  $ is_subgroup

coset_reps( self)

Return representatives for the right cosets of this congruence subgroup in $ \SL _2(\mathbf{Z})$ as a generator.

Use list(self.coset_reps()) to obtain coset reps as a list.

generators( self)

Return generators for this congruence subgroup. These are computed using coset representatives, a naive algorithm (Todd-Coxeter?), and generators for $ \SL _2(\mathbf{Z})$ .

ALGORITHM: Given coset representatives for a finite index subgroup $ G$ of $ \SL _2(\mathbf{Z})$ we compute generators for $ G$ as follows. Let $ R$ be a set of coset representatives for $ G$ . Let $ S, T \in \SL _2(\mathbf{Z})$ be defined by 0,-1,1,0] and 1,1,0,1, respectively. Define maps $ s, t: R \to G$ as follows. If $ r \in R$ , then there exists a unique $ r' \in R$ such that $ GrS = Gr'$ . Let $ s(r) = rSr'^{-1}$ . Likewise, there is a unique $ r'$ such that $ GrT = Gr'$ and we let $ t(r) =
rTr'^{-1}$ . Note that $ s(r)$ and $ t(r)$ are in $ G$ for all $ r$ . Then $ G$ is generated by $ s(R)\cup t(R)$ . There are more sophisticated algorithms using group actions on trees (and Farey symbols) that give smaller generating sets.

is_subgroup( self, right)

Return True if self is a subgroup of right.

Special Functions: __cmp__,$  $ _latex_,$  $ _repr_

Class: Gamma1

class Gamma1
The congruence subgroup $ \Gamma_1(N)$ .

sage: G = Gamma1(11); G
Congruence Subgroup Gamma1(11)
sage: loads(G.dumps()) == G
True
Gamma1( self, level)

Functions: is_subgroup

is_subgroup( self, right)

Return True if self is a subgroup of right.

sage: Gamma1(3).is_subgroup(SL2Z())
True
sage: Gamma1(3).is_subgroup(Gamma1(5))
False
sage: Gamma1(3).is_subgroup(Gamma1(6))
False
sage: Gamma1(6).is_subgroup(Gamma1(3))
True

Special Functions: __cmp__,$  $ _latex_,$  $ _repr_

Class: GammaH

class GammaH
The congruence subgroup $ \Gamma_H(N)$ .

TODO: This is NOT really implemented yet.

GammaH( self, level, H)

Special Functions: _latex_,$  $ _repr_

Class: SL2Z

class SL2Z
The modular group $ \SL _2(\mathbf{Z})$ .

sage: G = SL2Z(); G
Modular Group SL(2,Z)
sage: G.gens()
([ 0 -1]
[ 1  0], [1 1]
[0 1])
sage: G.0
[ 0 -1]
[ 1  0]
sage: G.1
[1 1]
[0 1]
sage: latex(G)
\mbox{\rm SL}_2(\mbox{\bf{}Z})
sage: G([1,-1,0,1])
[ 1 -1]
[ 0  1]
sage: loads(G.dumps()) == G
True
SL2Z( self)

Functions: gen,$  $ gens,$  $ is_subgroup,$  $ ngens

is_subgroup( self, right)

Return True if self is a subgroup of right.

Special Functions: __call__,$  $ _latex_,$  $ _repr_

See About this document... for information on suggesting changes.