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

Creation Functions

Subsections

Creation of an Elliptic Curve

An elliptic curve E can currently only be created by specifying Weierstrass coordinates for the curve over a field K (integer coordinates are regarded as rational elements). Note that the result will in fact be the collection of points E[K] on the curve over the field of definition K --- in particular points defined over an extension field will not be in E.

EllipticCurve([a, b]) : [ RngElt ] -> GeomEC
EllipticCurve([a1,a2,a3,a4,a6]) : [ RngElt ] -> GeomEC
Given a sequence of elements of a ring R, create the elliptic curve over R defined by taking the elements of the sequence as Weierstrass coefficients. The length of the sequence must either be 2, that is s=[a, b], in which case E is defined by y^2z = x^3 + axz^2 + bz^3, or 5, that is s=[a_1, a_2, a_3, a_4, a_6], in which case E is given by y^2z + a_1xyz + a_3yz^2=x^3 + a_2x^2z + a_4xz^2 + a_6z^3. Currently R must be field; if integers are given, they will be coerced into Q. The given coefficients must define a non-singular curve; that is, the discriminant of the curve must be non-zero.
IsEllipticCurve([a, b]) : [ RngElt ] -> BoolElt, GeomEC
IsEllipticCurve([a1,a2,a3,a4,a6]) : [ RngElt ] -> BoolElt, GeomEC
If the given sequence of ring elements defines an elliptic curve with discriminant zero then this function returns false. Otherwise it returns true and creates the elliptic curve E as defined above.

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] : GeomEC, [RngElt] -> GeomECElt
E ! [x, y] : GeomEC, [RngElt] -> GeomECElt
elt< E | x, y, z > : GeomEC, RngElt, RngElt, RngElt -> GeomECElt
elt< E | x, y > : GeomEC, RngElt, RngElt -> GeomECElt
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) : GeomEC -> GeomECElt
Id(E) : GeomEC -> GeomECElt
E ! 0 : GeomEC, RngIntElt -> GeomECElt
Return the normalized identity point (0:1:0) on the curve E.
IsPoint(S, E) : [RngElt], GeomEC -> BoolElt, GeomECElt
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.

Example Elcu_Creation (H46E1)

Create an elliptic curve over the rationals:

> E := EllipticCurve([1, 2]);
> print E;
Elliptic Curve defined by y^2 = x^3 + x + 2 over Rational Field
> print E ! [1, 2];
(1, 2, 1)
The same over a finite field:

> F<f> := FiniteField(11);
> E := EllipticCurve([ F | 1, 2]);
> print E ! [2, 1];
(2, 1, 1)
To define points over an extension field, we have to change the definition of the curve.

> G<g> := FiniteField(11, 2);
> R<r> := PolynomialRing(G);
> a := Roots(r^2-2)[1][1];
> print a^2;
> // The following produces an error:
>   print E ! [0, a, 1];

>> print E ! [0, a, 1]; ^ Runtime error in '!': Cannot coerce element into ring

> EE := EllipticCurve([G | 1, 2]); > print EE ! [0, a, 1]; (0, g^66, 1)

Note that the field of definition can also be changed with Lift.
[Next] [Prev] [Right] [Left] [Up] [Index] [Root]