Congruence Subgroup \(\Gamma_0(N)\)¶
-
class
sage.modular.arithgroup.congroup_gamma0.
Gamma0_class
(level)¶ Bases:
sage.modular.arithgroup.congroup_gammaH.GammaH_class
The congruence subgroup \(\Gamma_0(N)\).
-
coset_reps
()¶ Return representatives for the right cosets of this congruence subgroup in \({\rm SL}_2(\ZZ)\) as a generator object.
Use
list(self.coset_reps())
to obtain coset reps as a list.EXAMPLES:
sage: list(Gamma0(5).coset_reps()) [ [1 0] [ 0 -1] [1 0] [ 0 -1] [ 0 -1] [ 0 -1] [0 1], [ 1 0], [1 1], [ 1 2], [ 1 3], [ 1 4] ] sage: list(Gamma0(4).coset_reps()) [ [1 0] [ 0 -1] [1 0] [ 0 -1] [ 0 -1] [1 0] [0 1], [ 1 0], [1 1], [ 1 2], [ 1 3], [2 1] ] sage: list(Gamma0(1).coset_reps()) [ [1 0] [0 1] ]
-
dimension_new_cusp_forms
(k=2, p=0)¶ Return the dimension of the space of new (or \(p\)-new) weight \(k\) cusp forms for this congruence subgroup.
INPUT:
\(k\) – an integer (default: 2), the weight. Not fully implemented for \(k = 1\).
\(p\) – integer (default: 0); if nonzero, compute the \(p\)-new subspace.
OUTPUT: Integer
ALGORITHM:
This comes from the formula given in Theorem 1 of http://www.math.ubc.ca/~gerg/papers/downloads/DSCFN.pdf
EXAMPLES:
sage: Gamma0(11000).dimension_new_cusp_forms() 240 sage: Gamma0(11000).dimension_new_cusp_forms(k=1) 0 sage: Gamma0(22).dimension_new_cusp_forms(k=4) 3 sage: Gamma0(389).dimension_new_cusp_forms(k=2,p=17) 32
-
divisor_subgroups
()¶ Return the subgroups of SL2Z of the form Gamma0(M) that contain this subgroup, i.e. those for M a divisor of N.
EXAMPLES:
sage: Gamma0(24).divisor_subgroups() [Modular Group SL(2,Z), Congruence Subgroup Gamma0(2), Congruence Subgroup Gamma0(3), Congruence Subgroup Gamma0(4), Congruence Subgroup Gamma0(6), Congruence Subgroup Gamma0(8), Congruence Subgroup Gamma0(12), Congruence Subgroup Gamma0(24)]
-
gamma_h_subgroups
()¶ Return the subgroups of the form \(\Gamma_H(N)\) contained in self, where \(N\) is the level of self.
EXAMPLES:
sage: G = Gamma0(11) sage: G.gamma_h_subgroups() [Congruence Subgroup Gamma0(11), Congruence Subgroup Gamma_H(11) with H generated by [3], Congruence Subgroup Gamma_H(11) with H generated by [10], Congruence Subgroup Gamma1(11)] sage: G = Gamma0(12) sage: G.gamma_h_subgroups() [Congruence Subgroup Gamma0(12), Congruence Subgroup Gamma_H(12) with H generated by [7], Congruence Subgroup Gamma_H(12) with H generated by [11], Congruence Subgroup Gamma_H(12) with H generated by [5], Congruence Subgroup Gamma1(12)]
-
generators
(algorithm='farey')¶ Return generators for this congruence subgroup.
INPUT:
algorithm
(string): eitherfarey
(default) ortodd-coxeter
.
If
algorithm
is set to"farey"
, then the generators will be calculated using Farey symbols, which will always return a minimal generating set. Seefarey_symbol
for more information.If
algorithm
is set to"todd-coxeter"
, a simpler algorithm based on Todd-Coxeter enumeration will be used. This tends to return far larger sets of generators.EXAMPLES:
sage: Gamma0(3).generators() [ [1 1] [-1 1] [0 1], [-3 2] ] sage: Gamma0(3).generators(algorithm="todd-coxeter") [ [1 1] [-1 0] [ 1 -1] [1 0] [1 1] [-1 0] [ 1 0] [0 1], [ 0 -1], [ 0 1], [3 1], [0 1], [ 3 -1], [-3 1] ] sage: SL2Z.gens() ( [ 0 -1] [1 1] [ 1 0], [0 1] )
-
index
()¶ Return the index of self in the full modular group.
This is given by
\[\begin{split}N \prod_{\substack{p \mid N \\ \text{$p$ prime}}}\left(1 + \frac{1}{p}\right).\end{split}\]EXAMPLES:
sage: [Gamma0(n).index() for n in [1..19]] [1, 3, 4, 6, 6, 12, 8, 12, 12, 18, 12, 24, 14, 24, 24, 24, 18, 36, 20] sage: Gamma0(32041).index() 32220
-
is_even
()¶ Return True precisely if this subgroup contains the matrix -1.
Since \(\Gamma0(N)\) always contains the matrix -1, this always returns True.
EXAMPLES:
sage: Gamma0(12).is_even() True sage: SL2Z.is_even() True
-
is_subgroup
(right)¶ Return True if self is a subgroup of right.
EXAMPLES:
sage: G = Gamma0(20) sage: G.is_subgroup(SL2Z) True sage: G.is_subgroup(Gamma0(4)) True sage: G.is_subgroup(Gamma0(20)) True sage: G.is_subgroup(Gamma0(7)) False sage: G.is_subgroup(Gamma1(20)) False sage: G.is_subgroup(GammaH(40, [])) False sage: Gamma0(80).is_subgroup(GammaH(40, [31, 21, 17])) True sage: Gamma0(2).is_subgroup(Gamma1(2)) True
-
ncusps
()¶ Return the number of cusps of this subgroup \(\Gamma_0(N)\).
EXAMPLES:
sage: [Gamma0(n).ncusps() for n in [1..19]] [1, 2, 2, 3, 2, 4, 2, 4, 4, 4, 2, 6, 2, 4, 4, 6, 2, 8, 2] sage: [Gamma0(n).ncusps() for n in prime_range(2,100)] [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
-
nu2
()¶ Return the number of elliptic points of order 2 for this congruence subgroup \(\Gamma_0(N)\). The number of these is given by a standard formula: 0 if \(N\) is divisible by 4 or any prime congruent to -1 mod 4, and otherwise \(2^d\) where d is the number of odd primes dividing \(N\).
EXAMPLES:
sage: Gamma0(2).nu2() 1 sage: Gamma0(4).nu2() 0 sage: Gamma0(21).nu2() 0 sage: Gamma0(1105).nu2() 8 sage: [Gamma0(n).nu2() for n in [1..19]] [1, 1, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 2, 0, 0]
-
nu3
()¶ Return the number of elliptic points of order 3 for this congruence subgroup \(\Gamma_0(N)\). The number of these is given by a standard formula: 0 if \(N\) is divisible by 9 or any prime congruent to -1 mod 3, and otherwise \(2^d\) where d is the number of primes other than 3 dividing \(N\).
EXAMPLES:
sage: Gamma0(2).nu3() 0 sage: Gamma0(3).nu3() 1 sage: Gamma0(9).nu3() 0 sage: Gamma0(7).nu3() 2 sage: Gamma0(21).nu3() 2 sage: Gamma0(1729).nu3() 8
-
-
sage.modular.arithgroup.congroup_gamma0.
Gamma0_constructor
(N)¶ Return the congruence subgroup Gamma0(N).
EXAMPLES:
sage: G = Gamma0(51) ; G # indirect doctest Congruence Subgroup Gamma0(51) sage: G == Gamma0(51) True sage: G is Gamma0(51) True
-
sage.modular.arithgroup.congroup_gamma0.
is_Gamma0
(x)¶ Return True if x is a congruence subgroup of type Gamma0.
EXAMPLES:
sage: from sage.modular.arithgroup.all import is_Gamma0 sage: is_Gamma0(SL2Z) True sage: is_Gamma0(Gamma0(13)) True sage: is_Gamma0(Gamma1(6)) False