Loading [MathJax]/jax/output/HTML-CSS/jax.js

First time here? Check out the FAQ!

Ask Your Question
0

Finding out p-torsion elements of an elliptic curve E over Qp

asked 8 years ago

Suman gravatar image

updated 8 years ago

FrédéricC gravatar image

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

Preview: (hide)

2 Answers

Sort by » oldest newest most voted
1

answered 8 years ago

nbruin gravatar image

updated 8 years ago

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))]
Preview: (hide)
link
1

answered 7 years ago

dan_fulea gravatar image

There are structure theorems related to this. Given a "good equation" defined over Zp, 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))
Preview: (hide)
link

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: 8 years ago

Seen: 729 times

Last updated: Apr 06 '17