Given an elliptic curve E, this function returns a sequence consisting of the Weierstrass coefficients of E; this is the sequence [a1, a2, a3, a4, a6] such that E is defined by y2z + a1xyz + a3yz2=x3 + a2x2z + a4xz2 + a6z3. Note that this function returns the five coefficients even if E was defined by a sequence [a, b] of length two (the first three coefficients are zero in such a case).
This function returns a sequence of length 4 containing the b-invariants of the elliptic curve E, namely [b2, b4, b6, b8]. In terms of the coefficients of E these are defined byb_2 = a_1^2 + 4*a_2 b_4 = a_1*a_3 + 2*a_4 b_6 = a_3^2 + 4*a_6 b_8 = a_1^2*a_6 + 4*a_2*a_6 - a_1*a_3*a_4 + a_2*a_3^2 - a_4^2.
This function returns a sequence of length 2 containing the c-invariants of the elliptic curve E, namely [c4, c6]. In terms of the b-invariants of E these are defined byc_4 = b_2^2 - 24*b_4 c_6 = -b_2^3 + 36*b_2*b_4 - 216*b_6.
This function returns the discriminant d of the elliptic curve E. In terms of the b-invariants of E it is defined byd = -b_2^2*b_8 - 8*b_4^3 - 27*b_6^2 + 9*b_2*b_4*b_6and there is also the relationship 1728*d = c_4^3 - c_6^2.
Return the j-invariant of the elliptic curve E. In terms of the c-invariants and the discriminant of E it is defined by j = c_4^3 / d. Two elliptic curves defined over the same base field are isomorphic over some extension field exactly when their j-invariants are equal.
Returns polynomials x3 + a2 x2 + a4 x + a6 and a1 x + a3, formed from the invariants of the elliptic curve E.
> E := EllipticCurve([0, -1, 1, 1, 0]); > E; Elliptic Curve defined by y^2 + y = x^3 - x^2 + x over Rational Field > aInvariants(E); [ 0, -1, 1, 1, 0 ] > Discriminant(E); -131 > c4, c6 := Explode(cInvariants(E)); > jInvariant(E) eq c4^3 / Discriminant(E); true
> F<a1, a2, a3, a4, a6> := FunctionField(Rationals(), 5); > E := EllipticCurve([a1, a2, a3, a4, a6]); > E; Elliptic Curve defined by y^2 + a1*x*y + a3*y = x^3 + a2*x^2 + a4*x + a6 over F > aInvariants(E); [ a1, a2, a3, a4, a6 ] > bInvariants(E); [ a1^2 + 4*a2, a1*a3 + 2*a4, a3^2 + 4*a6, a1^2*a6 - a1*a3*a4 + a2*a3^2 + 4*a2*a6 - a4^2 ] > b2,b4,b6,b8 := Explode(bInvariants(E)); > cInvariants(E); [ a1^4 + 8*a1^2*a2 - 24*a1*a3 + 16*a2^2 - 48*a4, -a1^6 - 12*a1^4*a2 + 36*a1^3*a3 - 48*a1^2*a2^2 + 72*a1^2*a4 + 144*a1*a2*a3 - 64*a2^3 + 288*a2*a4 - 216*a3^2 - 864*a6 ] > c4,c6 := Explode(cInvariants(E)); > c4 eq b2^2 - 24*b4; true > c6 eq -b2^3 + 36*b2*b4 - 216*b6; true > d := Discriminant(E); > d; -a1^6*a6 + a1^5*a3*a4 - a1^4*a2*a3^2 - 12*a1^4*a2*a6 + a1^4*a4^2 + 8*a1^3*a2*a3*a4 + a1^3*a3^3 + 36*a1^3*a3*a6 - 8*a1^2*a2^2*a3^2 - 48*a1^2*a2^2*a6 + 8*a1^2*a2*a4^2 - 30*a1^2*a3^2*a4 + 72*a1^2*a4*a6 + 16*a1*a2^2*a3*a4 + 36*a1*a2*a3^3 + 144*a1*a2*a3*a6 - 96*a1*a3*a4^2 - 16*a2^3*a3^2 - 64*a2^3*a6 + 16*a2^2*a4^2 + 72*a2*a3^2*a4 + 288*a2*a4*a6 - 27*a3^4 - 216*a3^2*a6 - 64*a4^3 - 432*a6^2 > d eq -b2^2*b8 - 8*b4^3 - 27*b6^2 + 9*b2*b4*b6; true > 1728*d eq c4^3 - c6^2; truevskip-2pt
Returns the category of elliptic curves, CrvEll.
The base ring of the elliptic curve E; that is, the parent of its coefficients and the coefficient ring of the default point set of E.
Returns true if and only if the elliptic curves E and F are defined over the same ring and have the same coefficients.
The logical negation of eq.
Given two elliptic curves E and F this function returns true if there exists an isomorphism between E and F over the base field, and false otherwise. If E and F are isomorphic then the isomorphism is returned as a second value. This function requires being able to take roots in the base field.
Given two elliptic curves E and F defined over the rationals or a finite field, this function returns true if the curves E and F are isogenous over this field and false otherwise. In the rational case, if the curves are isogenous then the isogeny will be returned as the second value. For finite fields the isogeny computation operates via point counting and thus no isogeny is returned.
> K := GF(13); > E := EllipticCurve([K | 3, 1]); > E5 := QuadraticTwist(E, 5); > IsIsomorphic(E, E5); false > IsIsomorphic(BaseExtend(E, 2), BaseExtend(E5, 2)); trueSince they are isomorphic over an extension, their j-invariants must be the same.
> jInvariant(E) eq jInvariant(E5); true