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
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.
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
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.
Return the normalized identity point (0:1:0) on the curve E.
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.
> 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];Note that the field of definition can also be changed with Lift.>> 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)