# point on elliptic curve

I have point P=[-21,324] on E=ellipticCurve([0,0,0,-3267,45630]). I noticed that point P can be written in different ways in each number field. For example in Q(\sqrt{33}), P=[21+6*s, 54-42*s] with s^2=33. And in complex numbers, P=[15+36I,216-324I] with I^2=-1. How can I find the P in different number fields.

edit retag close merge delete

Sort by » oldest newest most voted

# Rational points on an elliptic curve over a number field

There might be a misunderstanding in your question.

The idea is probably to give examples of rational points on the elliptic curve when considered over various number fields.

## Checking if a point is on a curve

Define a test to check if a point is on the curve.

sage: def check(x, y):
....:     print(y^2)
....:     print(x^3 - 3267*x + 45630)
....:     return(y^2 == x^3 - 3267*x + 45630)


Check that (-21, 324) is on the curve.

sage: xa, ya = (-21, 324)
sage: check(xa, ya)
104976
104976
True


Check that (21 + 6*s, 54 - 42*s) is on the curve, where s^2 = 33.

sage: K.<s> = NumberField(x^2 - 33)
sage: xb, yb = (21 + 6*s, 54 - 42*s)
sage: check(xb, yb)
-4536*s + 61128
-4536*s + 61128
True


Check that (15 + 36*I, 216 - 324*I) is on the curve, where I^2 = -1.

sage: C.<I> = NumberField(x^2 + 1)
sage: xc, yc = (15 + 36*I, 216 - 324*I)
sage: check(xc, yc)
-139968*I - 58320
-139968*I - 58320
True


But those are not the same point on the elliptic curve.

I suppose your question is, given a number field F, how to find a point on the elliptic curve over F.

## Finding rational points on an elliptic curve over a number field

Here is an example of a naïve search: we run through integer elements in a number field K and check if they are x-coordinates of points on E/K.

Define an elliptic curve.

sage: E = EllipticCurve([0, 0, 0, -3267, 45630])
sage: E
Elliptic Curve defined by y^2 = x^3 - 3267*x + 45630 over Rational Field


Consider the elliptic curve over a number field.

sage: K.<s> = NumberField(x^2 - 33)
sage: EK = E/K


Now use the method is_x_coord:

sage: for a in range(-30,31):
....:     for b in range(-30,31):
....:         if EK.is_x_coord(a + b*s): print a + b*s
....:
-21
6
7
15
-6*s + 21
6*s + 21


Then it's not too hard to figure out the corresponding y-coordinates. I'll leave it as an exercise!

## Generators

The gens method can also be useful.

sage: E = EllipticCurve([0, 0, 0, -3267, 45630])
sage: K.<s> = NumberField(x^2 - 33)
sage: EK = E/K
sage: sage: EK.gens()
[(-21 : -324 : 1), (6 : 162 : 1), (-6*s + 21 : -42*s - 54 : 1)]


For the field C:

sage: C.<I> = NumberField(x^2 + 1)
sage: EC = E/C
sage: EC.gens()
[(-21 : -324 : 1),
(-129 : -1296*I : 1),
(-72*I + 15 : -648*I - 432 : 1),
(72*I + 15 : 648*I - 432 : 1)]

more

( 2016-11-22 06:02:19 -0500 )edit

Thank you so much for this. I think I had a misunderstanding in the lecture. It is not that the point P=[-21,324] can be written as other forms in different number fields, but rather they are points on E but just in different number fields. Thank you for making this clear.

( 2016-11-22 18:59:31 -0500 )edit

I have a quick question, you said it is not too hard to figure out the corresponding y-coordinates. I tried using EK.is_y_coord(a + b*s) but it did not work.

( 2016-12-17 01:04:59 -0500 )edit

If you have some a + b*s which is an x-coordinate on E, then the corresponding y-coordinates are given by y^2 = x^3 - 3267*x + 45630, in other words you take x = a + b*s, compute x^3 - 3267*x + 45630, and then take the two square roots.

( 2016-12-17 03:58:01 -0500 )edit

I am not sure about your question (do not hesitate to edit it to make it more precise), but you can define your elliptic cuve and points on a different field as follows:

sage: F = QQ[sqrt(33)]
sage: F
Number Field in sqrt33 with defining polynomial x^2 - 33
sage: F.inject_variables()
Defining sqrt33
sage: E = EllipticCurve(F,[0,0,0,-3267,45630])
sage: E
Elliptic Curve defined by y^2 = x^3 + (-3267)*x + 45630 over Number Field in sqrt33 with defining polynomial x^2 - 33
sage: P = [21+6*sqrt33, 54-42*sqrt33]
sage: P in E
True

sage: F = QQbar
sage: F
Algebraic Field
sage: F.inject_variables()
Defining I
sage: E = EllipticCurve(F,[0,0,0,-3267,45630])
sage: E
Elliptic Curve defined by y^2 = x^3 + (-3267)*x + 45630 over Algebraic Field
sage: P = [15+36*I,216-324*I]
sage: P in E
True


Note that by default, your elliptic curve is defined over the field of rationals:

sage: E = EllipticCurve([0,0,0,-3267,45630])
sage: E
Elliptic Curve defined by y^2 = x^3 - 3267*x + 45630 over Rational Field

more

Thank you so much for explaining this to me.

( 2016-11-22 18:57:05 -0500 )edit