Ask Your Question

Revision history [back]

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 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

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 + 6s, 54 - 42s) 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 + 36I, 216 - 324I) 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 a + b*s and check if they are x-coordinates of points on E/K.

sage: EK = E/K
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!

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 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

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) 324) is on the curve.

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

Check that (21 + 6s, 6*s, 54 - 42s) 42*s) is on the curve, where s^2 = 33.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 + 36I, 36*I, 216 - 324I) 324*I) is on the curve, where I^2 = -1.-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 a + b*s integer elements in a number field K and check if they are x-coordinates of points on E/K.

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!

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)]