\(p\)-adic \(L\)-series attached to overconvergent eigensymbols¶
An overconvergent eigensymbol gives rise to a \(p\)-adic \(L\)-series, which is essentially defined as the evaluation of the eigensymbol at the path \(0 \rightarrow \infty\). The resulting distribution on \(\ZZ_p\) can be restricted to \(\ZZ_p^\times\), thus giving the measure attached to the sought \(p\)-adic \(L\)-series.
All this is carefully explained in [PS2011].
- sage.modular.pollack_stevens.padic_lseries.log_gamma_binomial(p, gamma, n, M)[source]¶
Return the list of coefficients in the power series expansion (up to precision \(M\)) of \(\binom{\log_p(z)/\log_p(\gamma)}{n}\)
INPUT:
p
– primegamma
– topological generator, e.g. \(1+p\)n
– nonnegative integerM
– precision
OUTPUT:
The list of coefficients in the power series expansion of \(\binom{\log_p(z)/\log_p(\gamma)}{n}\)
EXAMPLES:
sage: from sage.modular.pollack_stevens.padic_lseries import log_gamma_binomial sage: log_gamma_binomial(5,1+5,2,4) [0, -3/205, 651/84050, -223/42025] sage: log_gamma_binomial(5,1+5,3,4) [0, 2/205, -223/42025, 95228/25845375]
>>> from sage.all import * >>> from sage.modular.pollack_stevens.padic_lseries import log_gamma_binomial >>> log_gamma_binomial(Integer(5),Integer(1)+Integer(5),Integer(2),Integer(4)) [0, -3/205, 651/84050, -223/42025] >>> log_gamma_binomial(Integer(5),Integer(1)+Integer(5),Integer(3),Integer(4)) [0, 2/205, -223/42025, 95228/25845375]
from sage.modular.pollack_stevens.padic_lseries import log_gamma_binomial log_gamma_binomial(5,1+5,2,4) log_gamma_binomial(5,1+5,3,4)
- class sage.modular.pollack_stevens.padic_lseries.pAdicLseries(symb, gamma=None, quadratic_twist=1, precision=None)[source]¶
Bases:
SageObject
The \(p\)-adic \(L\)-series associated to an overconvergent eigensymbol.
INPUT:
symb
– an overconvergent eigensymbolgamma
– topological generator of \(1 + p\ZZ_p\) (default: \(1+p\) or 5 if \(p=2\))quadratic_twist
– conductor of quadratic twist \(\chi\) (default: 1)precision
– ifNone
(default) is specified, the correct precision bound is computed and the answer is returned modulo that accuracy
EXAMPLES:
sage: E = EllipticCurve('37a') sage: p = 5 sage: prec = 4 sage: L = E.padic_lseries(p, implementation='pollackstevens', precision=prec) # long time sage: L[1] # long time 1 + 4*5 + 2*5^2 + O(5^3) sage: L.series(3) # long time O(5^4) + (1 + 4*5 + 2*5^2 + O(5^3))*T + (3 + O(5^2))*T^2 + O(T^3)
>>> from sage.all import * >>> E = EllipticCurve('37a') >>> p = Integer(5) >>> prec = Integer(4) >>> L = E.padic_lseries(p, implementation='pollackstevens', precision=prec) # long time >>> L[Integer(1)] # long time 1 + 4*5 + 2*5^2 + O(5^3) >>> L.series(Integer(3)) # long time O(5^4) + (1 + 4*5 + 2*5^2 + O(5^3))*T + (3 + O(5^2))*T^2 + O(T^3)
E = EllipticCurve('37a') p = 5 prec = 4 L = E.padic_lseries(p, implementation='pollackstevens', precision=prec) # long time L[1] # long time L.series(3) # long time
sage: from sage.modular.pollack_stevens.padic_lseries import pAdicLseries sage: E = EllipticCurve('20a') sage: phi = E.pollack_stevens_modular_symbol() sage: Phi = phi.p_stabilize_and_lift(3, 4) # long time sage: L = pAdicLseries(Phi) # long time sage: L.series(4) # long time 2*3 + O(3^4) + (3 + O(3^2))*T + (2 + O(3))*T^2 + O(3^0)*T^3 + O(T^4)
>>> from sage.all import * >>> from sage.modular.pollack_stevens.padic_lseries import pAdicLseries >>> E = EllipticCurve('20a') >>> phi = E.pollack_stevens_modular_symbol() >>> Phi = phi.p_stabilize_and_lift(Integer(3), Integer(4)) # long time >>> L = pAdicLseries(Phi) # long time >>> L.series(Integer(4)) # long time 2*3 + O(3^4) + (3 + O(3^2))*T + (2 + O(3))*T^2 + O(3^0)*T^3 + O(T^4)
from sage.modular.pollack_stevens.padic_lseries import pAdicLseries E = EllipticCurve('20a') phi = E.pollack_stevens_modular_symbol() Phi = phi.p_stabilize_and_lift(3, 4) # long time L = pAdicLseries(Phi) # long time L.series(4) # long time
>>> from sage.all import * >>> from sage.modular.pollack_stevens.padic_lseries import pAdicLseries >>> E = EllipticCurve('20a') >>> phi = E.pollack_stevens_modular_symbol() >>> Phi = phi.p_stabilize_and_lift(Integer(3), Integer(4)) # long time >>> L = pAdicLseries(Phi) # long time >>> L.series(Integer(4)) # long time 2*3 + O(3^4) + (3 + O(3^2))*T + (2 + O(3))*T^2 + O(3^0)*T^3 + O(T^4)
from sage.modular.pollack_stevens.padic_lseries import pAdicLseries E = EllipticCurve('20a') phi = E.pollack_stevens_modular_symbol() Phi = phi.p_stabilize_and_lift(3, 4) # long time L = pAdicLseries(Phi) # long time L.series(4) # long time
An example of a \(p\)-adic \(L\)-series associated to a modular abelian surface. This is not tested as it takes too long.:
sage: from sage.modular.pollack_stevens.space import ps_modsym_from_simple_modsym_space sage: from sage.modular.pollack_stevens.padic_lseries import pAdicLseries sage: A = ModularSymbols(103,2,1).cuspidal_submodule().new_subspace().decomposition()[0] sage: p = 19 sage: prec = 4 sage: phi = ps_modsym_from_simple_modsym_space(A) sage: ap = phi.Tq_eigenvalue(p,prec) sage: c1,c2 = phi.completions(p,prec) sage: phi1,psi1 = c1 sage: phi2,psi2 = c2 sage: phi1p = phi1.p_stabilize_and_lift(p,ap = psi1(ap), M = prec) # not tested - too long sage: L1 = pAdicLseries(phi1p) # not tested - too long sage: phi2p = phi2.p_stabilize_and_lift(p,ap = psi2(ap), M = prec) # not tested - too long sage: L2 = pAdicLseries(phi2p) # not tested - too long sage: L1[1]*L2[1] # not tested - too long 13 + 9*19 + 18*19^2 + O(19^3)
>>> from sage.all import * >>> from sage.modular.pollack_stevens.space import ps_modsym_from_simple_modsym_space >>> from sage.modular.pollack_stevens.padic_lseries import pAdicLseries >>> A = ModularSymbols(Integer(103),Integer(2),Integer(1)).cuspidal_submodule().new_subspace().decomposition()[Integer(0)] >>> p = Integer(19) >>> prec = Integer(4) >>> phi = ps_modsym_from_simple_modsym_space(A) >>> ap = phi.Tq_eigenvalue(p,prec) >>> c1,c2 = phi.completions(p,prec) >>> phi1,psi1 = c1 >>> phi2,psi2 = c2 >>> phi1p = phi1.p_stabilize_and_lift(p,ap = psi1(ap), M = prec) # not tested - too long >>> L1 = pAdicLseries(phi1p) # not tested - too long >>> phi2p = phi2.p_stabilize_and_lift(p,ap = psi2(ap), M = prec) # not tested - too long >>> L2 = pAdicLseries(phi2p) # not tested - too long >>> L1[Integer(1)]*L2[Integer(1)] # not tested - too long 13 + 9*19 + 18*19^2 + O(19^3)
from sage.modular.pollack_stevens.space import ps_modsym_from_simple_modsym_space from sage.modular.pollack_stevens.padic_lseries import pAdicLseries A = ModularSymbols(103,2,1).cuspidal_submodule().new_subspace().decomposition()[0] p = 19 prec = 4 phi = ps_modsym_from_simple_modsym_space(A) ap = phi.Tq_eigenvalue(p,prec) c1,c2 = phi.completions(p,prec) phi1,psi1 = c1 phi2,psi2 = c2 phi1p = phi1.p_stabilize_and_lift(p,ap = psi1(ap), M = prec) # not tested - too long L1 = pAdicLseries(phi1p) # not tested - too long phi2p = phi2.p_stabilize_and_lift(p,ap = psi2(ap), M = prec) # not tested - too long L2 = pAdicLseries(phi2p) # not tested - too long L1[1]*L2[1] # not tested - too long
- interpolation_factor(ap, chip=1, psi=None)[source]¶
Return the interpolation factor associated to
self
. This is the \(p\)-adic multiplier that which appears in the interpolation formula of the \(p\)-adic \(L\)-function. It has the form \((1-\alpha_p^{-1})^2\), where \(\alpha_p\) is the unit root of \(X^2 - \psi(a_p) \chi(p) X + p\).INPUT:
ap
– the eigenvalue of the Up operatorchip
– the value of the nebentype at \(p\) (default: 1)psi
– a twisting character (default:None
)
OUTPUT: a \(p\)-adic number
EXAMPLES:
sage: E = EllipticCurve('19a2') sage: L = E.padic_lseries(3,implementation='pollackstevens',precision=6) # long time sage: ap = E.ap(3) # long time sage: L.interpolation_factor(ap) # long time 3^2 + 3^3 + 2*3^5 + 2*3^6 + O(3^7)
>>> from sage.all import * >>> E = EllipticCurve('19a2') >>> L = E.padic_lseries(Integer(3),implementation='pollackstevens',precision=Integer(6)) # long time >>> ap = E.ap(Integer(3)) # long time >>> L.interpolation_factor(ap) # long time 3^2 + 3^3 + 2*3^5 + 2*3^6 + O(3^7)
E = EllipticCurve('19a2') L = E.padic_lseries(3,implementation='pollackstevens',precision=6) # long time ap = E.ap(3) # long time L.interpolation_factor(ap) # long time
Comparing against a different implementation:
sage: L = E.padic_lseries(3) sage: (1-1/L.alpha(prec=4))^2 3^2 + 3^3 + O(3^5)
>>> from sage.all import * >>> L = E.padic_lseries(Integer(3)) >>> (Integer(1)-Integer(1)/L.alpha(prec=Integer(4)))**Integer(2) 3^2 + 3^3 + O(3^5)
L = E.padic_lseries(3) (1-1/L.alpha(prec=4))^2
- prime()[source]¶
Return the prime \(p\) as in \(p\)-adic \(L\)-series.
EXAMPLES:
sage: E = EllipticCurve('19a') sage: L = E.padic_lseries(19, implementation='pollackstevens',precision=6) # long time sage: L.prime() # long time 19
>>> from sage.all import * >>> E = EllipticCurve('19a') >>> L = E.padic_lseries(Integer(19), implementation='pollackstevens',precision=Integer(6)) # long time >>> L.prime() # long time 19
E = EllipticCurve('19a') L = E.padic_lseries(19, implementation='pollackstevens',precision=6) # long time L.prime() # long time
- quadratic_twist()[source]¶
Return the discriminant of the quadratic twist.
EXAMPLES:
sage: from sage.modular.pollack_stevens.padic_lseries import pAdicLseries sage: E = EllipticCurve('37a') sage: phi = E.pollack_stevens_modular_symbol() sage: Phi = phi.lift(37,4) sage: L = pAdicLseries(Phi, quadratic_twist=-3) sage: L.quadratic_twist() -3
>>> from sage.all import * >>> from sage.modular.pollack_stevens.padic_lseries import pAdicLseries >>> E = EllipticCurve('37a') >>> phi = E.pollack_stevens_modular_symbol() >>> Phi = phi.lift(Integer(37),Integer(4)) >>> L = pAdicLseries(Phi, quadratic_twist=-Integer(3)) >>> L.quadratic_twist() -3
from sage.modular.pollack_stevens.padic_lseries import pAdicLseries E = EllipticCurve('37a') phi = E.pollack_stevens_modular_symbol() Phi = phi.lift(37,4) L = pAdicLseries(Phi, quadratic_twist=-3) L.quadratic_twist()
- series(prec=5)[source]¶
Return the
prec
-th approximation to the \(p\)-adic \(L\)-series associated toself
, as a power series in \(T\) (corresponding to \(\gamma-1\) with \(\gamma\) the chosen generator of \(1+p\ZZ_p\)).INPUT:
prec
– (default: 5) the precision of the power series
EXAMPLES:
sage: E = EllipticCurve('14a2') sage: p = 3 sage: prec = 6 sage: L = E.padic_lseries(p,implementation='pollackstevens',precision=prec) # long time sage: L.series(4) # long time 2*3 + 3^4 + 3^5 + O(3^6) + (2*3 + 3^2 + O(3^4))*T + (2*3 + O(3^2))*T^2 + (3 + O(3^2))*T^3 + O(T^4) sage: E = EllipticCurve("15a3") sage: L = E.padic_lseries(5,implementation='pollackstevens',precision=15) # long time sage: L.series(3) # long time O(5^15) + (2 + 4*5^2 + 3*5^3 + 5^5 + 2*5^6 + 3*5^7 + 3*5^8 + 2*5^9 + 2*5^10 + 3*5^11 + 5^12 + O(5^13))*T + (4*5 + 4*5^3 + 3*5^4 + 4*5^5 + 3*5^6 + 2*5^7 + 5^8 + 4*5^9 + 3*5^10 + O(5^11))*T^2 + O(T^3) sage: E = EllipticCurve("79a1") sage: L = E.padic_lseries(2,implementation='pollackstevens',precision=10) # not tested sage: L.series(4) # not tested O(2^9) + (2^3 + O(2^4))*T + O(2^0)*T^2 + (O(2^-3))*T^3 + O(T^4)
>>> from sage.all import * >>> E = EllipticCurve('14a2') >>> p = Integer(3) >>> prec = Integer(6) >>> L = E.padic_lseries(p,implementation='pollackstevens',precision=prec) # long time >>> L.series(Integer(4)) # long time 2*3 + 3^4 + 3^5 + O(3^6) + (2*3 + 3^2 + O(3^4))*T + (2*3 + O(3^2))*T^2 + (3 + O(3^2))*T^3 + O(T^4) >>> E = EllipticCurve("15a3") >>> L = E.padic_lseries(Integer(5),implementation='pollackstevens',precision=Integer(15)) # long time >>> L.series(Integer(3)) # long time O(5^15) + (2 + 4*5^2 + 3*5^3 + 5^5 + 2*5^6 + 3*5^7 + 3*5^8 + 2*5^9 + 2*5^10 + 3*5^11 + 5^12 + O(5^13))*T + (4*5 + 4*5^3 + 3*5^4 + 4*5^5 + 3*5^6 + 2*5^7 + 5^8 + 4*5^9 + 3*5^10 + O(5^11))*T^2 + O(T^3) >>> E = EllipticCurve("79a1") >>> L = E.padic_lseries(Integer(2),implementation='pollackstevens',precision=Integer(10)) # not tested >>> L.series(Integer(4)) # not tested O(2^9) + (2^3 + O(2^4))*T + O(2^0)*T^2 + (O(2^-3))*T^3 + O(T^4)
E = EllipticCurve('14a2') p = 3 prec = 6 L = E.padic_lseries(p,implementation='pollackstevens',precision=prec) # long time L.series(4) # long time E = EllipticCurve("15a3") L = E.padic_lseries(5,implementation='pollackstevens',precision=15) # long time L.series(3) # long time E = EllipticCurve("79a1") L = E.padic_lseries(2,implementation='pollackstevens',precision=10) # not tested L.series(4) # not tested
- symbol()[source]¶
Return the overconvergent modular symbol.
EXAMPLES:
sage: from sage.modular.pollack_stevens.padic_lseries import pAdicLseries sage: E = EllipticCurve('21a4') sage: phi = E.pollack_stevens_modular_symbol() sage: Phi = phi.p_stabilize_and_lift(2,5) # long time sage: L = pAdicLseries(Phi) # long time sage: L.symbol() # long time Modular symbol of level 42 with values in Space of 2-adic distributions with k=0 action and precision cap 15 sage: L.symbol() is Phi # long time True
>>> from sage.all import * >>> from sage.modular.pollack_stevens.padic_lseries import pAdicLseries >>> E = EllipticCurve('21a4') >>> phi = E.pollack_stevens_modular_symbol() >>> Phi = phi.p_stabilize_and_lift(Integer(2),Integer(5)) # long time >>> L = pAdicLseries(Phi) # long time >>> L.symbol() # long time Modular symbol of level 42 with values in Space of 2-adic distributions with k=0 action and precision cap 15 >>> L.symbol() is Phi # long time True
from sage.modular.pollack_stevens.padic_lseries import pAdicLseries E = EllipticCurve('21a4') phi = E.pollack_stevens_modular_symbol() Phi = phi.p_stabilize_and_lift(2,5) # long time L = pAdicLseries(Phi) # long time L.symbol() # long time L.symbol() is Phi # long time