9.1.1.1 mwrank_EllipticCurve Objects

class mwrank_EllipticCurve
The mwrank_EllipticCurve class represents an MWRANK elliptic curve.
mwrank_EllipticCurve( ainvs, [verbose=False])

Create the mwrank elliptic curve with invariants a_invs, which is a list of $ \leq 5$ integers $ a_1$, $ a_2$, $ a_3$, $ a_4$, and $ a_6$.

If strictly less than 5 invariants are given, then the first ones are set to 0, so, e.g., [3,4] means $ a_1=a_2=a_3=0$ and $ a_4=3$, $ a_6=4$.

INPUT:
    ainvs  --  a list of <= 5 integers
    verbose -- if True, then all Selmer group computations
               will be verbose. (default: False).

We create the elliptic curve $ y^2 + y = x^3 + x^2 - 2x$.

sage: e = mwrank_EllipticCurve([0, 1, 1, -2, 0])
sage: e.ainvs()
[0, 1, 1, -2, 0]

This example illustrates that omitted $ a$-invariants default to 0:

sage: e = mwrank_EllipticCurve([3, -4])
sage: e
y^2 = x^3 + 3*x - 4
sage: e.ainvs()
[0, 0, 0, 3, -4]

The entries of the input list are coerced to int. This has the effect that for float input, the integer parts of the input coefficients are taken.

sage: e = mwrank_EllipticCurve([3, -4.8]); e
y^2 = x^3 + 3*x - 4

When you enter a singular model you get an exception:

sage: e = mwrank_EllipticCurve([0, 0])
Traceback (most recent call last):
...
TypeError: not all arguments converted during string formatting

Instances of class mwrank_EllipticCurve have the following methods (in addition to inherited methods and special methods):

ainvs,$  $ certain,$  $ conductor,$  $ CPS_bound,$  $ gens,$  $ rank,$  $ regulator,$  $ saturate,$  $ selmer_rank_bound,$  $ set_verbose,$  $ silverman_bound,$  $ two_descent

These methods are defined as follows:

ainvs( )

certain( )

True if the last two_descent call provably correctly computed the rank. If two_descent hasn't been called, then it is first called by certain using the default parameters.

A $ 2$-descent does not determine $ E(\mathbf{Q})$ with certainty for the curve $ y^2 + y = x^3 - x^2 - 120x - 2183$.

sage: E = mwrank_EllipticCurve([0, -1, 1, -120, -2183])
sage: E.two_descent(False)
...
sage: E.certain()
False
sage: E.rank()   
0

The rank of $ E$is actually 0 (as one could see by computing the L-function), but $ {\mbox{{\fontencoding{OT2}\fontfamily{wncyr}\fontseries{m}\fontshape{n}\selectfont Sh}}}$ has order 4 and the $ 2$-torsion is trivial, so mwrank does not conclusively determine the rank.

sage: E.selmer_rank_bound()
2

conductor( )

Return the conductor of this curve, computed using Cremona's implementation of Tate's algorithm.

NOTE: This is independent of PARI's.

CPS_bound( )

Return the Cremona-Prickett-Siksek height bound. This is a floating point number $ B$ such that if $ P$ is a point on the curve, then the naive logarithmetic height of $ P$ is off from the canonical height by at most $ B$.

Note: We assume the model is minimal!

gens( )

Return a list of the generators for the Mordell-Weil group.

rank( )

Returns the rank of this curve, computed using 2-descent.

regulator( )

Return the regulator of the saturated Mordell-Weil group.

sage: E = mwrank_EllipticCurve([0, 0, 1, -1, 0])
sage: E.regulator()
0.05111140823996884

saturate( [bound=-1])

Compute the saturation of the Mordell-Weil group at all primes up to bound.

INPUT:
    bound -- int (default: -1)   -1 saturate at *all* primes,
                                  0 -- do not saturate
                                  n -- saturate at least at all
primes <= n.

selmer_rank_bound( )

Bound on the rank of the curve, computed using the 2-selmer group. This is the rank of the curve minus the rank of the 2-torsion, minus a number determined by whatever mwrank was able to determine related to $ {\mbox{{\fontencoding{OT2}\fontfamily{wncyr}\fontseries{m}\fontshape{n}\selectfont Sh}}}(E)[2]$ (e.g., using a second descent or if there is a rational $ 2$-torsion point, then there may be an isogeny to a curve with trivial $ {\mbox{{\fontencoding{OT2}\fontfamily{wncyr}\fontseries{m}\fontshape{n}\selectfont Sh}}}(E)$). In many cases, this is the actual rank of the curve, but in general it is just $ \geq$ the true rank.

The following is the curve 960D1, which has rank 0, but Sha of order 4.

sage: E = mwrank_EllipticCurve([0, -1, 0, -900, -10098])
sage: E.selmer_rank_bound()
0

In this case this was resolved using a second descent.

    sage: E = mwrank_EllipticCurve([0, -1, 0, -900, -10098])
    sage: E.two_descent(second_descent = False, verbose=False)
    sage: E.selmer_rank_bound()
    2
    
Above, the \method{selmer_rank_bound} gives 0 instead of 2,
because it knows Sha is nontrivial.  In contrast, for the
curve 571A, also with rank 0 and $\Sha$ of order 4, we obtain
a worse bound:

    sage: E = mwrank_EllipticCurve([0, -1, 1, -929, -10595])
    sage: E.selmer_rank_bound()
    2
    sage: E.rank()
    0

set_verbose( verbose)

Set the verbosity of printing of output by the 2-descent and other functions.

INPUT:
    verbosity -- bool; if True print lots of output

silverman_bound( )

Return the Silverman height bound. This is a number $ B$ such that if $ P$ is a point on the curve, then the naive logarithmetic height of $ P$ is off from the canonical height by at most $ B$.

Note: We assume the model is minimal!

two_descent( [verbose=True], [selmer_only=-1], [first_limit=5], [second_limit=20], [n_aux=False], [second_descent=True])

Compute 2-descent data for this curve.

INPUT:
    verbose     -- (default: True) print what mwrank is doing
    selmer_only -- (default: False) selmer_only switch
    first_limit -- (default: 20) firstlim is bound on |x|+|z|
    second_limit-- (default: 5)  secondlim is bound on log max
{|x|,|z| },
                                 i.e. logarithmic
    n_aux       -- (default: -1) n_aux only relevant for
general
                   2-descent when 2-torsion trivial; n_aux=-1
causes default
                   to be used (depends on method)
    second_descent -- (default: True) second_descent only
relevant for
                   descent via 2-isogeny
OUTPUT:
    Nothing -- nothing is returned

See About this document... for information on suggesting changes.