Ask Your Question
0

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

asked 2016-05-26 05:30:16 -0500

Suman gravatar image

updated 2017-01-08 05:04:30 -0500

FrédéricC gravatar image

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 flag offensive close merge delete

2 answers

Sort by » oldest newest most voted
1

answered 2017-04-06 16:25:17 -0500

dan_fulea gravatar image

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))
edit flag offensive delete link more
1

answered 2016-05-26 15:00:23 -0500

nbruin gravatar image

updated 2016-05-30 00:24:06 -0500

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))]
edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2016-05-26 05:30:16 -0500

Seen: 276 times

Last updated: Apr 06