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
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.
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.
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.
> 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;Note that the field of definition can also be changed with Lift.
> // 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)