Sage can compute extensively with the standard congruence subgroups
,
, and
.
Coerce x into self.
NOTE: This function should be overridden by any subclass the user will interact with directly.
EXAMPLES:
sage: sage.modular.arithgroup.congroup_generic.CongruenceSubgroup(5).__call__(0)
...
NotImplementedError
Create a congruence subgroup with given level.
EXAMPLES:
sage: Gamma0(500)
Congruence Subgroup Gamma0(500)
Return a new group of the same type (Gamma0, Gamma1, or GammaH) as self of the given level. In the case that self is of type GammaH, we take the largest H inside $(Z/text{level}Z)^times$ which maps to H, namely its inverse image under the natural reduction map.
EXAMPLES:
sage: G = Gamma0(20)
sage: G._new_group_from_level(4)
Congruence Subgroup Gamma0(4)
sage: G._new_group_from_level(40)
Congruence Subgroup Gamma0(40)
sage: G = Gamma1(10)
sage: G._new_group_from_level(6)
...
ValueError: one level must divide the other
sage: G = GammaH(50,[3,37])
sage: G
Congruence Subgroup Gamma_H(50) with H generated by [3, 37]
sage: G._new_group_from_level(25)
Congruence Subgroup Gamma_H(25) with H generated by [3, 12]
sage: G._new_group_from_level(100)
Congruence Subgroup Gamma_H(100) with H generated by [3, 37, 53, 87]
Return the string representation of self.
NOTE: This function should be overridden by all subclasses.
EXAMPLES:
sage: sage.modular.arithgroup.congroup_generic.CongruenceSubgroup(5)._repr_()
'Generic congruence subgroup'
Return True, since this is a congruence subgroup.
EXAMPLE:
sage: Gamma0(7).is_congruence()
True
Return the level of this congruence subgroup.
EXAMPLES:
sage: SL2Z.level()
1
sage: Gamma0(20).level()
20
sage: Gamma1(11).level()
11
sage: GammaH(14, [2]).level()
14
Return the modular abelian variety corresponding to the congruence subgroup self.
EXAMPLES:
sage: Gamma0(11).modular_abelian_variety()
Abelian variety J0(11) of dimension 1
sage: Gamma1(11).modular_abelian_variety()
Abelian variety J1(11) of dimension 1
sage: GammaH(11,[3]).modular_abelian_variety()
Abelian variety JH(11,[3]) of dimension 1
Return the space of modular symbols of the specified weight and sign on the congruence subgroup self.
EXAMPLES:
sage: G = Gamma0(23)
sage: G.modular_symbols()
Modular Symbols space of dimension 5 for Gamma_0(23) of weight 2 with sign 0 over Rational Field
sage: G.modular_symbols(weight=4)
Modular Symbols space of dimension 12 for Gamma_0(23) of weight 4 with sign 0 over Rational Field
sage: G.modular_symbols(base_ring=GF(7))
Modular Symbols space of dimension 5 for Gamma_0(23) of weight 2 with sign 0 over Finite Field of size 7
sage: G.modular_symbols(sign=1)
Modular Symbols space of dimension 3 for Gamma_0(23) of weight 2 with sign 1 over Rational Field
Returns the Sturm bound for modular forms of the given weight and level this congruence subgroup.
INPUT:
FURTHER DETAILS: This function returns a positive integer
such that the Hecke operators
acting on cusp forms generate the
Hecke algebra as a
-module when the character
is trivial or quadratic. Otherwise,
generate the Hecke algebra at least as a
-module, where
is the ring generated by the
values of the Dirichlet character
.
Alternatively, this is a bound such that if two cusp forms
associated to this space of modular symbols are congruent modulo
, then they are congruent modulo
.
REFERENCES:
REMARK: Kevin Buzzard pointed out to me (William Stein) in Fall
2002 that the above bound is fine for with
character, as one sees by taking a power of
. More
precisely, if
for first
coefficients, then
for
first
coefficients. Since the weight of
is
, it follows that if
, where
is the Sturm bound for
at weight
, then
has valuation large enough to be forced to be
at
by Sturm bound (which is valid if we choose
correctly). Thus
.
Conclusion: For
with fixed character, the
Sturm bound is exactly the same as for
.
A key point is that we are finding
generators for the Hecke algebra
here, not
-generators. So if one wants
generators for the Hecke algebra over
, this
bound must be suitably modified (and I’m not sure what the
modification is).
AUTHORS:
Return True if x is of type CongruenceSubgroup.
EXAMPLES:
sage: from sage.modular.arithgroup.congroup_generic import is_CongruenceSubgroup
sage: is_CongruenceSubgroup(SL2Z)
True
sage: is_CongruenceSubgroup(Gamma0(13))
True
sage: is_CongruenceSubgroup(Gamma1(6))
True
sage: is_CongruenceSubgroup(GammaH(11, [3]))
True
sage: is_CongruenceSubgroup(SymmetricGroup(3))
False