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

Creation Functions

Subsections

Creation of an Elliptic Curve

An elliptic curve E may be created by specifying Weierstrass coordinates for the curve over a field K, where integer coordinates are interpreted as elements of Q. Note that the coordinate ring K defines the base point set of E, and points defined over an extension field of K must be created in the appropriate point set.

EllipticCurve([a,b]) : [ RngElt ] -> CrvEll
EllipticCurve([a1,a2,a3,a4,a6]) : [ RngElt ] -> CrvEll
Given a sequence of elements of a ring K, create the elliptic curve E over K defined by taking the elements of the sequence as Weierstrass coefficients. The length of the sequence must either be two, that is s=[a, b], in which case E is defined by y^2z = x^3 + axz^2 + bz^3, or five, 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 K must be field; if integers are given, they will be coerced into Q. The given coefficients must define a nonsingular curve; that is, the discriminant of the curve must be nonzero.
EllipticCurve(j) : RngElt -> CrvEll
Given a ring element j, creates the elliptic curve E over K with j-invariant equal to j defined as follows. If j = 0 and K does not have characteristic 3 then E is defined by y^2 + y = x^3; if j = 1728 then E is defined by y^2 = x^3 + x (which covers the case where j = 0 and K has characteristic 3); otherwise j - 1728 is invertible in K, and E is defined by y^2 + xy = x^3 - (36/(j - 1728))x - 1/(j - 1728).
EllipticCurve(C) : CrvHyp -> CrvEll, Map, Map
Given a genus one hyperelliptic curve (in the sense of Chapter CrvHyp) of degree 3, return an elliptic curve E, an isomorphism C -> E, taking the unique point at infinity on C to the identity element of E, and its inverse E -> C.
EllipticCurve(C) : Crv -> CrvEll, Map, Map
Given a curve with an equation in elliptic Weierstrass form (i.e., whose affine representation is y^2 + a_1xy + a_3y - x^3 - a_2x^2 - a_4x - a_6 = 0), returns the corresponding elliptic curve E, as well as the isomorphisms PC -> E and E -> PC (where PC is the projective form of C).
EllipticCurve(C, P) : Crv, Pt -> CrvEll, Map, Map
Given a projective genus one plane curve C (in the sense of Chapter PLANE ALGEBRAIC CURVES) and a nonsingular point P on C, returns an elliptic curve E and a birational map C -> E taking P to the identity element of E, followed by the inverse morphism from E to C. Note that the birational map is only defined at nonsingular points of C.
SupersingularEllipticCurve(K) : FldFin -> CrvEll
Given a finite field K, returns a representative supersingular elliptic curve.

Creation Predicates

IsEllipticCurve([a,b]) : [ RngElt ] -> BoolElt, CrvEll
IsEllipticCurve([a1,a2,a3,a4,a6]) : [ RngElt ] -> BoolElt, CrvEll
If the given sequence of ring elements defines an elliptic curve of nonzero discriminant then this function returns true, and if so, returns the elliptic curve.
IsEllipticCurve(C) : CrvHyp -> BoolElt, CrvEll, Map, Map
If C is a genus 1 hyperelliptic curve of odd degree then returns true, and if so, returns the corresponding elliptic curve E, the isomorphism C -> E, and its inverse.

Example CrvEll_Creation (H85E1)

We 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 curve over a finite field:

> K := FiniteField(11);
> E := EllipticCurve([K | 1, 2]);
> E ! [2, 1];
(2 : 1 : 1)
To define points over an extension field, we need to create the appropriate point set.

> K2<w> := FiniteField(11, 2);
> R<r> := PolynomialRing(K2);
> a := Roots(r^2-2)[1][1];
> a^2;
2

> // The following produces an error:
> E ! [0, a, 1]; >> E ! [0, a, 1]; ^ Runtime error in '!': Cannot coerce element into ring > E(K2) ! [0, a, 1]; (0 : w^6 : 1)
Alternatively, we could define a new curve over the extension field.

> E2 := EllipticCurve([K2 | 1, 2]);
> E2 ! [0, a, 1];
(0 : w^6 : 1)
Note that the field of definition of a curve can also be changed with BaseChange.

Changing the Base Ring

The following general scheme functions provide a convenient way to generate a new elliptic curve similar to an old one but defined over a different field. Some care must be taken, however: if the result would not define a valid elliptic curve then the functions will still succeed but the object returned will be a general curve rather than an elliptic curve.

BaseChange(E, K) : CrvEll, Rng -> CrvEll
BaseExtend(E, K) : CrvEll, Rng -> CrvEll
Given an elliptic curve E defined over a field k, and a field K which is an extension of k, return an elliptic curve E' over K using the natural inclusion of k in K to map the coefficients of E into K.
ChangeRing(E, K) : CrvEll, Rng -> CrvEll
Given an elliptic curve E defined over a field k, and a field K, return an elliptic curve E' over K by using the standard coercion from k to K to map the coefficients of E into K. This is useful when there is no appropriate ring homomorphism between k and K (e.g., when k=Q and K is a finite field).
BaseChange(E, h) : CrvEll, Map -> CrvEll
BaseExtend(E, h) : CrvEll, Map -> CrvEll
Given an elliptic curve E over a field k and a ring map h : k -> K, return an elliptic E' over K by applying h to the coefficients of E.
BaseChange(E, n) : CrvEll, RngIntElt -> CrvEll
BaseExtend(E, n) : CrvEll, RngIntElt -> CrvEll
The base extension of the elliptic curve E over a finite field to its degree n extension.

Example CrvEll_BaseExtend (H85E2)

> K1 := GF(23);
> K2 := GF(23,2);
> f := hom<K1 -> K2 | >;
> E1 := EllipticCurve([K1 | 1, 1]);
> E2 := EllipticCurve([K2 | 1, 1]);
> assert E2 eq BaseExtend(E1, K2);
> assert E2 eq BaseExtend(E1, f);

> // this is illegal, since K1 is not an extension of K2
> BaseExtend(E2, K1); >> BaseExtend(E2, K1); ^ Runtime error in 'BaseExtend': Coercion of equations is not possible > assert E1 eq ChangeRing(E2, K1); // but this is OK

Alternative Models

WeierstrassModel(E) : CrvEll -> CrvEll, Map, Map
Given an elliptic curve E returns an isomorphic elliptic curve E' in simplified Weierstrass form y^2 = x^2 + ax + b. The base ring of E must not have characteristic 2 or 3, as then such a simplified form does not exist. The isomorphism E -> E' is returned as the second value, followed by the inverse isomorphism E' -> E.

N.B. The related function WeierstrassCoefficients is deprecated and may be removed in a later release.

IntegralModel(E) : CrvEll -> CrvEll, Map, Map
Given an elliptic curve E defined over the rational field Q, returns an isomorphic curve E' defined over Q but with integral coefficients. The isomorphism E -> E' is returned as the second value, followed by the inverse isomorphism E' -> E.
MinimalModel(E) : CrvEll -> CrvEll, Map, Map
Given an elliptic curve E defined over Q, returns a global minimal model E' for E. By definition the minimal model E' is an integral model isomorphic to E over Q, such that the discriminant of E' has minimal p-adic valuation at all primes p. The isomorphism E -> E' is returned as the second value, followed by the inverse isomorphism E' -> E.
SimplifiedModel(E): CrvEll -> CrvEll, Map, Map
Returns a simplified model of the elliptic curve E. If E is defined over Q this is the same as MinimalModel. Otherwise, if the characteristic of the base ring is different from 2 and 3, the simplified model agrees with the WeierstrassModel. For characteristics 2 and 3 the situation is more complicated; see Ian Connell's "The Elliptic Curve Handbook" for the definition for curves defined over finite fields. The isomorphism E -> E' is returned as the second value, followed by the inverse isomorphism E' -> E.

Predicates on Curve Models

IsWeierstrassModel(E) : CrvEll -> BoolElt
Returns true if and only if E is in simplified Weierstrass form.
IsIntegralModel(E) : CrvEll -> BoolElt
Returns true if and only if E is an integral model.
IsMinimalModel(E) : CrvEll -> BoolElt
Returns true if and only if E is a minimal model.
IsSimplifiedModel(E) : CrvEll -> BoolElt
Returns true if and only if E is a simplified model.

Example CrvEll_Models (H85E3)

We define an elliptic curve over the rationals, find an integral model, a minimal model and an integral model for the short Weierstrass form.

> EE := EllipticCurve([1/2, 1/2, 1, 1/3, 4]);
> EE;
Elliptic Curve defined by y^2 + 1/2*x*y + y = x^3 + 1/2*x^2 +
1/3*x + 4 over Rational Field
> IE := IntegralModel(EE);
> IE;
Elliptic Curve defined by y^2 + 3*x*y + 216*y = x^3 + 18*x^2 +
432*x + 186624 over Rational Field
> ME, ma, mb := MinimalModel(IE);
> ME;
Elliptic Curve defined by y^2 + x*y + y = x^3 - x^2 + 619*x +
193645 over Rational Field
> ma;
Elliptic curve isomorphism from: CrvEll: IE to CrvEll: ME
Taking (x : y : 1) to (x + 7 : y + x + 104 : 1)
> mb;
Elliptic curve isomorphism from: CrvEll: ME to CrvEll: IE
Taking (x : y : 1) to (x - 7 : y - x - 97 : 1)
> WE := EllipticCurve(WeierstrassCoefficients(EE));
> WE;
Elliptic Curve defined by y^2 = x^3 + 9909/16*x + 6201603/32
over Rational Field
> IWE := IntegralModel(WE);
> IWE;
Elliptic Curve defined by y^2 = x^3 + 649396224*x +
208091266154496 over Rational Field
> IsIsomorphic(IWE, ME);
true

Twisting Elliptic Curves

QuadraticTwist(E, d) : CrvEll, RngElt -> CrvEll
Given an elliptic curve E and an element of the base ring, return the quadratic twist by d, in the form of a SimplifiedModel. In characteristic 2, the curve is isomorphic to E if and only if the trace of d is 0, otherwise the curve is isomorphic to E if and only if d is a square.
QuadraticTwist(E) : CrvEll -> CrvEll
Given an elliptic curve E over a finite field, return a quadratic twist, i.e. a nonisomorphic curve whose trace is the negation of Trace(E). The return value is given in the form of a SimplifiedModel.
QuadraticTwists(E) : CrvEll -> SeqEnum
Given an elliptic curve E over a finite field, return the sequence of nonisomorphic quadratic twists. Each curve is given in the form of a SimplifiedModel, and the first is isomorphic to E.
Twists(E) : CrvEll -> SeqEnum
Given an elliptic curve over a finite field K, return the sequence of all nonisomorphic elliptic curves over K which are isomorphic over an extension field. Each curve is given in the form of a SimplifiedModel, and the first is isomorphic to E.

Example CrvEll_Twists (H85E4)

> K := GF(13);
> E := EllipticCurve([K | 3, 1]);
> E5 := QuadraticTwist(E, 5);
> E5;
Elliptic Curve defined by y^2 = x^3 + 10*x + 8 over GF(13)
> S := QuadraticTwists(E);
> S;
[
    Elliptic Curve defined by y^2 = x^3 + 3*x + 1 over GF(13),
    Elliptic Curve defined by y^2 = x^3 + 12*x + 5 over GF(13)
]
> IsIsomorphic(S[1], E);
true
> IsIsomorphic(S[2], E5);
true

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