[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 ] -> CurveEll
EllipticCurve([a1,a2,a3,a4,a6]) : [ RngElt ] -> CurveEll
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, CurveEll
IsEllipticCurve([a1,a2,a3,a4,a6]) : [ RngElt ] -> BoolElt, CurveEll
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.
EllipticCurve(R, j) : Rng, RngElt -> CurveEll
Given an element j coercible into R, create the elliptic curve over R with j-invariant equal j defined as follows. If J = j - 1728 is invertible in R then E: y^2 + xy - x^3 + (36J^(-1))x + J^(-1); if j=0 in R then E: y^2 + y - x^3, and if j=1728 in R then E: y^2 - x^3 - x.

Example Elcu_Creation (H53E1)

Create an elliptic curve over the rationals:

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

> F<f> := FiniteField(11);
> E := EllipticCurve([ F | 1, 2]);
> 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];
> 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]); > 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]