[Next] [Prev] [Right] [Left] [Up] [Index] [Root]
Operations on Points

Operations on Points

Subsections

Creation of Points

Points on an elliptic curve over a field are given in terms of projective coordinates: a point (a, b, c) is equivalent to (x, y, z) if and only if there exists an element u (in the field of definition) such that ua=x, ub=y, and uc=z. The equivalence class of (x, y, z) is denoted by the projective point (x:y:z). At least one of the projective coordinates must be non-zero. We call the coefficients normalized if either z=1, or z=0 and y=1.

E ! [x, y, z] : CurveEll, [RngElt] -> CurveEllPt
E ! [x, y] : CurveEll, [RngElt] -> CurveEllPt
elt< E | x, y, z > : CurveEll, RngElt, RngElt, RngElt -> CurveEllPt
elt< E | x, y > : CurveEll, RngElt, RngElt -> CurveEllPt
Given an elliptic curve E over R and coefficients x, y, z in R satisfying the equation for E, return the normalized point P=(x:y:z) on E. If z is not specified it is assumed to be 1.
Identity(E) : CurveEll -> CurveEllPt
Id(E) : CurveEll -> CurveEllPt
E ! 0 : CurveEll, RngIntElt -> CurveEllPt
Return the normalized identity point (0:1:0) on the curve E.
IsPoint(S, E) : [RngElt], CurveEll -> BoolElt, CurveEllPt
True if the sequence of values in S are the coordinates of a point in E, false otherwise. If this is true, then the corresponding point is returned as the second value.
IsPoint(S, E, K) : [RngElt], CurveEll, Rng -> BoolElt, CurveEllPt
True iff the sequence of values in S are the coordinates of a point in the lift of E over K; the corresponding point is returned as the second value.
RationalPoints(E) : CurveEll -> Set
Returns the set of rational points of E over its coefficient ring.
RationalPoints(E, K) : CurveEll -> Set
Returns the set of rational points of the curve obtained by extending the coefficient ring of E to K.

Arithmetic

The points on an elliptic curve over a field form an abelian group, for which we use the additive notation. The identity element is the point O=(0:1:0).

P + Q : CurveEllPt, CurveEllPt -> CurveEllPt
Given two points P and Q on the same elliptic curve, this returns their sum, which is also a point on E.
P +:= Q : CurveEllPt, CurveEllPt ->
Given two points P and Q on the same elliptic curve, set P to their sum, which is also a point on E.
- P : CurveEllPt -> CurveEllPt
The negative of the point P on an elliptic curve E; that is, the point Q on E such that P + Q=O.
P - Q : CurveEllPt, CurveEllPt -> CurveEllPt
The difference P + ( - Q) of points P, Q, on the same elliptic curve E.
m * P : RngIntElt, CurveEllPt -> CurveEllPt
P * m : CurveEllPt, RngIntElt -> CurveEllPt
The multiple m.P=P.m of the point P on E, for integer m. Here m.P is the sum of m copies of P for positive m, the identity point for m=0 and ( - m).( - P) for negative m.
P *:= m : CurveEllPt, RngIntElt ->
Set P to the multiple m.P=P.m of the point P on E, for integer m.

Example Elcu_GenericPoint (H53E9)

We construct an elliptic curve over a function field (hence an elliptic surface) and form a "generic" point on it.

> // First, construct the function field
> E := EllipticCurve([GF(97) | 1, 2]);
> a1, a2, a3, a4, a6 := Explode(aInvariants(E));
> R := BaseRing(E);
> Px<x> := FunctionField(R); 
> Py<Y> := PolynomialRing(Px);
> F<y> := quo< Py | (Y^2 + (a1*x + a3)*Y - (x^3 + a2*x^2 + a4*x + a6))>;
> 
> EF := Lift(E, F);	// Now lif the curve to be over its own function field
> gen_pt := EF![x,y];	//  and form the generic point
(x, y, 1)
> 2*gen_pt;
((73*x^4 + 48*x^2 + 93*x + 73)/(x^3 + x + 2), (85*x^6 + 37*x^4 + 5*x^3 + 60*x^2 
    + 96*x + 8)/(x^6 + 2*x^4 + 4*x^3 + x^2 + 4*x + 4)*y, 1)

// Check that addition of generic points corresponds to the usual laws > Q<x, y> := PolynomialRing(R, 2); > two_times := Isogeny(E, E, x^3 + x + 2, 73*x^4 + 48*x^2 + 93*x + 73, > (85*x^6 + 37*x^4 + 5*x^3 + 60*x^2 + 96*x + 8)*y ); > P := Random(E); > P := Random(E); > two_times(P); (32, 93, 1) > 2*P; (32, 93, 1)


Order

Order(P) : CurveEllPt -> RngIntElt
Given a point on an elliptic curve defined over Q, this function computes the order of P; that is, the smallest positive integer n such that n.P=O on the curve. If such an n does not exist, 0 is returned to indicate infinite order. If the point is on an elliptic curve defined over a finite field, this function returns the order of the point as above. This function will not accept points on elliptic curves defined over other fields.

Example Elcu_Order (H53E10)

We show several different functions and methods for calculating the order of an elliptic curve over externsions of the base (finite) field.

> E := EllipticCurve([GF(23) | 1, 2]);
> S<X> := PolynomialRing(Integers());
> K<u> := NumberField(X^2 - Trace(E)*X + 23);
> p := 23;
> Order(E);
24
> r := 1; p^r + 1 - Trace(u^r);
24
> Order(Lift(E, GF(23, 2)));
576
> Order(E, 2);
576
> r := 2; p^r + 1 - Trace(u^r);
576
> Order(Lift(E, GF(23, 3)));
12168
> Order(E, 3);
12168
> r := 3; p^r + 1 - Trace(u^r);
12168

Height

These functions require that the corresponding elliptic curve has integral coefficients.

NaiveHeight(P) : CurveEllPt -> FldPrElt
WeilHeight(P) : CurveEllPt -> FldPrElt
Given a point P=(a/b, c/d) on an elliptic curve E defined over Q, returns the naive (or Weil) height of P, which is defined as log max{|a|, |b|}.
Height(P) : CurveEllPt -> FldPrElt
CanonicalHeight(P) : CurveEllPt -> FldPrElt
Given a point P on an elliptic curve E defined over Q with integer coefficients, this returns the canonical height of P (as a real number).
LocalHeight(P, p) : CurveEllPt, RngIntElt -> FldPrElt
Given a point P on an elliptic curve E defined over Q with integer coefficients, this function returns the local height of P at p; here p must be either a prime number or 0. In the latter case the height at the infinite prime is returned. The return value is a real number.
HeightPairing(P, Q) : CurveEllPt, CurveEllPt -> FldPrElt
Given two points P, Q on the same elliptic curve defined over Q with integer coefficients, this function returns the height pairing of P, and Q, which is defined by (h(P + Q) - h(P) - h(Q))/2, where h denotes the canonical height.

Access Operations

ElementToSequence(P): CurveEllPt -> [ RngElt ]
Given a point P on an elliptic curve, this function returns a sequence of length 3 consisting of its coefficients (normalized).
P[i] : CurveEllPt, RngIntElt -> RngElt
Access the i-th coefficient for an elliptic curve point P, for 1 <= i <= 3.

Predicates on Points

IsId(P) : CurveEllPt -> BoolElt
IsIdentity(P) : CurveEllPt -> BoolElt
True if and only if the point P on the elliptic curve E is the identity point on E, false otherwise.
P eq Q : CurveEllPt, CurveEllPt -> BoolElt
True if and only if P and Q are points on the same elliptic curve and have the same coordinates (after normalization).
IsIntegral(P) : CurveEllPt -> BoolElt
Given a point P on an elliptic curve defined over Q, this function returns true if and only if the coordinates of the (normalization of) P are integers.
IsOrderOfPoint(P, m) : CurveEll -> BoolElt
Returns true if P has order m, false otherwise.
IsFinitePointWithThisX(x) : FldElt -> BoolElt, FldElt, CurveEllPt
Given an elliptic curve E over K, and an element x in K, determine whether there exists y in K such that [x, y, 1] is a rational point of E. If so, the function returns one such value for y and the point [x, y, 1] in E. Note that the point at infinity of E will never be returned.

Example Elcu_PlayWithPoints (H53E11)

We show a few simple operations with points on an elliptic curve over a large finite field.

> E := EllipticCurve([GF(NextPrime(10^12)) | 1, 1]);
> Order(E);
1000001795702
> P := Random(E);
> IsOrderOfPoint(P, Order(E));
true
> P;
(652834414164, 320964687531, 1)

[Next] [Prev] [Right] [Left] [Up] [Index] [Root]