Modular symbols attached to an elliptic curve¶
To an elliptic curves \(E\) over the rational numbers one can associate a space of modular symbols of level \(N\), equal to the conductor of \(E\); because \(E\) is known to be modular. The space is two-dimensional and contains a subspace on which complex conjugation acts like \(+1\) and one on which it acts by \(-1\).
There are two implementations of modular symbols, one within sage
and the other as part of Cremona’s eclib
. One can choose here which
one is used.
Associated to \(E\) there is a canonical generator in each space. They are maps \([.]^+\) and \([.]^{-}\), both \(\QQ \to\QQ\). They are normalised such that
where \(f\) is the newform associated to the isogeny class of \(E\) and \(\Omega^{+}\) is the smallest positive period of the Néron differential of \(E\) and \(\Omega^{-}\) is the smallest positive purely imaginary period. Note that it depends on \(E\) rather than on its isogeny class.
The computation of the space provides first generators, but they are not necessarily correctly normalised. There are two methods that try to find the correct scaling factor.
Modular symbols are used to compute \(p\)-adic \(L\)-functions.
EXAMPLES:
sage: E = EllipticCurve("19a1")
sage: m = E.modular_symbol()
sage: m(0)
1/3
sage: m(1/17)
-2/3
sage: m2 = E.modular_symbol(-1, implementation="sage")
sage: m2(0)
0
sage: m2(1/5)
1/2
sage: V = E.modular_symbol_space()
sage: V
Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 2 for Gamma_0(19) of weight 2 with sign 1 over Rational Field
sage: V.q_eigenform(30)
q - 2*q^3 - 2*q^4 + 3*q^5 - q^7 + q^9 + 3*q^11 + 4*q^12 - 4*q^13 - 6*q^15 + 4*q^16 - 3*q^17 + q^19 - 6*q^20 + 2*q^21 + 4*q^25 + 4*q^27 + 2*q^28 + 6*q^29 + O(q^30)
For more details on modular symbols consult the following
REFERENCES:
- [MTT] B. Mazur, J. Tate, and J. Teitelbaum, On \(p\)-adic analogues of the conjectures of Birch and Swinnerton-Dyer, Inventiones mathematicae 84, (1986), 1-48.
- [Cre] John Cremona, Algorithms for modular elliptic curves, Cambridge University Press, 1997.
- [SW] William Stein and Christian Wuthrich, Algorithms for the Arithmetic of Elliptic Curves using Iwasawa Theory, Mathematics of Computation 82 (2013), 1757-1792.
AUTHORS:
- William Stein (2007): first version
- Chris Wuthrich (2008): add scaling and reference to eclib
-
class
sage.schemes.elliptic_curves.ell_modular_symbols.
ModularSymbol
¶ Bases:
sage.structure.sage_object.SageObject
A modular symbol attached to an elliptic curve, which is the map \(\QQ\to \QQ\) obtained by sending \(r\) to the normalized symmetrized (or anti-symmetrized) integral from \(r\) to \(\infty\).
This is as defined in [MTT], but normalized to depend on the curve and not only its isogeny class as in [SW].
See the documentation of
E.modular_symbol()
in Elliptic curves over the rational numbers for help.REFERENCES:
- [MTT] B. Mazur, J. Tate, and J. Teitelbaum, On \(p\)-adic analogues of the conjectures of Birch and Swinnerton-Dyer, Inventiones mathematicae 84, (1986), 1-48.
- [SW] William Stein and Christian Wuthrich, Computations About Tate-Shafarevich Groups using Iwasawa theory, preprint 2009.
-
base_ring
()¶ Return the base ring for this modular symbol.
EXAMPLES:
sage: m = EllipticCurve('11a1').modular_symbol() sage: m.base_ring() Rational Field
-
elliptic_curve
()¶ Return the elliptic curve of this modular symbol.
EXAMPLES:
sage: m = EllipticCurve('11a1').modular_symbol() sage: m.elliptic_curve() Elliptic Curve defined by y^2 + y = x^3 - x^2 - 10*x - 20 over Rational Field
-
sign
()¶ Return the sign of this elliptic curve modular symbol.
EXAMPLES:
sage: m = EllipticCurve('11a1').modular_symbol() sage: m.sign() 1 sage: m = EllipticCurve('11a1').modular_symbol(sign=-1, implementation="sage") sage: m.sign() -1
-
class
sage.schemes.elliptic_curves.ell_modular_symbols.
ModularSymbolECLIB
(E, sign, normalize='L_ratio')¶ Bases:
sage.schemes.elliptic_curves.ell_modular_symbols.ModularSymbol
Modular symbols attached to \(E\) using
eclib
.INPUT:
E
- an elliptic curvesign
- an integer, -1 or 1normalize
- either ‘L_ratio’ (default) or ‘none’; For ‘L_ratio’, the modular symbol is correctly normalized by comparing it to the quotient of \(L(E,1)\) by the least positive period for the curve and some small twists. For ‘none’, the modular symbol is almost certainly not correctly normalized, i.e. all values will be a fixed scalar multiple of what they should be.
EXAMPLES:
sage: import sage.schemes.elliptic_curves.ell_modular_symbols sage: E=EllipticCurve('11a1') sage: M=sage.schemes.elliptic_curves.ell_modular_symbols.ModularSymbolECLIB(E,+1) sage: M Modular symbol with sign 1 over Rational Field attached to Elliptic Curve defined by y^2 + y = x^3 - x^2 - 10*x - 20 over Rational Field sage: M(0) 1/5 sage: E=EllipticCurve('11a2') sage: M=sage.schemes.elliptic_curves.ell_modular_symbols.ModularSymbolECLIB(E,+1) sage: M(0) 1
This is a rank 1 case with vanishing positive twists. The modular symbol can not be adjusted:
sage: E=EllipticCurve('121b1') sage: M=sage.schemes.elliptic_curves.ell_modular_symbols.ModularSymbolECLIB(E,+1) Warning : Could not normalize the modular symbols, maybe all further results will be multiplied by -1, 2 or -2. sage: M(0) 0 sage: M(1/7) -2 sage: M = EllipticCurve('121d1').modular_symbol(implementation="eclib") sage: M(0) 2 sage: M = EllipticCurve('121d1').modular_symbol(implementation="eclib",normalize='none') sage: M(0) 8 sage: E = EllipticCurve('15a1') sage: [C.modular_symbol(implementation="eclib",normalize='L_ratio')(0) for C in E.isogeny_class()] [1/4, 1/8, 1/4, 1/2, 1/8, 1/16, 1/2, 1] sage: [C.modular_symbol(implementation="eclib",normalize='none')(0) for C in E.isogeny_class()] [1/4, 1/4, 1/4, 1/4, 1/4, 1/4, 1/4, 1/4]
Currently, the interface for negative modular symbols in eclib is not yet written:
sage: E.modular_symbol(implementation="eclib",sign=-1) Traceback (most recent call last): ... NotImplementedError: Despite that eclib has now -1 modular symbols the interface to them is not yet written.
TESTS (for trac ticket #10236):
sage: E = EllipticCurve('11a1') sage: m = E.modular_symbol(implementation="eclib") sage: m(1/7) 7/10 sage: m(0) 1/5
-
class
sage.schemes.elliptic_curves.ell_modular_symbols.
ModularSymbolSage
(E, sign, normalize='L_ratio')¶ Bases:
sage.schemes.elliptic_curves.ell_modular_symbols.ModularSymbol
Modular symbols attached to \(E\) using
sage
.INPUT:
E
– an elliptic curvesign
– an integer, -1 or 1normalize
– either ‘L_ratio’ (default), ‘period’, or ‘none’; For ‘L_ratio’, the modular symbol is correctly normalized by comparing it to the quotient of \(L(E,1)\) by the least positive period for the curve and some small twists. The normalization ‘period’ uses the integral_period_map for modular symbols and is known to be equal to the above normalization up to the sign and a possible power of 2. For ‘none’, the modular symbol is almost certainly not correctly normalized, i.e. all values will be a fixed scalar multiple of what they should be. But the initial computation of the modular symbol is much faster, though evaluation of it after computing it won’t be any faster.
EXAMPLES:
sage: E=EllipticCurve('11a1') sage: import sage.schemes.elliptic_curves.ell_modular_symbols sage: M=sage.schemes.elliptic_curves.ell_modular_symbols.ModularSymbolSage(E,+1) sage: M Modular symbol with sign 1 over Rational Field attached to Elliptic Curve defined by y^2 + y = x^3 - x^2 - 10*x - 20 over Rational Field sage: M(0) 1/5 sage: E=EllipticCurve('11a2') sage: M=sage.schemes.elliptic_curves.ell_modular_symbols.ModularSymbolSage(E,+1) sage: M(0) 1 sage: M=sage.schemes.elliptic_curves.ell_modular_symbols.ModularSymbolSage(E,-1) sage: M(1/3) 1/2
This is a rank 1 case with vanishing positive twists. The modular symbol is adjusted by -2:
sage: E=EllipticCurve('121b1') sage: M=sage.schemes.elliptic_curves.ell_modular_symbols.ModularSymbolSage(E,-1,normalize='L_ratio') sage: M(1/3) 1 sage: M._scaling -1 sage: M = EllipticCurve('121d1').modular_symbol(implementation="sage") sage: M(0) 2 sage: M = EllipticCurve('121d1').modular_symbol(implementation="sage", normalize='none') sage: M(0) 1 sage: E = EllipticCurve('15a1') sage: [C.modular_symbol(implementation="sage", normalize='L_ratio')(0) for C in E.isogeny_class()] [1/4, 1/8, 1/4, 1/2, 1/8, 1/16, 1/2, 1] sage: [C.modular_symbol(implementation="sage", normalize='period')(0) for C in E.isogeny_class()] [1/8, 1/16, 1/8, 1/4, 1/16, 1/32, 1/4, 1/2] sage: [C.modular_symbol(implementation="sage", normalize='none')(0) for C in E.isogeny_class()] [1, 1, 1, 1, 1, 1, 1, 1]
-
sage.schemes.elliptic_curves.ell_modular_symbols.
modular_symbol_space
(E, sign, base_ring, bound=None)¶ Creates the space of modular symbols of a given sign over a give base_ring, attached to the isogeny class of elliptic curves.
INPUT:
E
- an elliptic curve over \(\QQ\)sign
- integer, -1, 0, or 1base_ring
- ringbound
- (default: None) maximum number of Hecke operators to use to cut out modular symbols factor. If None, use enough to provably get the correct answer.
OUTPUT: a space of modular symbols
EXAMPLES:
sage: import sage.schemes.elliptic_curves.ell_modular_symbols sage: E=EllipticCurve('11a1') sage: M=sage.schemes.elliptic_curves.ell_modular_symbols.modular_symbol_space(E,-1,GF(37)) sage: M Modular Symbols space of dimension 1 for Gamma_0(11) of weight 2 with sign -1 over Finite Field of size 37