# Finding out $p$-torsion elements of an elliptic curve $E$ over $\mathbb{Q}_p$

Let $E$ be an elliptic curve over $\mathbb{Q}$. Then how to compute the $p$-torsion elements of $E$ over the $p$-adic field $\mathbb{Q}_p$ using SAGE ? At least can we say whether $E(\mathbb{Q}_p)[p]=0$ or not ?

edit retag close merge delete

Sort by » oldest newest most voted

You can probably adapt this code:

sage: E=EllipticCurve([1,2,3,4,5])
sage: K=Qp(7)
sage: KX=K['X']
sage: f,h=E.hyperelliptic_polynomials()
sage: n=3
sage: xvals=E.division_polynomial(n).roots(K,multiplicities=false)
sage: [(x1,y1) for x1 in xvals for y1 in KX([-f(x1),h(x1),1]).roots(multiplicities=false)]
[(3*7 + 5*7^2 + 5*7^3 + 5*7^4 + 4*7^5 + 4*7^6 + 2*7^7 + 5*7^8 + 2*7^9 + 6*7^10 + 2*7^12 + 5*7^13 + 3*7^14 + 7^15 + 6*7^17 + 2*7^18 + 4*7^19 + O(7^20),
6 + 7 + 2*7^3 + 2*7^4 + 4*7^5 + 5*7^7 + 3*7^8 + 2*7^9 + 3*7^10 + 4*7^11 + 5*7^12 + 3*7^13 + 2*7^14 + 3*7^15 + 6*7^16 + 4*7^17 + 6*7^18 + 4*7^19 + O(7^20)),
(3*7 + 5*7^2 + 5*7^3 + 5*7^4 + 4*7^5 + 4*7^6 + 2*7^7 + 5*7^8 + 2*7^9 + 6*7^10 + 2*7^12 + 5*7^13 + 3*7^14 + 7^15 + 6*7^17 + 2*7^18 + 4*7^19 + O(7^20),
5 + 7 + 7^2 + 6*7^3 + 5*7^4 + 4*7^5 + 7^6 + 6*7^7 + 4*7^8 + 7^9 + 4*7^10 + 7^11 + 6*7^12 + 4*7^13 + 2*7^15 + 3*7^17 + 4*7^18 + 4*7^19 + O(7^20))]

more

There are structure theorems related to this. Given a "good equation" defined over $\mathbb Z_p$, for a "good prime" $p$, a first try is to get the $p$-division points for the reduction modulo $p$. For instance:

sage: p = 3
sage: R, F, f = Zp(p), Qp(p), GF(p)
sage: E = EllipticCurve( f, [1,0,0,0,1] )
sage: E.order().factor()
2 * 3
sage: E(0).division_points(3)
[(0 : 1 : 0), (2 : 0 : 1), (2 : 1 : 1)]


Teichmüller lifts can (?!) then be constructed... For instance:

p = 3
R, F, f = Zp( p,4 ), Qp( p,4 ), GF(p)

Ef = EllipticCurve( f, [1,0,0,0,1] )
EF = EllipticCurve( F, [1,0,0,3,4] )

for point in Ef.points():
a,b,c = point
A,B,C = F(a.lift()), F(b.lift()), F(c.lift())
try:
POINT = EF.teichmuller( (A,B,C) )
print "%s -> %s" % ( point, POINT )
except:
print "%s -> ***" % point


This gives some lifts for the points where the valuation condition is verified:

(0 : 1 : 0) -> (0 : 1 + 2*3 + 2*3^2 + 2*3^3 + O(3^4) : 1 + O(3^4))
(0 : 1 : 1) -> (0 : 1 + 2*3 + 2*3^2 + 2*3^3 + O(3^4) : 1 + O(3^4))
(0 : 2 : 1) -> (0 : 2 + O(3^4) : 1 + O(3^4))
(1 : 1 : 1) -> ***
(2 : 0 : 1) -> (2 + 2*3 + 2*3^2 + 2*3^3 + O(3^4) : O(3^4) : 1 + O(3^4))
(2 : 1 : 1) -> (2 + 2*3 + 2*3^2 + 2*3^3 + O(3^4) : 1 + O(3^4) : 1 + O(3^4))

more