Ask Your Question
1

y-coordinate of a 4-torsion point

asked 2016-11-03 21:01:35 -0500

Sha gravatar image

updated 2016-11-04 05:46:54 -0500

I want to find the y-coordinate of a 4-torsion point. I have the following code where I found the x-coordinate

E3=EllipticCurve([0,0,0,-3267,45630])
E=E3.division_polynomial(4);E
E.factor()

which gives

8*(x^4 + 30*x^3 - 18252*x^2 + 280530*x + 6465339)*(x^2 + 15*x - 3042)*(x^2 - 30*x + 2817)*(x - 15)

Then I factor $x^2 - 30x + 2817$ in $\mathbb{Q}(\sqrt{-2})$ and I got $[(-36\sqrt{-2} + 15, 1), (36\sqrt{-2} + 15, 1)]$ which is my x-coordinate. How to get the y-coordinate? If I denote $\sqrt{-2}=B$, then I have $x=15\pm 36B$. And I substitute it into my elliptic curve gives

B = var('B')
y2=x^3-3267*x+45630;y2
y=y2.subs({x:15+36*B});y
Y=y.simplify_full();Y
YY=Y.subs({B^2:-2});YY
YYY=YY.subs({B^3:-2*B});YYY

which equals to $y^2=186624B-116640$. How to get the y-coordinate. By trying an error multiple times (using PARI-gp) I manage to get y-coordinate as $y=27a^3-135a-108aB$ with $a^4-5a^2-32=0$ and $B^2=-2$. But i got this by trying an error comparing LHs and RHS equation. Not straight away from $y^2=186624B-116640$. I tried the following but it did not work :

K.<a> = NumberField(x^4 -5*x^2-32); K
f = K.factor(186624*B-116640); f
edit retag flag offensive close merge delete

Comments

Can you edit your question and add the code for each step? For instance, when you write

And I substitute it into my elliptic curve gives me y^2 = 186624* B − 116640.

What code do you use to get that?

Also, make sure someone can replicate the code in your question in a fresh Sage session.

For instance, your last line involves B, but you didn't provide code that defines it.

slelievre gravatar imageslelievre ( 2016-11-04 03:19:17 -0500 )edit

@slelievre Sorry I will edit this. Thank you.

Sha gravatar imageSha ( 2016-11-04 05:44:16 -0500 )edit

1 answer

Sort by » oldest newest most voted
1

answered 2016-11-04 09:57:06 -0500

I would recommend to avoid Sage's symbolic ring for such computations.

The best here is to use algebraic numbers, which form the ring QQbar, and to work with polynomials over that ring.

For reference here is the Sage version I am working with.

sage: version()
'SageMath version 7.3, Release Date: 2016-08-04'

This is one way you could work.

sage: E3 = EllipticCurve([0, 0, 0, -3267, 45630])
sage: E = E3.division_polynomial(4); E
8*x^9 - 156816*x^7 + 7665840*x^6 - 25044299280*x^4 + 1873623790224*x^3 - 35065596749040*x^2 - 258340569679368*x + 6648422400893520
sage: E.parent()
Univariate Polynomial Ring in x over Rational Field

Here is how this polynomial factors over QQ:

sage: E.factor()
(8) * (x - 15) * (x^2 - 30*x + 2817) * (x^2 + 15*x - 3042) * (x^4 + 30*x^3 - 18252*x^2 + 280530*x + 6465339)

The list of factors over QQ:

sage: list(E.factor())
[(x - 15, 1),
 (x^2 - 30*x + 2817, 1),
 (x^2 + 15*x - 3042, 1),
 (x^4 + 30*x^3 - 18252*x^2 + 280530*x + 6465339, 1)]

Let us select one factor:

sage: p = E.factor()[1][0]; p
x^2 - 30*x + 2817
sage: p.parent()
Univariate Polynomial Ring in x over Rational Field

This factor lives in QQ[x]. Let us change to QQbar[x].

sage: P.<x> = QQbar[]
sage: p = P(p); p
x^2 - 30*x + 2817
sage: p.parent()
Univariate Polynomial Ring in x over Algebraic Field

Now this polynomial factors completely, and has two roots of multiplicity one.

sage: p.factor()
(x - 15.00000000000000? - 50.91168824543143?*I) * (x - 15.00000000000000? + 50.91168824543143?*I)
sage: p.roots()
[(15.00000000000000? - 50.91168824543143?*I, 1),
 (15.00000000000000? + 50.91168824543143?*I, 1)]

Forgetting about multiplicities:

sage: roots = p.roots(multiplicities=False); roots
[15.00000000000000? - 50.91168824543143?*I,
 15.00000000000000? + 50.91168824543143?*I]

Let us enter by hand the polynomial associated with E3.

sage: q = x^3 - 3267*x + 45630; q
x^3 - 3267*x + 45630
sage: q.parent()
Univariate Polynomial Ring in x over Algebraic Field

[Exercise: try to get hold of this polynomials starting from E3 instead of entering it by hand.]

Now for each root r of p, the corresponding y-value on E3 is sqrt(q(r)).

sage: for (x, y) in [(r, sqrt(q(r))) for r in roots]:
....:     print 'xr = {} = {}'.format(x, x.radical_expression())
....:     print 'yr = {} = {}\n'.format(y, y.radical_expression())
....:     
xr = 15.00000000000000? - 50.91168824543143?*I = -36*I*sqrt(2) + 15
yr = 293.1820459230292? + 450.1063341607327?*I = 27*sqrt(256*I*sqrt(2) - 160)

xr = 15.00000000000000? + 50.91168824543143?*I = 36*I*sqrt(2) + 15
yr = 293.1820459230292? - 450.1063341607327?*I = 27*sqrt(-256*I*sqrt(2) - 160)

These are algebraic numbers and maybe their minimal polynomial is useful.

sage: for (x, y) in [(r, sqrt(q(r))) for r in roots]:
....:     print 'xr has minpoly {}'.format(x.minpoly())
....:     print 'yr has minpoly {}\n'.format(y.minpoly())
....:     
xr has minpoly x^2 - 30*x + 2817
yr has minpoly x^4 + 233280*x ...
(more)
edit flag offensive delete link more

Comments

Thank you so much Sir for your answer. This is perfect way for me to play around with the code to get what I am looking for as it is so detailed. Thank you again!

Sha gravatar imageSha ( 2016-11-05 06:55:55 -0500 )edit

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-11-03 21:01:35 -0500

Seen: 48 times

Last updated: Nov 04 '16