Package sage :: Package ellcurve :: Module ellcurve :: Class EllipticCurve_Q
[show private | hide private]
[frames | no frames]

Type EllipticCurve_Q

       object --+        
                |        
    EllipticCurve --+    
                    |    
EllipticCurve_generic --+
                        |
                       EllipticCurve_Q


Elliptic curve over the Rational Field.
Method Summary
  __init__(self, ainvs, extra)
  an(self, n)
The n-th Fourier coefficient of the modular form corresponding to this elliptic curve, where n is a positive integer.
  analytic_rank(self)
  anlist(self, n)
The Fourier coefficients up to and including a_n of the modular form attached to this elliptic curve.
  ap(self, p)
The p-th Fourier coefficient of the modular form corresponding to this elliptic curve, where p is prime.
  complex_area(self)
Return the area of a fundamental domain for the period lattice of the elliptic curve.
  conductor(self)
Returns the conductor of the elliptic curve.
  cremona_label(self, space)
  database_curve(self)
Return the curve in the elliptic curve database isomorphic to this curve, if possible.
  eval_modular_form(self, points, prec)
  formal_group(self, prec)
  formal_inverse(self, prec)
  formal_log(self, prec)
  formal_mult(self, n, prec)
  formal_n_isogeny(self, n, prec)
  formal_w(self, prec)
Return the formal power series w(t) = t^3 + ...
  formal_x(self, prec)
Return the formal power series x(t) in terms of the local parameter t = -x/y at infinity.
  formal_y(self, prec)
Return the formal power series y(t) in terms of the local parameter t = -x/y at infinity.
  gens(self)
  has_cm(self)
  heegner_discriminants(self, bound)
  is_semistable(self)
  is_surjective(self, p, A)
Return True if the mod-p representation attached to E is surjective, False if it is not, or None if we were unable to determine whether it is or not.
  isogeny_class(self)
Return all curves in the isogeny class of this elliptic curve.
  kodaira_type(self, p)
Local Kodaira type of the elliptic curve at p.
  L1_vanishes(self)
Returns whether or not L(E,1) = 0.
  L_ratio(self)
Returns the ratio L(E,1)/Omega as an exact rational number.
  Lambda(self, s, prec)
Returns the value of the Lambda-series of the elliptic curve E at s can be any complex number.
  Lseries(self, s)
Returns the value of the L-series of the elliptic curve E at s, where s must be a real number.
  Lseries_at1(self, k)
Compute L(E,1) using k terms of the series for L(E,1) form page 406 of Henri Cohen's book "A Course in Computational Algebraic Number Theory".
  Lseries_deriv_at1(self, k)
Compute L'(E,1) using k terms of the series for L'(E,1) form page 406 of Henri Cohen's book"A Course in Computational Algebraic Number Theory".
  Lseries_extended(self, s, prec)
Returns the value of the L-series of the elliptic curve E at s can be any complex number using prec terms of the power series expansion.
  minimal_model(self)
  modular_degree(self)
Return the modular degree of this elliptic curve.
  modular_parametrization(self)
Computes and returns ...
  mwrank_curve(self)
  newform(self)
Returns the newform attached to this elliptic curve.
  non_surjective(self, A)
Returns a list of primes p such that the mod-p representation rho_{E,p} *might* not be surjective (this list usually contains 2, because of shortcomings of the algorithm).
  Np(self, p)
The number of points on E modulo p, where p is a prime of good reduction.
  omega(self)
Returns the real period.
  padic_sigma(self, p, prec)
Returns the p-adic sigma function of the elliptic curve as a power series in t to precision prec.
  pari_curve(self)
Return the PARI curve corresponding to this elliptic curve.
  pari_mincurve(self)
Return the PARI curve corresponding to a minimal model for this elliptic curve.
  period_lattice(self)
Return a basis for the period lattice of the elliptic curve over Q as a 2-tuple.
  quadratic_twist(self, D)
  rank(self, use_database)
  real_components(self)
Returns 1 if there is 1 real component and 2 if there are 2.
  regulator(self, use_database)
Returns the regulator of this curve, which must be defined over Q.
  root_number(self)
Returns the root number of this elliptic curve.
  satisfies_heegner_hypothesis(self, D)
Returns True precisely when D is a fundamental discriminant that satisfies the Heegner hypothesis for this elliptic curve.
  sha_an(self, use_database)
Returns the Birch and Swinnerton-Dyer conjectural order of Sha, unless the analytic rank is > 1, in which case this function returns 0.
  shabound(self)
Compute a provably correct bound on the order of the Shafarevich-Tate group of this curve.
  shabound_kato(self)
Returns a list p of primes such tha theorems of Kato's and others (e.g., as explained in a paper/thesis of Grigor Grigorov) imply that if p divides #Sha(E) then p is in the list.
  shabound_kolyvagin(self, D, regulator, ignore_nonsurj_hypothesis)
Given a fundamental discriminant D (=-3,-4) that satisfies the Heegner hypothesis, return a list of primes so that Kolyvagin's theorem (as in Gross's paper) implies that any prime divisor of #Sha is in this list.
  sigma(self, z, flag)
Returns the value of the Weierstrass sigma function of the lattice associated to this elliptic curve E.
  tamagawa_number(self, p)
The Tamagawa number of the elliptic curve at p.
  tamagawa_product(self)
Returns the product of the Tamagawa numbers.
  torsion_order(self)
Return the order of the torsion subgroup.
  torsion_subgroup(self, flag)
Returns the torsion subgroup of this elliptic curve.
  two_selmer_rank(self)
  two_selmer_shabound(self)
Returns a bound on the dimension of Sha(E)[2], computed using a 2-descent.
  two_torsion_rank(self)
    Inherited from EllipticCurve_generic
  __call__(self, x, y)
Create a point on the elliptic curve, if possible.
  __contains__(self, P)
Returns True if and only if P defines is a point on the elliptic curve.
  __getitem__(self, n)
  __repr__(self)
String representation of elliptic curve.
  a1(self)
EXAMPLES:
  a2(self)
EXAMPLES:
  a3(self)
EXAMPLES:
  a4(self)
EXAMPLES:
  a6(self)
EXAMPLES:
  a_invariants(self)
The a-invariants of this elliptic curve.
  ainvs(self)
The a-invariants of this elliptic curve.
  b_invariants(self)
The b-invariants of this elliptic curve.
  base_field(self)
Returns the base ring of the elliptic curves.
  base_ring(self)
Returns the base ring of the elliptic curves.
  c_invariants(self)
The c-invariants of this elliptic curve.
  discriminant(self)
Returns the discriminant of this elliptic curve.
  division_polynomial(self, n, i)
Returns the n-th torsion polynomial (a.k.a., division polynomial).
  j_invariant(self)
Returns the j-invariant of this elliptic curve.
  torsion_polynomial(self, n, i)
Returns the n-th torsion polynomial (a.k.a., division polynomial).
  weierstrass_model(self)
    Inherited from EllipticCurve
  __new__(cls, *args, **kwds)
(Static method)
    Inherited from object
  __delattr__(...)
x.__delattr__('name') <==> del x.name
  __getattribute__(...)
x.__getattribute__('name') <==> x.name
  __hash__(x)
x.__hash__() <==> hash(x)
  __reduce__(...)
helper for pickle
  __reduce_ex__(...)
helper for pickle
  __setattr__(...)
x.__setattr__('name', value) <==> x.name = value
  __str__(x)
x.__str__() <==> str(x)

Instance Method Details

an(self, n)

The n-th Fourier coefficient of the modular form corresponding to this elliptic curve, where n is a positive integer.

anlist(self, n)

The Fourier coefficients up to and including a_n of the modular form attached to this elliptic curve. The ith element of the return list is a[i].

EXAMPLES:
>>> E = EllipticCurve([0, -1, 1, -10, -20])
>>> E.anlist(3)
[0, 1, -2, -1]
>>> E = EllipticCurve([0,1])
>>> E.anlist(20)
[0, 1, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 8, 0]

ap(self, p)

The p-th Fourier coefficient of the modular form corresponding to this elliptic curve, where p is prime.

complex_area(self)

Return the area of a fundamental domain for the period lattice of the elliptic curve.

conductor(self)

Returns the conductor of the elliptic curve.

EXAMPLE:
>>> E = EllipticCurve([1, -1, 1, -29372, -1932937])
>>> E.conductor()    # known bug in PARI causes this to output 14377604814
3006

database_curve(self)

Return the curve in the elliptic curve database isomorphic to
this curve, if possible.  Otherwise raise a RuntimeError
exception.  

EXAMPLES:
We assume the elliptic curve database is installed.
    >> E = EllipticCurve([1,2,3,4,5])
    >> E.database_curve()
    10351A1: invs=[1, -1, 0, 4, 3], rank=1, tors=1, cp={11: 1, 941: 1}

We can also create an elliptic curve from a curve in the database:
    >> EllipticCurve(E.database_curve())
    Elliptic Curve defined by y^2 + x*y  = x^3 - x^2 + 4*x + 3 over Rational Field

The database curve can come directly from the database.
    >> import sage.tables.elliptic_curves as T
    >> db = T.Database()
    >> f = db[37][0][0]
    >> f
    37A1: invs=[0, 0, 1, -1, 0], rank=1, tors=1, cp={37: 1}
    >> EllipticCurve(f)
    Elliptic Curve defined by y^2 + y = x^3 - x  over Rational Field

NOTES:

    1. The model of the curve in the database can be different
       than the Weierstrass model for this curve, since database
       models are always minimal. 
       
    2. The curve C returned from the database is not of type
       sage.ellcurve.EllipticCurve; it has a few data members,
       and very few methods.

formal_w(self, prec=20)

Return the formal power series

             w(t) = t^3 + ...

to precision O(t^prec) of Proposition IV.1.1 of [Silverman
AEC1].  This is the formal expansion of w = -1/y about the
formal parameter t = -x/y at infinity.

We compute w using the recursive procedure (4.1) on page 18
of Bluher's `A leisurely introduction to formal groups and
elliptic curves', which I downloaded from

    http://www.math.uiuc.edu/Algebraic-Number-Theory/0076/

formal_x(self, prec=20)

Return the formal power series x(t) in terms of the local parameter t = -x/y at infinity.

formal_y(self, prec=20)

Return the formal power series y(t) in terms of the local parameter t = -x/y at infinity.

is_surjective(self, p, A=1000)

Return True if the mod-p representation attached to E
is surjective, False if it is not, or None if we were
unable to determine whether it is or not.  

INPUT:
    p -- int (a prime number)
    A -- int (a bound on the number of a_p to use)

OUTPUT:
    a 2-tuple:
    -- surjective or (probably) not
    -- information about what it is if not surjective

EXAMPLES:

REMARKS:

    1.  If p >= 5 then the mod-p representation is surjective
        if and only if the p-adic representation is
        surjective.  When p = 2, 3 there are counterexamples.
        See a very recent paper of Elkies for more details
        when p=3.

    2.  When p <= 3 this function always gives the correct
        result irregardless of A, since it explicitly
        determines the p-division polynomial.

isogeny_class(self)

Return all curves in the isogeny class of this elliptic curve.

NOTE: Currently implemented only using the database.

kodaira_type(self, p)

Local Kodaira type of the elliptic curve at p.

1 means good reduction (type I_0), 2, 3 and 4 mean types II, III and IV, respectively, 4 + nu with nu > 0 means type I_{nu}; finally the opposite values -1, -2, etc. refer to the starred types I_0^*, II^*, etc.

L1_vanishes(self)

Returns whether or not L(E,1) = 0. The result is provably correct if the Manin constant of the associated optimal quotient is <= 2. This hypothesis on the Manin constant is true for all curves of conductor <= 40000 (by Cremona) and all semistable curves (i.e., squarefree conductor).

EXAMPLES:
>>> E = EllipticCurve([0, -1, 1, -10, -20])   # 11A  = X_0(11)
>>> E.L1_vanishes()
False

>>> E = EllipticCurve([0, -1, 1, 0, 0])       # X_1(11)
>>> E.L1_vanishes()
False

>>> E = EllipticCurve([0, 0, 1, -1, 0])       # 37A  (rank 1)
>>> E.L1_vanishes()
True

>>> E = EllipticCurve([0, 1, 1, -2, 0])       # 389A (rank 2)
>>> E.L1_vanishes()
True

>>> E = EllipticCurve([0, 0, 1, -38, 90])     # 361A (CM curve))
>>> E.L1_vanishes()
True

>>> E = EllipticCurve([0,-1,1,-2,-1])         # 141C (13-isogeny)
>>> E.L1_vanishes()
False

WARNING: It's conceivable that machine floats are not large enough precision for the computation; if this could be the case a RuntimeError is raised. The curve's real period would have to be very small for this to occur.

ALGORITHM: Compute the root number. If it is -1 then L(E,s) vanishes to odd order at 1, hence vanishes. If it is +1, use a result about modular symbols and Mazur's "Rational Isogenies" paper to determine a provably correct bound (assuming Manin constant is <= 2) so that we can determine whether L(E,1) = 0.

AUTHOR: William Stein, 2005-04-20.

L_ratio(self)

Returns the ratio L(E,1)/Omega as an exact rational number. The result is *provably* correct if the Manin constant of the associated optimal quotient is <= 2. This hypothesis on the Manin constant is true for all curves of conductor <= 40000 (by Cremona) and all semistable curves (i.e., squarefree conductor).

EXAMPLES:
>>> E = EllipticCurve([0, -1, 1, -10, -20])   # 11A  = X_0(11)
>>> E.L_ratio()
1/5

>>> E = EllipticCurve([0, -1, 1, 0, 0])       # X_1(11)
>>> E.L_ratio()
1/25

>>> E = EllipticCurve([0, 0, 1, -1, 0])       # 37A  (rank 1)
>>> E.L_ratio()
0

>>> E = EllipticCurve([0, 1, 1, -2, 0])       # 389A (rank 2)
>>> E.L_ratio()
0

>>> E = EllipticCurve([0, 0, 1, -38, 90])     # 361A (CM curve))
>>> E.L_ratio()
0

>>> E = EllipticCurve([0,-1,1,-2,-1])         # 141C (13-isogeny)
>>> E.L_ratio()
1

WARNING: It's conceivable that machine floats are not large enough precision for the computation; if this could be the case a RuntimeError is raised. The curve's real period would have to be very small for this to occur. This does not occur for any optimal curve of conductor <= 40000.

ALGORITHM: Compute the root number. If it is -1 then L(E,s) vanishes to odd order at 1, hence vanishes. If it is +1, use a result about modular symbols and Mazur's "Rational Isogenies" paper to determine a provably correct bound (assuming Manin constant is <= 2) so that we can determine whether L(E,1) = 0.

AUTHOR: William Stein, 2005-04-20.

Lambda(self, s, prec)

Returns the value of the Lambda-series of the elliptic curve E at s can be any complex number. Use Lambda(s) if s is real, since it will be much faster.

WARNING: This function uses sage.functions.transcendental.gamma_inc, which currently calls mathematica.

EXAMPLES:

Lseries(self, s)

Returns the value of the L-series of the elliptic curve E at s, where s
must be a real number.  

NOTES:
(1) If the conductor of the curve is large, say > 10^12, then this function
will take a long time, since it uses an O(sqrt(N)) algorithm.

(2) There is an algorithm to compute L(E,s) for any complex s, but it involves
computing the incomplete Gamma function, which is not implemented in SAGE.

EXAMPLES:
    >>> E = EllipticCurve([1,2,3,4,5])
    
    >> E.Lseries(1)
    0.E-19

    The following may have low order bits that are different
    on your machine.
    >> E.Lseries(1.1)    
    0.28549100767814812844289234320

Lseries_at1(self, k=0)

Compute L(E,1) using k terms of the series for L(E,1) form
page 406 of Henri Cohen's book "A Course in Computational
Algebraic Number Theory".  If the k argument is not specified,
then it defaults to sqrt(N), where N is the conductor.

The real precision of the computation is the precision of Python
floats.

INPUT:
    k -- (optional) an integer, defaults to sqrt(N).
    
OUTPUT:
    float -- L(E,1)
    float -- a bound on the error in the approximation; this
             is a proveably correct upper bound on the sum
             of the tail end of the series used to compute L(E,1).

EXAMPLES:


ALGORITHM:
    1. Compute the root number eps.  If it is -1, return 0.
    
    2. Compute the Fourier coefficients a_n, for n up to and
       including k.
       
    3. Compute the sum
    
         2 * sum_{n=1}^{k} (a_n / n) * exp(-2*pi*n/Sqrt(N)),
         
       where N is the conductor of E.
       
    4. Compute a bound on the tail end of the series, which is
    
         2 * e^(-2 * pi * (k+1) / sqrt(N)) / (1 - e^(-2*pi/sqrt(N))).
         
       For a proof see [Grigov-Jorza-Patrascu-Patrikis-Stein].

Lseries_deriv_at1(self, k=0)

Compute L'(E,1) using k terms of the series for L'(E,1) form
page 406 of Henri Cohen's book"A Course in Computational
Algebraic Number Theory".

The real precision of the computation is the precision of
Python floats.

INPUT:

OUTPUT:

ALGORITHM:
    1. Compute the root number eps.  If it is 1, return 0.

    2. Compute the Fourier coefficients a_n, for n up to and
       including k.
       
    3. Compute the sum
    
         2 * sum_{n=1}^{k} (a_n / n) * E_1(2*pi*n/Sqrt(N)),
         
       where N is the conductor of E, and E_1 is the
       exponential integral function.

    4. Compute a bound on the tail end of the series, which is
    
         2 * e^(-2 * pi * (k+1) / sqrt(N)) / (1 - e^(-2*pi/sqrt(N))).
         
       For a proof see [Grigov-Jorza-Patrascu-Patrikis-Stein].  This
       is exactly the same as the bound for the approximation to
       L(E,1) produced by Lseries_at1.

Lseries_extended(self, s, prec)

Returns the value of the L-series of the elliptic curve E at s can be any complex number using prec terms of the power series expansion.

WARNING: This function uses sage.functions.transcendental.gamma_inc, which currently calls mathematica.

EXAMPLES:

modular_degree(self)

Return the modular degree of this elliptic curve.

NOTE: This function only currently works if this curve is in the elliptic curves tables, its a J_0(N)-optimal quotient, and you've installed those tables. In particular, this is (currently) not an implementation of Watkins's algorithm.

modular_parametrization(self)

Computes and returns ...

newform(self)

Returns the newform attached to this elliptic curve.

non_surjective(self, A=1000)

Returns a list of primes p such that the mod-p representation
rho_{E,p} *might* not be surjective (this list usually
contains 2, because of shortcomings of the algorithm).  If p
is not in the returned list, then rho_{E,p} is provably
surjective (see A. Cojocaru's paper).  If the curve has CM
then infinitely many representations are not surjective, so we
simply return the sequence [(0,"cm")] and do no further computation.

INPUT:
    A -- an integer
OUTPUT:
    list -- if curve has CM, returns [(0,"cm")].  Otherwise, returns a
            list of primes where mod-p representation very likely
            not surjective.   At any prime not in this list,
            the representation is definitely surjective.
EXAMPLES:
    >>> E = EllipticCurve([0, 0, 1, -38, 90])  # 361A
    >>> E.non_surjective()   # CM curve
    [(0, 'cm')]

    >>> E = EllipticCurve([0, -1, 1, 0, 0]) # X_1(11)
    >>> E.non_surjective()
    [(5, '5-torsion')]

    >>> E = EllipticCurve([0, 0, 1, -1, 0]) # 37A
    >>> E.non_surjective()
    []

    >>> E = EllipticCurve([0,-1,1,-2,-1])   # 141C
    >>> E.non_surjective()
    [(13, [1])]

ALGORITHM:
    When p<=3 use division polynomials.  For 5 <= p <= B,
    where B is Cojocaru's bound, use the results in Section 2
    of Serre's inventiones paper"Sur Les Representations Modulaires Deg
    Degre 2 de Galqbar Over Q."

Np(self, p)

The number of points on E modulo p, where p is a prime of good reduction.

EXAMPLES:
>>> E = EllipticCurve([0, -1, 1, -10, -20])
>>> E.Np(2)
5

>>> E.Np(3)
5

>>> E.conductor()
11

>>> E.Np(11)
Traceback (most recent call last):

...

ArithmeticError: p (=11) must be a prime of good reduction

omega(self)

Returns the real period. This is the correct period in the BSD conjecture, i.e., it is the least real period * 2 when the period lattice is rectangular.

padic_sigma(self, p, prec=20)

Returns the p-adic sigma function of the elliptic curve as a power series in t to precision prec.

pari_curve(self)

Return the PARI curve corresponding to this elliptic curve.

EXAMPLES:
>>> E = EllipticCurve([0, 0,1,-1,0])
>>> e = E.pari_curve()
>>> type(e)
<type '_py_pari.gen'>

>>> e.type()
't_VEC'

>>> e.ellan(10)
[1, -2, -3, 2, -2, 6, -1, 0, 6, 4]
>>> E = EllipticCurve(RationalField(), ['1/3', '2/3'])
>>> e = E.pari_curve()
>>> e.type()
't_VEC'

>>> e[:5]
[0, 0, 0, 1/3, 2/3]

pari_mincurve(self)

Return the PARI curve corresponding to a minimal model for this elliptic curve.

EXAMPLES:
>>> E = EllipticCurve(RationalField(), ['1/3', '2/3'])
>>> e = E.pari_mincurve()
>>> e[:5]
[0, 0, 0, 27, 486]

>>> E.conductor()
47232

>>> e.ellglobalred()
[47232, [1, 0, 0, 0], 2]

period_lattice(self)

Return a basis for the period lattice of the elliptic curve
over Q as a 2-tuple.

The basis has the form [omega_1, omega_2], where
Im(omega_1/omega_2) > 0 and omega_1 is real.

INPUT:
    -- an elliptic curve
OUTPUT:
    omega_1 -- complex number
    omega_2 -- complex number

real_components(self)

Returns 1 if there is 1 real component and 2 if there are 2.

regulator(self, use_database=False)

Returns the regulator of this curve, which must be defined
over Q.

INPUT:
    use_database -- bool (default: False), if True, try to
          look up the regulator in the Cremona database.

root_number(self)

Returns the root number of this elliptic curve.

This is 1 if the order of vanishing of the L-function L(E,s) at 1 is even, and -1 if it is odd.

satisfies_heegner_hypothesis(self, D)

Returns True precisely when D is a fundamental discriminant that satisfies the Heegner hypothesis for this elliptic curve.

sha_an(self, use_database=False)

Returns the Birch and Swinnerton-Dyer conjectural order of
Sha, unless the analytic rank is > 1, in which case this
function returns 0.

This result is proved correct if the order of vanishing is 0
and the Manin constant is <= 2 (this Manin constant condition
is true if the conductor is squarefree or <= 40000).

If the optional parameter use_database is True (default:
False), this function returns the analytic order of Sha as
listed in Cremona's tables, if this curve appears in Cremona's
tables (i.e., is a curve over Q of conductor <= 40000).

EXAMPLES:
    >>> E = EllipticCurve([0, -1, 1, -10, -20])   # 11A  = X_0(11)
    >>> E.sha_an()
    1
    >>> E = EllipticCurve([0, -1, 1, 0, 0])       # X_1(11)
    >>> E.sha_an()
    1

The smallest conductor curve with nontrivial Sha:
    >>> E = EllipticCurve([1,1,1,-352,-2689])     # 66B3
    >>> E.sha_an()
    4

The four optimal quotients with nontrivial Sha and conductor <= 1000:
    >>> E = EllipticCurve([0, -1, 1, -929, -10595])       # 571A
    >>> E.sha_an()
    4
    >>> E = EllipticCurve([1, 1, 0, -1154, -15345])       # 681B
    >>> E.sha_an()
    9
    >>> E = EllipticCurve([0, -1, 0, -900, -10098])       # 960D
    >>> E.sha_an()
    4
    >>> E = EllipticCurve([0, 1, 0, -20, -42])            # 960N
    >>> E.sha_an()
    4

The smallest conductor curve of rank > 1:
    >>> E = EllipticCurve([0, 1, 1, -2, 0])       # 389A (rank 2)
    >>> E.sha_an()
    0

The following two examples require the mwrank package, for
computation of a regulator.
    >> e = EllipticCurve([1, 0, 0, -19491080, -33122512122])   # 15834T2
    >> e.sha_an()   # takes about 22 seconds
    25
    >> E = EllipticCurve([0, 0, 1, -1, 0])                     # 37A  (rank 1)
    >> E.sha_an()
    1

shabound(self)

Compute a provably correct bound on the order of the Shafarevich-Tate group of this curve. The bound is a either False (no bound) or a list B of primes such that any divisor of Sha is in this list.

shabound_kato(self)

Returns a list p of primes such tha theorems of Kato's and
others (e.g., as explained in a paper/thesis of Grigor Grigorov)
imply that if p divides #Sha(E) then p is in the list.

If L(E,1) = 0, then Kato's theorem gives no information, so
this function returns False.

THEOREM (Kato): Suppose p >= 5 is a prime so the p-adic
representation rho_{E,p} is surjective.  Then ord_p(#Sha(E))
divides ord_p(L(E,1)/Omega_E).

EXAMPLES:
    >>> E = EllipticCurve([0, -1, 1, -10, -20])   # 11A  = X_0(11)
    >>> E.shabound_kato()
    [2, 3, 5]
    >>> E = EllipticCurve([0, -1, 1, 0, 0])       # X_1(11)
    >>> E.shabound_kato()
    [2, 3, 5]
    >>> E = EllipticCurve([1,1,1,-352,-2689])     # 66B3
    >>> E.shabound_kato()
    [2, 3]

For the following curve one really has 25 | #Sha (by Grigorov-Stein paper):
    >> E = EllipticCurve([1, -1, 0, -332311, -73733731])   # 1058D1
    >> E.shabound_kato()
    [2, 3, 5]
    >> E.non_surjective()
    []

For this one, Sha is divisible by 7.
    >> E = EllipticCurve([0, 0, 0, -4062871, -3152083138])   # 3364C1
    >> E.shabound_kato()
    [2, 3, 7]

No information about curves of rank > 0:
    >>> E = EllipticCurve([0, 0, 1, -1, 0])       # 37A  (rank 1)
    >>> E.shabound_kato()
    False

shabound_kolyvagin(self, D=0, regulator=None, ignore_nonsurj_hypothesis=False)

Given a fundamental discriminant D (=-3,-4) that satisfies the
Heegner hypothesis, return a list of primes so that
Kolyvagin's theorem (as in Gross's paper) implies that any
prime divisor of #Sha is in this list.

INPUT:
    D -- (optional) a fundamental discriminant < -4 that satisfies the
         Heegner hypothesis for E; if not given, use the first such D
         
    regulator -- (optional) regulator of E(K); if not given, will
                 be computed (which could take a long time)

                 
    ignore_nonsurj_hypothesis (optional: default False) --
              If True, then gives the bound coming from Heegner point
              index, but without any hypothesis on surjectivity
              of the mod-p representation.
              

OUTPUT:
    0 -- if E/K has complex multiplication or analytic rank >= 2
or 
    B -- list of primes such that if p divides Sha(E/K), then p is in B.

and

    I -- the odd part of the index of the Heegner point in the full
         group of rational points.

REMARKS:
    (1) We do not have to assume that the Manin constant is 1
        (or a power of 2).  If the Manin constant were
        divisible by a prime, that prime would get included in
        the list of bad primes.

    (2) We assume the Gross-Zagier theorem is True under the
        hypothesis that gcd(N,D) = 1, instead of the stronger
        hypothesis gcd(2*N,D)=1 that is in the original
        Gross-Zagier paper.  That Gross-Zagier is true when
        gcd(N,D)=1 is"well-known" to the experts, but doesn't
        seem to written up well in the literature.

    (3) Correctness of the computation is guaranteed using
        interval arithmetic, under the assumption that the
        regulator, square root, and period lattice are
        computed to precision at least 10^(-10), i.e., they are
        correct up to addition or a real number with absolute
        value less than 10^(-10).

sigma(self, z, flag=0)

Returns the value of the Weierstrass sigma function of the lattice
associated to this elliptic curve E.
INPUT:
    z -- a complex number
    flag -- 0 - default ???
            1 - computes an arbitrary determination of log(sigma(z))
            2, 3 - same using the product expansion instead of theta series.
                   ???
OUTPUT:
    a complex number

NOTE: The reason for the ???'s above, is that the PARI documentation for
      ellsigma is very vague.

tamagawa_number(self, p)

The Tamagawa number of the elliptic curve at p.

tamagawa_product(self)

Returns the product of the Tamagawa numbers.

torsion_order(self)

Return the order of the torsion subgroup.

torsion_subgroup(self, flag=0)

Returns the torsion subgroup of this elliptic curve.

The flag is passed onto PARI and has the same algorithm meaning as there. So: If flag = 0, use Doud's algorithm; if flag = 1, use Lutz-Nagell.

two_selmer_shabound(self)

Returns a bound on the dimension of Sha(E)[2], computed using a 2-descent.

Generated by Epydoc 2.1 on Mon May 9 17:57:02 2005 http://epydoc.sf.net