# Working on a 3-torsion point on an elliptic curve

I am working on a 3-torsion point (T_3) as follows. My aim is to find the addition on curve for T_3 + [51,108]. I have done the following. First I find (x,y) coordinate for my T_3 which is the following :

E=EllipticCurve([0,0,0,-3267,45630])
E3=E.division_polynomial(3);E3
list(E3.factor())
p = E3.factor()[0][0]; p
p.parent()
P.<x> = QQbar[]
p = P(p); p
p.parent()
p.factor()
p.roots()
roots = p.roots(multiplicities=False); roots
q = x^3 - 3267*x + 45630; q
q.parent()
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())


which gives

xr = -94.19483056089681? = -3*sqrt(12*612^(1/3)*(-1)^(1/3) + 121) - 1/2*sqrt(-432*612^(1/3)*(-1)^(1/3) + 60840/sqrt(12*612^(1/3)*(-1)^(1/3) + 121) + 8712)
yr = 694.5464483276473?*I = sqrt(-108*sqrt(78408*1734^(1/3)*(-1)^(1/3) + 1507177) - 1/2*sqrt(-3658203648*1734^(1/3)*(-1)^(1/3) + 150108334945920/sqrt(78408*1734^(1/3)*(-1)^(1/3) + 1507177) + 140637700224) - 91260)

xr = 67.96049831231529? = 3*sqrt(12*612^(1/3)*(-1)^(1/3) + 121) + 1/2*sqrt(-432*612^(1/3)*(-1)^(1/3) - 60840/sqrt(12*612^(1/3)*(-1)^(1/3) + 121) + 8712)
yr = 370.7929379838096? = sqrt(108*sqrt(78408*1734^(1/3)*(-1)^(1/3) + 1507177) + 1/2*sqrt(-3658203648*1734^(1/3)*(-1)^(1/3) - 150108334945920/sqrt(78408*1734^(1/3)*(-1)^(1/3) + 1507177) + 140637700224) - 91260)

xr = 13.11716612429076? - 19.58845998947787?*I = -3*sqrt(12*612^(1/3)*(-1)^(1/3) + 121) + 1/2*sqrt(-432*612^(1/3)*(-1)^(1/3) + 60840/sqrt(12*612^(1/3)*(-1)^(1/3) + 121) + 8712)
yr = 161.4836552080483? + 190.1138813616981?*I = sqrt(108*sqrt(78408*1734^(1/3)*(-1)^(1/3) + 1507177) - 1/2*sqrt(-3658203648*1734^(1/3)*(-1)^(1/3) - 150108334945920/sqrt(78408*1734^(1/3)*(-1)^(1/3) + 1507177) + 140637700224) - 91260)

xr = 13.11716612429076? + 19.58845998947787?*I = 3*sqrt(12*612^(1/3)*(-1)^(1/3) + 121) - 1/2*sqrt(-432*612^(1/3)*(-1)^(1/3) - 60840/sqrt(12*612^(1/3)*(-1)^(1/3) + 121) + 8712)
yr = 161.4836552080483? - 190.1138813616981?*I = sqrt(-108*sqrt(78408*1734^(1/3)*(-1)^(1/3) + 1507177) + 1/2*sqrt(-3658203648*1734^(1/3)*(-1)^(1/3) + 150108334945920/sqrt(78408*1734^(1/3)*(-1)^(1/3) + 1507177) + 140637700224) - 91260)


I chose the first coordinate P=(xr,yr) of T_3 to perform the addition as follows :

k.<a> = NumberField(x^4 - 6534*x^2 +182520*x-3557763)
kX.<X>=FunctionField(K)
R.<Y> = kX[]
kY.<Y> = kX.extension(Y^2-X^3+3267*X-45630)
E=EllipticCurve(kY,[0,0,0,-3267,45630])
P=E(-3*sqrt(12*612^(1/3)*(-1)^(1/3) + 121) - 1/2*sqrt(-432*612^(1/3)*(-1)^(1/3) + 60840/sqrt(12*612^(1/3)*(-1)^(1/3) + 121) + 8712),sqrt(-108*sqrt(78408*1734 ...
edit retag close merge delete

Sort by ยป oldest newest most voted

Radical expressions are nice to look at when they exist, but not so important.

In general, it is better to work with algebraic numbers.

Looking at the factors of E3 is also not so interesting, you should look at all roots.

I would suggest something along the lines of this:

E = EllipticCurve([0, 0, 0, -3267, 45630])
E3 = E.division_polynomial(3)
S.<x> = QQbar[]
p = S(E3)
roots = p.roots(multiplicities=False)
q = x^3 - 3267*x + 45630
Q = E(QQbar)(51,108)
for (x, y) in [(r, sqrt(q(r))) for r in roots]:
P = E(QQbar)(x,y)
R = P + Q
print("P = {}".format(P))
print("P + Q = {}\n".format(R))


which gives the following result

P = (-94.19483056089681? : 694.5464483276473?*I : 1)
P + Q = (20.86577892629443? - 7.11627524481309?*I : -51.544273987571? - 138.855208656804?*I : 1)

P = (67.96049831231529? : 370.7929379838096? : 1)
P + Q = (121.11628555967136? : -1194.410572580779? : 1)

P = (13.11716612429076? - 19.58845998947787?*I : 161.4836552080483? + 190.1138813616981?*I : 1)
P + Q = (-65.5718663720001? + 40.98365708169645?*I : -615.217201111534? - 264.8790840730025?*I : 1)

P = (13.11716612429076? + 19.58845998947787?*I : 161.4836552080483? - 190.1138813616981?*I : 1)
P + Q = (-65.5718663720001? - 40.98365708169645?*I : -615.217201111534? + 264.8790840730025?*I : 1)


If you care a lot about radical expressions, you can try to get them:

for (x, y) in [(r, sqrt(q(r))) for r in roots]:
P = E(QQbar)(x,y)
R = P + Q
print("P = {}".format(P))
xp, yp = P[:2]
print("P + Q = {}".format(R))
xr, yr = R[:2]


although apparently this gives radical expressions for the coordinates of P but not of P + Q.

P = (-94.19483056089681? : 694.5464483276473?*I : 1)
xp = -3*sqrt(12*612^(1/3)*(-1)^(1/3) + 121) - 1/2*sqrt(-432*612^(1/3)*(-1)^(1/3) + 60840/sqrt(12*612^(1/3)*(-1)^(1/3) + 121) + 8712)
yp = sqrt(-108*sqrt(78408*1734^(1/3)*(-1)^(1/3) + 1507177) - 1/2*sqrt(-3658203648*1734^(1/3)*(-1)^(1/3) + 150108334945920/sqrt(78408*1734^(1/3)*(-1)^(1/3) + 1507177) + 140637700224) - 91260)
P + Q = (20.86577892629443? - 7.11627524481309?*I : -51.544273987571? - 138.855208656804?*I : 1)
xr = 20.86577892629443? - 7.11627524481309?*I
yr = -51.544273987571? - 138.855208656804?*I

P = (67.96049831231529? : 370.7929379838096? : 1)
xp = 3*sqrt(12*612^(1/3)*(-1)^(1/3) + 121) + 1/2*sqrt(-432*612^(1/3)*(-1)^(1/3) - 60840/sqrt(12*612^(1/3)*(-1)^(1/3) + 121) + 8712)
yp = sqrt(108*sqrt(78408*1734^(1/3)*(-1)^(1/3) + 1507177) + 1/2*sqrt(-3658203648*1734^(1/3)*(-1)^(1/3) - 150108334945920/sqrt(78408*1734^(1/3)*(-1)^(1/3) + 1507177) + 140637700224) - 91260)
P + Q = (121.11628555967136? : -1194.410572580779? : 1)
xr = 121.11628555967136?
yr = -1194.410572580779?

P = (13.11716612429076? - 19.58845998947787?*I : 161.4836552080483? + 190.1138813616981?*I : 1)
xp = -3*sqrt(12*612^(1/3)*(-1)^(1/3) + 121) + 1/2*sqrt(-432*612 ...
more

Thank you so much for explaining this to me...

( 2016-11-10 20:53:04 -0500 )edit