Cuspidal Classgroup

A module for checking wether the torsion in a modular jacobian is generated by cusps. It returns a multiplicative upperbound on the index of the cuspidal rational group in the rational group

EXAMPLES:

sage: from mdsage import *
sage: d = rational_cuspidal_classgroup(Gamma1(23)).cardinality()
sage: upper_bound_index_cusps_in_JG_torsion(Gamma1(23),d)
1
mdsage.cuspidal_classgroup.JG_torsion_upperbound(G, bound=60)

INPUT:

  • G - a congruence subgroup

  • bound (optional, default = 60) - the bound for the primes p up to which to use the hecke matrix T_p - <p> - p for bounding the torsion subgroup

OUTPUT:

  • A subgroup of (S_2(G) \otimes \QQ) / S_2(G) that is guaranteed to contain the rational torison subgroup, together with a subgroup generated by the rational cusps. The subgroup is given as a subgroup of S_2(G)/NS_2(G) for a suitable integer N

EXAMPLES:

sage: from mdsage import *
sage: d = rational_cuspidal_classgroup(Gamma1(23)).cardinality()
sage: upper_bound_index_cusps_in_JG_torsion(Gamma1(23),d)
1
mdsage.cuspidal_classgroup.cuspidal_integral_structure(M)

Returns the integral structure of a modular symbols space.

mdsage.cuspidal_classgroup.cuspidal_rational_subgroup_mod_rational_cuspidal_subgroup(G)

On input a congruence subgroup G that contains Gamma1(N) checks whether there are cuspsums that are not equivalent to a cuspsum defined over \QQ but that are equivalent to a divisor defined over \QQ.

INPUT:

  • G - a congruence subgroup

OUTPUT:

  • the invariants of the cuspidal rational subgroup divided out by the rational cuspidal subgroup

EXAMPLES:

sage: from mdsage import *
sage: cuspidal_rational_subgroup_mod_rational_cuspidal_subgroup(Gamma1(26))
()
mdsage.cuspidal_classgroup.intersection(self, other)

Returns the intersection of two quotient modules self = V1/W and other V2/W V1 and V2 should be submodulus of the same ambient module.

EXAMPLES:

sage: from mdsage import *
sage: W = (ZZ^3).scale(100)
sage: V1 = (ZZ^3).span([[5, 5, 0], [0, 10, 20], [0, 0, 50]]) + W
sage: V2 = (ZZ^3).span([[5, 0, 0], [0, 25, 50]]) + W
sage: V1/W;V2/W
Finitely generated module V/W over Integer Ring with invariants (2, 10, 20)
Finitely generated module V/W over Integer Ring with invariants (4, 20)
sage: intersection(V1/W,V2/W)
Finitely generated module V/W over Integer Ring with invariants (2, 4)
mdsage.cuspidal_classgroup.kill_torsion_coprime_to_q(q, S)

This is with respect to the Xmu model

mdsage.cuspidal_classgroup.upper_bound_index_cusps_in_JG_torsion(G, d, bound=60)

INPUT:

  • G - a congruence subgroup

  • d - integer, the size of the rational cuspidal subgroup

  • bound (optional, default = 60) - the bound for the primes p up to which to use the hecke matrix T_p - <p> - p for bounding the torsion subgroup

OUTPUT:

  • an integer i such that (\#J_G(\QQ)_{tors})/d is a divisor of i.

EXAMPLES:

sage: from mdsage import *
sage: d = rational_cuspidal_classgroup(Gamma1(23)).cardinality()
sage: upper_bound_index_cusps_in_JG_torsion(Gamma1(23),d)
1