Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download

All published worksheets from http://sagenb.org

Views: 168731
Image: ubuntu2004
2+2
def rank_zero_twists(A, n): """ INPUT: - A -- rank > 0 modular abelian variety - n -- bound for search OUTPUT: - list of integers d with |d| <= n such that twisting A by the character (d/-) results in an abelian variety with analytic rank 0. """ #from sage.modular.abvar.abvar import is_ModularAbelianVariety #if is_ModularAbelianVariety(A): # A = A.modular_symbols(sign=0) if A.sign() != 0: raise ValueError, "A must have sign 0" phi = A.rational_period_mapping() N = A.level() M = A.ambient_module() if phi(M([0,oo])) != 0: raise ValueError, "A must have analytic rank > 0" v = [] for d in [-n..n]: if gcd(A.level(), d) == 1: eps = kronecker_character(d) if eps.is_primitive() and eps.conductor() > 1 : #and eps(-N) == 1: #print "trying %s"%d w = M.twisted_winding_element(0, eps) if phi(w) != 0: #print d v.append(d) return v
def higher_rank_twists(A, n): """ INPUT: - A -- rank 0 modular abelian variety or sign 0 modular symbols space - n -- bound for search OUTPUT: - list of integers d with |d| <= n such that twisting A by the character (d/-) results in an abelian variety with *even* positive analytic rank. """ from sage.modular.abvar.abvar import is_ModularAbelianVariety if is_ModularAbelianVariety(A): A = A.modular_symbols(sign=0) if A.sign() != 0: raise ValueError, "A must have sign 0" phi = A.rational_period_mapping() N = A.level() M = A.ambient_module() if phi(M([0,oo])) == 0: raise ValueError, "A must have analytic rank 0" v = [] for d in [-n..n]: if gcd(A.level(), d) == 1: eps = kronecker_character(d) if eps.is_primitive() and eps.conductor() > 1 and eps(-N) == 1: #print "trying %s"%d w = M.twisted_winding_element(0, eps) if phi(w) == 0: v.append(d) return v

Here we find rank 0 twists of a rank 2 elliptic curve:

M = ModularSymbols(389,2).cuspidal_submodule().new_subspace().decomposition()[0] L = rank_zero_twists(M,50); L
[-50, -48, -43, -40, -39, -38, -37, -34, -33, -32, -31, -29, -27, -26, -23, -22, -21, -18, -15, -14, -12, -10, -8, -3, -2, 5, 6, 7, 11, 13, 17, 19, 20, 24, 28, 30, 35, 41, 42, 44, 45]
E = EllipticCurve('389a') for l in L: print l, E.quadratic_twist(l).analytic_rank()
-50 0 -48 0 -43 0 -40 0 -39 0 -38 0 -37 0 -34 0 -33 0 -32 0 -31 0 -29 0 -27 0 -26 0 -23 0 -22 0 -21 0 -18 0 -15 0 -14 0 -12 0 -10 0 -8 0 -3 0 -2 0 5 0 6 0 7 0 11 0 13 0 17 0 19 0 20 0 24 0 28 0 30 0 35 0 41 0 42 0 44 0 45 0

But for higher dimension, how large does nn need to be ?!

M = ModularSymbols(93,2).cuspidal_submodule().new_subspace().decomposition()[0]; M L = rank_zero_twists(M,100); L
[-100, -97, -94, -92, -89, -86, -83, -82, -77, -76, -74, -70, -68, -67, -65, -64, -53, -49, -44, -40, -29, -28, -26, -25, -23, -19, -17, -16, -11, -10, -7, -4, -1, 2, 5, 8, 13, 14, 20, 22, 32, 34, 35, 37, 38, 41, 43, 46, 47, 50, 52, 55, 56, 58, 59, 61, 71, 73, 79, 80, 85, 88, 91, 95, 98]
# sage: from psage.modform.rational.padic_lseries import * # sage: D = J0(93).decomposition() # sage: A = D[0] # sage: L = pAdicLseriesOrdinary(A, 7) # sage: lval = L.series(n=2, 37)[0] #also, 5, 56
#D = J0(188).decomposition() # sage: A = D[-2] D = ModularSymbols(188,2).cuspidal_submodule().new_subspace().decomposition() A = D[0] # sage: L = pAdicLseriesOrdinary(A, 7)
p = 11 A = [] chi = kronecker_character(p) for l in L: if chi(l) == 1 and fundamental_discriminant(l) == l: A.append(l) print A
[-87, -43, -39, -35, -19, 5, 69, 93]
M = ModularSymbols(389,2).cuspidal_submodule().new_subspace().decomposition()[0]; M L = rank_zero_twists(M,100); L
[-98, -92, -90, -89, -88, -84, -83, -82, -75, -72, -71, -70, -61, -60, -57, -56, -53, -51, -50, -48, -43, -40, -39, -38, -37, -34, -33, -32, -31, -29, -27, -26, -23, -22, -21, -18, -15, -14, -12, -10, -8, -3, -2, 5, 6, 7, 11, 13, 17, 19, 20, 24, 28, 30, 35, 41, 42, 44, 45, 52, 54, 55, 58, 59, 62, 63, 66, 68, 69, 73, 74, 76, 77, 78, 79, 80, 85, 87, 96, 97, 99]
M= ModularSymbols(167,2).cuspidal_submodule().new_subspace().decomposition()[0] L167 = rank_zero_twists(M,100); L167
[-92, -91, -90, -86, -83, -82, -80, -79, -78, -74, -73, -71, -70, -69, -68, -67, -60, -52, -51, -46, -45, -43, -41, -40, -39, -37, -35, -34, -30, -26, -23, -20, -17, -15, -13, -10, -5, 5, 10, 13, 15, 17, 20, 23, 26, 30, 34, 35, 37, 39, 40, 41, 43, 45, 46, 51, 52, 55, 59, 60, 67, 68, 69, 70, 71, 73, 74, 78, 79, 80, 82, 83, 86, 90, 91, 92, 95]
p = 19 A = [] chi = kronecker_character(p) for l in L167: if chi(l) == 1 and fundamental_discriminant(l) == l: A.append(l) print A
[-91, -79, -71, -67, -51, -15, 5, 17, 73]
from psage.modform.rational.padic_lseries import * D = J0(147).decomposition()[-2] L = pAdicLseriesOrdinary(D, 19) lval = L.series(2, 5)[0] alpha1,alpha2 = L.alpha() eps = (1-1/alpha1)^2*(1-1/alpha2)^2 -lval/eps
M = ModularSymbols(133,2).cuspidal_submodule().new_subspace().decomposition()[0] L133 = rank_zero_twists(M,100); L133
[-100, -99, -97, -94, -93, -92, -90, -89, -85, -81, -75, -74, -69, -64, -59, -58, -52, -48, -44, -43, -41, -40, -39, -36, -34, -33, -31, -30, -27, -25, -23, -16, -13, -12, -11, -10, -9, -4, -3, -1, 2, 5, 6, 8, 15, 17, 18, 20, 22, 24, 26, 29, 32, 37, 45, 46, 47, 50, 51, 53, 54, 55, 60, 61, 62, 65, 66, 67, 68, 71, 72, 73, 78, 79, 80, 82, 83, 87, 88, 96]
p = 29 A = [] chi = kronecker_character(p) for l in L133: if chi(l) == 1 and fundamental_discriminant(l) == l: A.append(l) print A
[-59, -52, -23, -4, 5, 24, 53, 65, 88]
from psage.modform.rational.padic_lseries import * D = J0(133).decomposition()[2] L = pAdicLseriesOrdinary(D, 29) lval = L.series(2, 5)[0] alpha1,alpha2 = L.alpha() eps = (1-1/alpha1)^2*(1-1/alpha2)^2 -lval/eps
D = ModularSymbols(147,2).cuspidal_submodule().new_subspace().decomposition() A = D[-2] phi = A.rational_period_mapping() M = A.ambient_module() phi(M([0,oo]))
(0, 0, 0, 0)
M= ModularSymbols(147,2).cuspidal_submodule().new_subspace().decomposition()[-2] L147 = rank_zero_twists(M,100); L147
[-92, -89, -83, -80, -74, -71, -68, -65, -62, -59, -53, -50, -47, -44, -41, -32, -29, -26, -23, -20, -17, -11, -8, -5, -2, 2, 5, 8, 11, 17, 20, 23, 26, 29, 32, 38, 41, 44, 47, 50, 53, 59, 62, 65, 68, 71, 74, 80, 83, 89, 92, 95]
p = 31 A = [] chi = kronecker_character(p) for l in L147: if chi(l) == 1 and fundamental_discriminant(l) == l: A.append(l) print A
[-83, -23, -11, 5, 41]
from psage.modform.rational.padic_lseries import * D = J0(147).decomposition()[-2] L = pAdicLseriesOrdinary(D, 31) lval = L.series(2, 41)[0] alpha1,alpha2 = L.alpha() eps = (1-1/alpha1)^2*(1-1/alpha2)^2 #(5,16), (41,16) -lval/eps

Higher rank twists: double check with an elliptic curve:

higher_rank_twists(ModularSymbols(11,2).cuspidal_subspace(), 75)
[-47, 58]
EllipticCurve('11a').quadratic_twist(-47).analytic_rank()
2

Now the interesting search

higher_rank_twists(ModularSymbols(23,2).cuspidal_subspace(), 150)
[59]
kronecker_character(59).conductor()
236
higher_rank_twists(ModularSymbols(31,2).cuspidal_subspace(), 150)
[-143, -131, -47]
kronecker_character(-47).conductor()
47
A=ModularSymbols(35,2).cuspidal_subspace().new_subspace().decomposition()[1]; print A
Modular Symbols subspace of dimension 4 of Modular Symbols space of dimension 9 for Gamma_0(35) of weight 2 with sign 0 over Rational Field
higher_rank_twists(A, 75)
[]
A=ModularSymbols(39,2).cuspidal_subspace().new_subspace().decomposition()[1]; print A
Modular Symbols subspace of dimension 4 of Modular Symbols space of dimension 9 for Gamma_0(39) of weight 2 with sign 0 over Rational Field
higher_rank_twists(A, 75)
[]
A=ModularSymbols(63,2).cuspidal_subspace().new_subspace().decomposition()[1]; print A
Modular Symbols subspace of dimension 4 of Modular Symbols space of dimension 17 for Gamma_0(63) of weight 2 with sign 0 over Rational Field
higher_rank_twists(A, 75)
[]
A=ModularSymbols(65,2).cuspidal_subspace().new_subspace().decomposition()[1]; print A
Modular Symbols subspace of dimension 4 of Modular Symbols space of dimension 13 for Gamma_0(65) of weight 2 with sign 0 over Rational Field
higher_rank_twists(A, 75)
[]
A=ModularSymbols(65,2).cuspidal_subspace().new_subspace().decomposition()[2]; print A
Modular Symbols subspace of dimension 4 of Modular Symbols space of dimension 13 for Gamma_0(65) of weight 2 with sign 0 over Rational Field
higher_rank_twists(A, 75)
[]
A=ModularSymbols(87,2).cuspidal_subspace().new_subspace().decomposition()[0]; print A
Modular Symbols subspace of dimension 4 of Modular Symbols space of dimension 21 for Gamma_0(87) of weight 2 with sign 0 over Rational Field
higher_rank_twists(A, 75)
[]