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

Structure Operations

Except in the case for curves over the rationals, only a very limited number of structural operations are currently available. Note that some operations for curves over Q require the curve to have integral coefficients; the function IntegralModel can be used to find such a model for arbitrary curves over Q.

Subsections

Related Structures

CoefficientRing(E) : CurveEll -> Rng
The ring over which E was defined, that is, the parent of its coefficients.
FunctionField(E) : CurveEll -> FldFun
The function field of the elliptic curve E : y^2 = f(x) over a ring R, constructed as the field of fractions of the co-ordinate ring R[x, y] / (y^2 - f(x)). If R is a field, then the function field of E is canonically isomorphic to the field of rational functions E -> P^1, where P^1 is the 1-dimensional projective space over R.


Example Elcu_FunctionField (H53E2)

The following example shows how to construct the function field of an elliptic curve "by hand". Note that the square of the polynomial representing the two-torsion is univariate; its roots give the x-coordinates of the rational points of order 2 on the curve.

> E := EllipticCurve([RationalField() | 1, -2, 3, -4, 5]);
> a1, a2, a3, a4, a6 := Explode(aInvariants(E));
> R := BaseRing(E);
> Px<x> := FunctionField(R);     // The rational function field over R
> Py<Y> := PolynomialRing(Px);
> F<y> := quo<Py | Y^2 + (a1*x + a3)*Y - (x^3 + a2*x^2 + a4*x + a6)>;
> two_torsion := 2*y + a1*x + a3;
> two_torsion;
2*y + x + 3
> two_torsion^2;
4*x^3 - 7*x^2 - 10*x + 29

Change Ground Ring

Lift(E, K, h) : CurveEll, Rng, Map -> CurveEll
Lift(E, K) : CurveEll, Rng -> CurveEll
Given an elliptic curve E defined over a field F together with a surjective map h:K -> F, return an elliptic E' defined over K obtained by pulling back the coefficients of E through h. Note that the resulting curve is not unique.
BaseExtend(E, K, h) : CurveEll, Rng, Map -> CurveEll
BaseExtend(E, K) : CurveEll, Rng -> CurveEll
Given an elliptic curve E defined over a field F together with a map h:F -> K, return an elliptic E' defined over K by applying h to the coefficients of E. If the map h is not defined the coefficients will be coerced into K using the standard map; an error occurs if this fails.

Example Elcu_BaseExtend (H53E3)

BaseExtend is the new name for the function previously known as Lift. The old name is kept for backwards compatibility. The function ChangeRing does the same thing; it's included for continuity with the rest of the system.

> FF1<w1> := GF(23);
> FF2<w2> := GF(23,2);
> f := hom<FF2 -> FF1 | w1 >;
> E1 := EllipticCurve([FF1 | 1,1]);
> E2 := EllipticCurve([FF2 | 1,1]);
> assert E1 eq BaseExtend(E2, FF1);
> assert E1 eq BaseExtend(E2, f);
> assert E2 eq Lift(E1, FF2);
> assert E2 eq ChangeRing(E1, FF2);

Alternative Models

Weierstrass(E) : CurveEll -> [ Rng ]
Given an elliptic curve E defined over a field K, this function return a sequence [a, b] of two elements of K defining a short Weierstrass model for a curve E' isomorphic to E.
IntegralModel(E) : CurveEll -> CurveEll, Map
Given an elliptic curve E defined over the rational field Q, this function returns an isomorphic curve I defined over Q but with integral coefficients; the second return value is the map E -> I.
MinimalModel(E) : CurveEll -> CurveEll, Map, Map
Given an elliptic curve E defined over Q, determine a global minimal model for E; that is, an elliptic curve E' in Weierstrass form isomorphic to E, with integer coefficients, and such that the discriminant of E' has minimal p-adic valuation at every prime p.

The function returns three values: the elliptic curve E', and isomorphisms E -> E' and E' -> E.


Example Elcu_Models (H53E4)

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;
Mapping from: CurveEll: IE to CurveEll: ME
Taking (x, y, 1) to (x + 7, y + x + 104, 1)
> mb;
Mapping from: CurveEll: ME to CurveEll: IE
Taking (x, y, 1) to (x - 7, y - x - 97, 1)
> WE := EllipticCurve(Weierstrass(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 Mapping from: CurveEll: IWE to CurveEll: ME
Taking (x, y, 1) to (1/1024*x + 1/4, 1/32768*y - 1/2048*x - 5/8, 1)

SimplifiedModel(E): CurveEll -> CurveEll, Map, Map
Given an elliptic curve E defined over a finite field, returns a simplified model E' for E, together with isomorphisms E -> E' and E' -> E. See Ian Connell's "The Elliptic Curve Handbook" for the definition of a simplified model.

Invariants

aInvariants(E) : CurveEll -> [ RngElt ]
Coefficients(E) : CurveEll -> [ RngElt ]
ElementToSequence(E) : CurveEll -> [ RngElt ]
Eltseq(E) : CurveEll -> [ RngElt ]
Given an elliptic curve E, this function returns a sequence consisting of the Weierstrass coefficients of E; this is the sequence [a_1, a_2, a_3, a_4, a_6] such that E is defined by y^2z + a_1xyz + a_3yz^2=x^3 + a_2x^2z + a_4xz^2 + a_6z^3. Note that even if E was defined from a sequence [a, b] of length 2, this function returns the 5 coefficients (the first 3 being zero in that case).
bInvariants(E) : CurveEll -> [ RngElt ]
This function returns a sequence of length 4 containing the b-invariants of the elliptic curve E, namely [b_2, b_4, b_6, b_8]. In terms of the coefficients a_1, a_2, a_3, a_4, a_6 these invariants are defined by
b_2 = a_1^2 + 4a_2
b_4 = a_1a_3 + 2a_4
b_6 = a_3^2 + 4a_6
b_8 = a_1^2a_6 + 4a_2a_6 - a_1a_3a_4 + a_2a_3^2 - a_4^2.
The common parent of these elements will be the field over which E is defined.
cInvariants(E) : CurveEll -> [ RngElt ]
This function returns a sequence of length 2 containing the c-invariants of the elliptic curve E, namely [c_4, c_6]. In terms of the b-invariants b_2, b_4, b_6, b_8 these invariants are defined by
c_4 = b_2^2 - 24b_4
c_6 = -b_2^3 + 36b_2b_4 - 216b_6.
Discriminant(E) : CurveEll -> RngElt
Return the discriminant of the elliptic curve E, which equals -b_2^2b_8 - 8b_4^3 - 27b_6^2 + 9b_2b_4b_6, in terms of the b-invariants of the curve. The discriminant will be an element of the field of definition of E.
jInvariant(E) : CurveEll -> RngElt
Returns the j-invariant of the elliptic curve E, which equals c_4^3/Delta, in terms of the c-invariants and the discriminant of the curve.
DivisionPolynomial(K, n) : Fld, RngIntElt -> RngMPolElt
Returns the nth division polynomial.
TwoTorsionPolynomial(E) : CurveEll -> RngMPolElt, RngUPolElt
Returns: (i) a multivariate polynomial in x and y defining the two-torsion subscheme of E; (ii) a univariate polynomial equal to the square of the first value in the function field; this can be used to define a subgroup representing the two-torsion points of E.

Example Elcu_DivisionPolynomial (H53E5)

Let E be an elliptic curve over a finite field K. The following code fragment illustrates the relationship between the roots in K of the n'th division polynomial for E, and the x-coordinates of the points of n-torsion on E.

> K := GF(101);
> E := EllipticCurve([ K | 1, 1]);
> D5 := DivisionPolynomial(E, 5);
> Roots(D5);
[ <86, 1>, <46, 1> ]
> [ p : p in RationalPoints(E) | 5*p eq E!0 ];
[ (0, 1, 0), (86, 67, 1), (46, 25, 1), (86, 34, 1), (46, 76, 1) ]

Special Invariants for Rational Curves

The functions in this subsection are only defined for elliptic curves over Q. Some of them require the curve to have integral coefficients.

Conductor(E) : CurveEll -> RngIntElt
The conductor of the elliptic curve E defined over Q.
Regulator(E) : CurveEll -> FldPrElt
Given an elliptic curve E defined over Q, this function returns the regulator of E (as a real number). Note that the computation of the Mordell-Weil group for E is triggered by this function.
MordellWeilRank(E) : CurveEll -> RngIntElt
Rank(E) : CurveEll -> RngIntElt
Given an elliptic curve E defined over Q, this returns the rank of the Mordell-Weil group of E.
MordellWeilRankBounds(E) : CurveEll -> RngIntElt, RngIntElt
RankBounds(E) : CurveEll -> RngIntElt, RngIntElt
Given an elliptic curve E defined over Q, this returns the lower and upper bounds on the rank of the Mordell-Weil group of E.
SilvermanBound(E) : CurveEll -> FldPrElt
Given an elliptic curve E defined over Q with integral coefficients, this returns the Silverman bound of E.
BadPrimes(E) : CurveEll -> [ RngIntElt ]
Given an elliptic curve E defined over Q, return the sequence of primes dividing the minimal discriminant of E. These are the primes at which the minimal model for E has bad reduction; note that there may be other primes dividing the discriminant for the given model of E.
TamagawaNumber(E, p) : CurveEll -> RngIntElt
Given an elliptic curve E, defined over Q and a prime number p, this function returns the local Tamagawa number of E at p, which is the index in E[Q_p] of the subgroup E^0[Q_p] consisting of points with non-singular reduction modulo p. For any integer p that is not a bad prime for E, this function returns simply 1.
TamagawaNumbers(E) : CurveEll -> [ RngIntElt ]
Given an elliptic curve E defined over Q, this function returns the sequence of Tamagawa numbers at each of the bad primes of E, as defined above.
LocalInformation(E, p) : CurveEll, RgIntElt -> < RngIntElt, RngIntElt, RngIntElt, RngIntElt, KodSym>
Given an elliptic curve E defined over Q and a prime number p, this function returns the local information at the prime p as a 5-tuple, consisting of p, its multiplicity in the discriminant, its multiplicity in the conductor, the Tamagawa number at p and the Kodaira symbol.
LocalInformation(E) : CurveEll, RgIntElt -> [ Tup ]RngIntElt, KodSym>
Given an elliptic curve E this function returns a sequence of tuples, each of which contains the local information at a bad prime. The tuples consist of a bad prime p, its multiplicity in the discriminant, its multiplicity in the conductor, the Tamagawa number at p and the Kodaira symbol.
ZetaFunction(E, p, q) : CurveEll, RngIntElt, RngPowElt -> RngPow
Returns the zeta function for E at the prime p in the indeterminate q.
LSeries(E) : CurveEll -> RngPow
The L-series of E.

Example Elcu_Invariants (H53E6)

The following example illustrates the construction of the zeta function of an elliptic curve at a prime p:

> E := EllipticCurve([1, 1]);
> p := 5;
> Q<q> := PowerSeriesRing(Rationals());
> Ep := Lift(E, GF(p));
> t := Trace(Ep);
> Z1 := (1 - t*q + p*q^2)/((1- q)*(1 - p*q));
> Z2 := Log(Z1);
> Z := q*Derivative(Z2);
> Z;
9*q + 27*q^2 + 108*q^3 + 675*q^4 + 3069*q^5 + 15552*q^6 + 78633*q^7 + 389475*q^8
    + 1954044*q^9 + 9768627*q^10 + 48814533*q^11 + 244166400*q^12 + 
    1220693769*q^13 + 6103414827*q^14 + 30517927308*q^15 + 152587347075*q^16 + 
    762939337869*q^17 + 3814700329152*q^18 + 19073477713833*q^19 + O(q^20)

Mordell-Weil group

The Mordell-Weil group of an elliptic curve over the rationals is the finitely generated group of points with rational coordinates. As is customary in cases of this kind, the functions return an abstract group together with a map from that group to (the points on) the curve.

MordellWeilGroup(E) : CurveEll -> GrpAb, Map
Compute the Mordell-Weil group of an elliptic curve E defined over Q. The function returns two values: an abelian group A and a map m from A to E. The map m provides an isomorphism between the abstract group A and the Mordell-Weil group.
TorsionSubgroup(E) : CurveEll -> GrpAb, Map
Given an elliptic curve E defined over Q, this function returns an abelian group A isomorphic to the finite part of the Mordell-Weil group, as well as a map from the abstract group A to the elliptic curve providing the isomorphism. The generators are given in order of non-decreasing order.
Generators(E) : CurveEll -> [ CurveEllPt ]
Given an elliptic curve E defined over Q, this function returns generators for the Mordell-Weil group of E, in the form of a sequence of points of E. The i-th element of the sequence corresponds to the i-th generator of the group as returned by the function Mordell-Weil.

Example Elcu_MordellWeil (H53E7)

> E := EllipticCurve([73, 0]);
> E;
Elliptic Curve defined by y^2 = x^3 + 73*x over Rational Field
> M, mp := MordellWeilGroup(E);
> M;
Abelian Group isomorphic to Z/2 + Z + Z
Defined on 3 generators
Relations:
    2*M.1 = 0
> P0 := mp(M.1);
> P1 := mp(M.2);
> P2 := mp(M.3);
> P0, P1, P2;
(0, 0, 1) (36, 222, 1) (657/4, 16863/8, 1)
> Order(P0);
2
> Factorization(Integers() ! Discriminant(E));
[ <2, 6>, <73, 3> ]
> BadPrimes(E);
[ 2, 73 ]
> LocalInformation(E);
[ <2, 6, 6, 1, II>, <73, 3, 2, 2, III> ]

Example Elcu_IsomorphismClasses (H53E8)

The following code fragment computes a sequence I containing one member of each equivalence class of isomorphic elliptic curves over GF(5).

FF := GF(5);
I := [ EllipticCurve([ FF | 0, 1]) ];
for a in FF do 
    for b in FF do
	parameters := [FF | a, b];
	if not IsEllipticCurve(parameters) then continue; end if;
	G := EllipticCurve([ FF | a, b]);
	match := false;
	for E in I do
	    if IsIsomorphicFF(E,  G) then
	        match := true;
		break;
	    end if;
	end for;
	if not match then
	    Append( I, G);
	end if;
    end for;
end for;

Predicates and Boolean Operators

E eq F : CurveEll, CurveEll -> BoolElt
True if and only if E and F are identical; that is, they are defined over the same ring R and have the same coefficients.
IsIsomorphic(E, F) : CurveEll, CurveEll -> BoolElt, Map
Given two elliptic curves E and F defined over Q (respectively, a finite field F_q), this function returns true if an isomorphism phi between E and F over Q (resp F_q) exists, and false otherwise. If E and F are isomorphic, phi is returned as a second value.
IsIsogenous(E, F) : CurveEll, CurveEll -> BoolElt
Given two elliptic curves E and F defined over a finite field F_q, this function returns true if a non-trivial isogeny phi between E and F over F_q exists, and false otherwise.
IsSimplifiedModel(E) : CurveEll -> BoolElt
Returns true iff E is a simplified model for the abstract elliptic curve.
[Next] [Prev] [Right] [Left] [Up] [Index] [Root]