Magma

MAGMA Computational Algebra System

Magma
 •  How to get it
 •  Download
 •  Online Demo
 
Resources
 •  Online Help
 •  Discovering Mathematics with Magma
 •  Citations
 •  How to cite Magma
 •  Links
 •  Contact us
 
[Next][Prev] [Right] [Left] [Up] [Index] [Root]

Elliptic Curve Database

Magma includes John Cremona's database of all elliptic curves over Q of small conductor (up to 130 000 at V2.13 and above). This section defines the interface to that database.

For each conductor in the range stored in the database the curves with that conductor are stored in a number of isogeny classes. Each curve in an isogeny class is isogenous (but not isomorphic) to the other curves in that class. Isogeny classes are referred to by number rather than the alphabetic form given in the Cremona tables.

All of the stored curves are global minimal models.

EllipticCurveDatabase(: parameters) : -> DB
CremonaDatabase(: parameters) : -> DB
    BufferSize: RngIntElt               Default: 10000
This function returns a database object which contains information about the elliptic curve database and is used in the functions which access it. The optional parameter BufferSize controls the size of an internal buffer --- see the description of SetBufferSize for more information.
SetBufferSize(D, n) : DB, RngIntElt ->
The elliptic curve database D uses an internal buffer to cache disk reads; if the buffer is large enough then the entire file can be cached and will not need to be read from the disk more than once. On the other hand, if only a few curves will be accessed then a large buffer is not especially useful. SetBufferSize can be used to set the size n (in bytes) of this buffer. There are well defined useful minimum and maximum sizes for this buffer, and values outside this range will be treated as the nearest useful value.
LargestConductor(D) : DB -> RngIntElt
Returns the largest conductor of any elliptic curve stored in the database. It is an error to attempt to refer to larger conductors in the database.
ConductorRange(D) : DB -> RngIntElt, RngIntElt
Returns the smallest and largest conductors stored in the database. It is an error to attempt to refer to conductors outside of this range.
# D : DB -> RngIntElt
NumberOfCurves(D) : DB -> RngIntElt
Returns the number of elliptic curves stored in the database.
NumberOfCurves(D, N) : DB, RngIntElt -> RngIntElt
Returns the number of elliptic curves stored in the database for conductor N.
NumberOfCurves(D, N, i) : DB, RngIntElt, RngIntElt -> RngIntElt
Returns the number of elliptic curves stored in the database in the i-th isogeny class for conductor N.
NumberOfIsogenyClasses(D, N) : DB, RngIntElt -> RngIntElt
Returns the number of isogeny classes stored in the database for conductor N.
EllipticCurve(D, N, I, J): DB, RngIntElt, RngIntElt, RngIntElt -> CrvEll
EllipticCurve(D, N, S, J): DB, RngIntElt, MonStgElt, RngIntElt -> CrvEll
Returns the J-th elliptic curve of the I-th isogeny class of conductor N from the database. I may be specified either as an integer (first form) or as a label like "A" (second form).
EllipticCurve(D, S): DB, MonStgElt -> CrvEll
EllipticCurve(S): MonStgElt -> CrvEll
Returns a representative elliptic curve with label S (e.g., "101a" or "101a1") from the specified database (or if not specified, from the Cremona database).
Random(D) : DB -> CrvEll
Returns a random curve from the database.
CremonaReference(D, E) : CrvEll -> MonStgElt
CremonaReference(E) : CrvEll -> MonStgElt
Returns the database reference to the minimal model for E (e.g., "101a1"). E must be defined over Q and its conductor must lie within the range of the database. The second form of this function must open the database for each call, so if it is being used many times the database should be created once and the first form used instead.

Example CrvEll_ecdb1 (H112E49)

> D := CremonaDatabase();
> #D;
847550
> minC, maxC := ConductorRange(D);
> minC, maxC;
1 130000
> &+[ NumberOfCurves(D, C) : C in [ minC .. maxC ] ];
847550
These numbers agree (which is nice). The conductor in that range with the most curves is 100800.

> S := [ NumberOfCurves(D, C) : C in [ minC .. maxC ] ];
> cond := maxval + minC - 1 where _,maxval := Max(S);
> cond;
100800
> NumberOfCurves(D, cond);
924
> NumberOfIsogenyClasses(D, cond);
418
The unique curve of conductor 5077 has rank 3.

> NumberOfCurves(D, 5077);
1
> E := EllipticCurve(D, 5077, 1, 1);
> E;
Elliptic Curve defined by y^2 + y = x^3 - 7*x + 6 over Rational Field
> CremonaReference(D, E);
5077a1
> Rank(E);
3

EllipticCurves(D, N, I) : DB, RngIntElt, RngIntElt -> [ CrvEll ]
EllipticCurves(D, N, S) : DB, RngIntElt, MonStgElt -> [ CrvEll ]
Returns the sequence of elliptic curves in the I-th isogeny class for conductor N from the database. I may be specified either as an integer (first form) or as a label like "A" (second form).
EllipticCurves(D, N) : DB, RngIntElt -> [ CrvEll ]
The sequence of elliptic curves for conductor N from the database.
EllipticCurves(D, S) : DB, MonStgElt -> [ CrvEll ]
The sequence of elliptic curves with label S from the database. S may specify just a conductor (like "101"), or both a conductor and an isogeny class (like "101A").
EllipticCurves(D) : DB -> [ CrvEll ]
The sequence of elliptic curves stored in the database. Note: this function is extremely slow due to the number of curves involved. Where possible it would be much better to iterate through the database instead (see example).

Example CrvEll_ecdb2 (H112E50)

Here are two ways to iterate through the database:

> D := CremonaDatabase();
25508696848625044861003843159331265666415824
Time: 21.130
> sum := 0;
> time for E in D do sum +:= Discriminant(E); end for;
> sum;
25508696848625044861003843159331265666415824
Time: 20.060
Now we create a random curve and find the other curves in its isogeny class.

> E := Random(D);
> E;
Elliptic Curve defined by y^2 = x^3 - 225*x over Rational Field
> Conductor(E);
7200
> CremonaReference(E);
7200bg1
> EllipticCurves(D, "7200bg");
[
    Elliptic Curve defined by y^2 = x^3 - 225*x over Rational Field,
    Elliptic Curve defined by y^2 = x^3 - 2475*x - 47250 over Rational Field,
    Elliptic Curve defined by y^2 = x^3 - 2475*x + 47250 over Rational Field,
    Elliptic Curve defined by y^2 = x^3 + 900*x over Rational Field
]

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

Version: V2.16 of Mon Nov 16 15:04:45 EST 2009

Valid HTML 4.01! Valid CSS!