To an elliptic curves
over the rational numbers one can associate
a space - or better two spaces - of modular symbols of level
,
equal to the conductor of
; because
is known to be modular.
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.
The normalisation of our modular symbols attached to
can be chosen, too.
For instance one can make it depended on
rather than on its
isogeny class. This is useful for
-adic L-functions.
For more details on modular symbols consult the following
REFERENCES:
-adic analogues of the conjectures of Birch and
Swinnerton-Dyer, Inventiones mathematicae 84, (1986), 1-48.AUTHORS:
A modular symbol attached to an elliptic curve, which is the map
obtained by sending
to the normalized
symmetrized (or anti-symmetrized) integral from
to
.
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:
-adic analogues of the conjectures of Birch and
Swinnerton-Dyer, Inventiones mathematicae 84, (1986), 1-48.
, this function evaluates the quotient
where
is the twist of
by
,
is the least positive period of
.
For negative
, it is the quotient
where
is the least positive imaginary part of a
non-real period of
.
-optimal curve. The resulting _scaling
is not guaranteed to be correct, but could well be.This function is use to set _scaling, the factor used to adjust the
scalar multiple of the modular symbol.
If
, the modular symbol evaluated at 0, is non-zero, we can just scale
it with respect to the approximation of the L-value. It is known that
the quotient is a rational number with small denominator.
Otherwise we try to scale using quadratic twists.
_scaling will be set to a rational non-zero multiple if we succeed and to 1 otherwise.
Even if we fail we scale at least to make up the difference between the periods
of the
-optimal curve and our given curve
in the isogeny class.
EXAMPLES:
sage : m = EllipticCurve('11a1').modular_symbol(use_eclib=True)
sage : m._scaling
1
sage: m = EllipticCurve('11a2').modular_symbol(use_eclib=True)
sage: m._scaling
5
sage: m = EllipticCurve('11a3').modular_symbol(use_eclib=True)
sage: m._scaling
1/5
sage: m = EllipticCurve('11a1').modular_symbol(use_eclib=False)
sage: m._scaling
1/5
sage: m = EllipticCurve('11a2').modular_symbol(use_eclib=False)
sage: m._scaling
1
sage: m = EllipticCurve('11a3').modular_symbol(use_eclib=False)
sage: m._scaling
1/25
sage: m = EllipticCurve('37a1').modular_symbol(use_eclib=False)
sage: m._scaling
1
sage: m = EllipticCurve('37a1').modular_symbol(use_eclib=True)
sage: m._scaling
-1
sage: m = EllipticCurve('389a1').modular_symbol(use_eclib=True)
sage: m._scaling
-1/2
sage: m = EllipticCurve('389a1').modular_symbol(use_eclib=False)
sage: m._scaling
2
Some cases that check on the negative twists:
sage: m = EllipticCurve('121b1').modular_symbol(use_eclib=False)
sage: m._scaling
-2
sage: m = EllipticCurve('196a1').modular_symbol(use_eclib=False)
sage: m._scaling
1/2
Some checks of consistency:
sage: rk0 = ['11a1', '11a2', '15a1', '27a1', '37b1']
sage: for la in rk0:
... E = EllipticCurve(la)
... me = E.modular_symbol(use_eclib = True)
... ms = E.modular_symbol(use_eclib = False)
... print E.lseries().L_ratio()*E.real_components(), me(0), ms(0)
1/5 1/5 1/5
1 1 1
1/4 1/4 1/4
1/3 1/3 1/3
2/3 2/3 2/3
sage: rk1 = ['37a1','43a1','53a1', '91b1','91b2','91b3']
sage: [EllipticCurve(la).modular_symbol(use_eclib=True)(0) for la in rk1]
[0, 0, 0, 0, 0, 0]
sage: for la in rk1:
... E = EllipticCurve(la)
... m = E.modular_symbol(use_eclib = True)
... lp = E.padic_lseries(5)
... for D in [5,17,12,8]:
... ED = E.quadratic_twist(D)
... md = sum([kronecker(D,u)*m(ZZ(u)/D) for u in range(D)])
... etaa = lp._quotient_of_periods_to_twist(D)
... if ED.lseries().L_ratio()*ED.real_components()*etaa != md:
... print 'oyoyoy a bug !!!'
String representation of modular symbols.
EXAMPLES:
sage: m = EllipticCurve('11a1').modular_symbol(use_eclib=True)
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 = EllipticCurve('43a1').modular_symbol(sign=-1)
sage: m
Modular symbol with sign -1 over Rational Field attached to Elliptic Curve defined by y^2 + y = x^3 + x^2 over Rational Field
Return the base ring for this modular symbol.
EXAMPLES:
sage: m = EllipticCurve('11a1').modular_symbol()
sage: m.base_ring()
Rational Field
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
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)
sage: m.sign()
-1
Evaluates the modular symbol at
.
EXAMPLES:
sage: m = EllipticCurve('11a1').modular_symbol(use_eclib=True)
sage: m(0)
1/5
Modular symbols attached to
using eclib.
INPUT:
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
sage: M=sage.schemes.elliptic_curves.ell_modular_symbols.ModularSymbolECLIB(E,-1)
...
NotImplementedError: Negative spaces of Modular Symbols using eclib has not yet been implemented.
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(use_eclib=True)
sage: M(0)
2
sage: M = EllipticCurve('121d1').modular_symbol(use_eclib=True,normalize='none')
sage: M(0)
4
sage: E = EllipticCurve('15a1')
sage: [C.modular_symbol(use_eclib=True,normalize='L_ratio')(0) for C in E.isogeny_class()[0]]
[1/4, 1/8, 1/4, 1/2, 1/8, 1/16, 1/2, 1]
sage: [C.modular_symbol(use_eclib=True,normalize='none')(0) for C in E.isogeny_class()[0]]
[1/8, 1/8, 1/8, 1/8, 1/8, 1/8, 1/8, 1/8]
Evaluates the modular symbol at
, caching the computed value.
EXAMPLES:
sage: m = EllipticCurve('11a1').modular_symbol(use_eclib=True)
sage: m._call_with_caching(0)
1/5
Evaluates the modular symbol at
.
EXAMPLES:
sage: m = EllipticCurve('11a1').modular_symbol(use_eclib=False)
sage: m(0)
1/5
Modular symbols attached to
using sage.
INPUT:
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
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)
2
sage: M._scaling
-2
sage: M = EllipticCurve('121d1').modular_symbol(use_eclib=False)
sage: M(0)
2
sage: M = EllipticCurve('121d1').modular_symbol(use_eclib=False,normalize='none')
sage: M(0)
1
sage: E = EllipticCurve('15a1')
sage: [C.modular_symbol(use_eclib=False, normalize='L_ratio')(0) for C in E.isogeny_class()[0]]
[1/4, 1/8, 1/4, 1/2, 1/8, 1/16, 1/2, 1]
sage: [C.modular_symbol(use_eclib=False, normalize='period')(0) for C in E.isogeny_class()[0]]
[1/8, 1/16, 1/8, 1/4, 1/16, 1/32, 1/4, 1/2]
sage: [C.modular_symbol(use_eclib=False, normalize='none')(0) for C in E.isogeny_class()[0]]
[1, 1, 1, 1, 1, 1, 1, 1]
Evaluates the modular symbol at
, caching the computed value.
EXAMPLES:
sage: m = EllipticCurve('11a1').modular_symbol(use_eclib=False)
sage: m._call_with_caching(0)
1/5
Uses the integral period map of the modular symbol implementation in sage
in order to determine the scaling. The resulting modular symbol is correct
only for the
-optimal curve, at least up to a possible factor +-1 or +-2.
EXAMPLES:
sage: E = EllipticCurve('11a1')
sage: m = sage.schemes.elliptic_curves.ell_modular_symbols.ModularSymbolSage(E,+1,normalize='period')
sage: m._e
(1/5, 1)
sage: E = EllipticCurve('11a2')
sage: m = sage.schemes.elliptic_curves.ell_modular_symbols.ModularSymbolSage(E,+1,normalize='period')
sage: m._e
(1, 5)
sage: E = EllipticCurve('121b2')
sage: m = sage.schemes.elliptic_curves.ell_modular_symbols.ModularSymbolSage(E,+1,normalize='period')
sage: m._e
(0, 11/2, 0, 11/2, 11/2, 0, 0, -3, 2, 1/2, -1, 3/2)
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
- sign - integer, -1, 0, or 1
- base_ring - ring
- bound - (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