If is an elliptic curve over a global field
, the Tate-Shafarevich
group is the subgroup of elements in
which map to zero under every
global-to-local restriction map
, one for each place
of
.
The group is usually denoted by the Russian letter Sha (Ш), in this document
it will be denoted by .
is known to be an abelian torsion group. It is conjectured that the
Tate-Shafarevich group is finite for any elliptic curve over a global field.
But it is not known in general.
A theorem of Kolyvagin and Gross-Zagier using Heegner points shows that if the
L-series of an elliptic curve does not vanish at 1 or has a simple
zero there, then
is finite.
A theorem of Kato, together with theorems from Iwasawa theory, allows for
certain primes to show that the
-primary part of
is finite and
gives an effective upper bound for it.
The (-adic) conjecture of Birch and Swinnerton-Dyer predicts the order of
from the leading term of the (
-adic) L-series of the elliptic curve.
Sage can compute a few things about . The commands an,
an_numerical and an_padic compute the conjectural order of
as a
real or
-adic number. With p_primary_bound one can find an upper bound
of the size of the
-primary part of
. Finally, if the analytic rank is
at most 1, then bound_kato and bound_kolyvagin find all primes for
which the theorems of Kato and Kolyvagin respectively do not prove the
triviality the
-primary part of
.
EXAMPLES:
sage: E = EllipticCurve('11a1')
sage: S = E.sha()
sage: S.bound_kato()
[2]
sage: S.bound_kolyvagin()
([2, 5], 1)
sage: S.an_padic(7,3)
1 + O(7^5)
sage: S.an()
1
sage: S.an_numerical()
1.00000000000000
sage: E = EllipticCurve('389a')
sage: S = E.sha(); S
Tate-Shafarevich group for the Elliptic Curve defined by y^2 + y = x^3 + x^2 - 2*x over Rational Field
sage: S.an_numerical()
1.00000000000000
sage: S.p_primary_bound(5)
0
sage: S.an_padic(5)
1 + O(5)
sage: S.an_padic(5,prec=4) # long time (2s on sage.math, 2011)
1 + O(5^3)
AUTHORS:
Bases: sage.structure.sage_object.SageObject
The Tate-Shafarevich group associated to an elliptic curve.
If is an elliptic curve over a global field
, the Tate-Shafarevich
group is the subgroup of elements in
which map to zero under
every global-to-local restriction map
, one for
each place
of
.
EXAMPLES:
sage: E = EllipticCurve('571a1')
sage: E._set_gens([]) # curve has rank 0, but non-trivial Sha[2]
sage: S = E.sha()
sage: S.bound_kato()
[2]
sage: S.bound_kolyvagin()
([2], 1)
sage: S.an_padic(7,3)
4 + O(7^5)
sage: S.an()
4
sage: S.an_numerical()
4.00000000000000
sage: E = EllipticCurve('389a')
sage: S = E.sha(); S
Tate-Shafarevich group for the Elliptic Curve defined by y^2 + y = x^3 + x^2 - 2*x over Rational Field
sage: S.an_numerical()
1.00000000000000
sage: S.p_primary_bound(5) # long time
0
sage: S.an_padic(5) # long time
1 + O(5)
sage: S.an_padic(5,prec=4) # very long time
1 + O(5^3)
Returns the Birch and Swinnerton-Dyer conjectural order of
as a provably correct integer, unless the analytic rank is > 1,
in which case this function returns a numerical value.
INPUT:
- use_database – bool (default: False); if True, try to use any databases installed to lookup the analytic order of
, if possible. The order of
is computed if it cannot be looked up.
- descent_second_limit – int (default: 12); limit to use on point searching for the quartic twist in the hard case
This result is proved correct if the order of vanishing is 0 and the Manin constant is <= 2.
If the optional parameter use_database is True (default:
False), this function returns the analytic order of as
listed in Cremona’s tables, if this curve appears in Cremona’s
tables.
NOTE:
If you come across the following error:
sage: E = EllipticCurve([0, 0, 1, -34874, -2506691])
sage: E.sha().an()
Traceback (most recent call last):
...
RuntimeError: Unable to compute the rank, hence generators, with certainty (lower bound=0, generators found=[]). This could be because Sha(E/Q)[2] is nontrivial.
Try increasing descent_second_limit then trying this command again.
You can increase the descent_second_limit (in the above example, set to the default, 12) option to try again:
sage: E.sha().an(descent_second_limit=16) # long time (2s on sage.math, 2011)
1
EXAMPLES:
sage: E = EllipticCurve([0, -1, 1, -10, -20]) # 11A = X_0(11)
sage: E.sha().an()
1
sage: E = EllipticCurve([0, -1, 1, 0, 0]) # X_1(11)
sage: E.sha().an()
1
sage: EllipticCurve('14a4').sha().an()
1
sage: EllipticCurve('14a4').sha().an(use_database=True) # will be faster if you have large Cremona database installed
1
The smallest conductor curve with nontrivial :
sage: E = EllipticCurve([1,1,1,-352,-2689]) # 66b3
sage: E.sha().an()
4
The four optimal quotients with nontrivial and conductor <= 1000:
sage: E = EllipticCurve([0, -1, 1, -929, -10595]) # 571A
sage: E.sha().an()
4
sage: E = EllipticCurve([1, 1, 0, -1154, -15345]) # 681B
sage: E.sha().an()
9
sage: E = EllipticCurve([0, -1, 0, -900, -10098]) # 960D
sage: E.sha().an()
4
sage: E = EllipticCurve([0, 1, 0, -20, -42]) # 960N
sage: E.sha().an()
4
The smallest conductor curve of rank > 1:
sage: E = EllipticCurve([0, 1, 1, -2, 0]) # 389A (rank 2)
sage: E.sha().an()
1.00000000000000
The following are examples that require computation of the Mordell- Weil group and regulator:
sage: E = EllipticCurve([0, 0, 1, -1, 0]) # 37A (rank 1)
sage: E.sha().an()
1
sage: E = EllipticCurve("1610f3")
sage: E.sha().an()
4
In this case the input curve is not minimal, and if this function did not transform it to be minimal, it would give nonsense:
sage: E = EllipticCurve([0,-432*6^2])
sage: E.sha().an()
1
See trac ticket #10096: this used to give the wrong result 6.0000 before since the minimal model was not used:
sage: E = EllipticCurve([1215*1216,0]) # non-minimal model
sage: E.sha().an() # long time (2s on sage.math, 2011)
1.00000000000000
sage: E.minimal_model().sha().an() # long time (1s on sage.math, 2011)
1.00000000000000
Return the numerical analytic order of , which is
a floating point number in all cases.
INPUT:
Note
See also the an() command, which will return a provably correct integer when the rank is 0 or 1.
Warning
If the curve’s generators are not known, computing them may be very time-consuming. Also, computation of the L-series derivative will be time-consuming for large rank and large conductor, and the computation time for this may increase substantially at greater precision. However, use of very low precision less than about 10 can cause the underlying PARI library functions to fail.
EXAMPLES:
sage: EllipticCurve('11a').sha().an_numerical()
1.00000000000000
sage: EllipticCurve('37a').sha().an_numerical()
1.00000000000000
sage: EllipticCurve('389a').sha().an_numerical()
1.00000000000000
sage: EllipticCurve('66b3').sha().an_numerical()
4.00000000000000
sage: EllipticCurve('5077a').sha().an_numerical()
1.00000000000000
A rank 4 curve:
sage: EllipticCurve([1, -1, 0, -79, 289]).sha().an_numerical() # long time (3s on sage.math, 2011)
1.00000000000000
A rank 5 curve:
sage: EllipticCurve([0, 0, 1, -79, 342]).sha().an_numerical(prec=10, proof=False) # long time (22s on sage.math, 2011)
1.0
See trac ticket #1115:
sage: sha=EllipticCurve('37a1').sha()
sage: [sha.an_numerical(prec) for prec in xrange(40,100,10)] # long time (3s on sage.math, 2013)
[1.0000000000,
1.0000000000000,
1.0000000000000000,
1.0000000000000000000,
1.0000000000000000000000,
1.0000000000000000000000000]
Returns the conjectural order of ,
according to the
-adic analogue of the Birch
and Swinnerton-Dyer conjecture as formulated
in [MTT] and [BP].
REFERENCES:
[MTT] | B. Mazur, J. Tate, and J. Teitelbaum, On ![]() |
[BP] | Dominique Bernardi and Bernadette Perrin-Riou,
Variante ![]() |
INPUT:
OUTPUT: -adic number - that conjecturally equals
.
If prec is set to zero (default) then the precision is set so that
at least the first -adic digit of conjectural
is
determined.
EXAMPLES:
Good ordinary examples:
sage: EllipticCurve('11a1').sha().an_padic(5) # rank 0
1 + O(5^22)
sage: EllipticCurve('43a1').sha().an_padic(5) # rank 1
1 + O(5)
sage: EllipticCurve('389a1').sha().an_padic(5,4) # rank 2, long time (2s on sage.math, 2011)
1 + O(5^3)
sage: EllipticCurve('858k2').sha().an_padic(7) # rank 0, non trivial sha, long time (10s on sage.math, 2011)
7^2 + O(7^24)
sage: EllipticCurve('300b2').sha().an_padic(3) # 9 elements in sha, long time (2s on sage.math, 2011)
3^2 + O(3^24)
sage: EllipticCurve('300b2').sha().an_padic(7, prec=6) # long time
2 + 7 + O(7^8)
Exceptional cases:
sage: EllipticCurve('11a1').sha().an_padic(11) # rank 0
1 + O(11^22)
sage: EllipticCurve('130a1').sha().an_padic(5) # rank 1
1 + O(5)
Non-split, but rank 0 case (trac ticket #7331):
sage: EllipticCurve('270b1').sha().an_padic(5) # rank 0, long time (2s on sage.math, 2011)
1 + O(5^22)
The output has the correct sign:
sage: EllipticCurve('123a1').sha().an_padic(41) # rank 1, long time (3s on sage.math, 2011)
1 + O(41)
Supersingular cases:
sage: EllipticCurve('34a1').sha().an_padic(5) # rank 0
1 + O(5^22)
sage: EllipticCurve('53a1').sha().an_padic(5) # rank 1, long time (11s on sage.math, 2011)
1 + O(5)
Cases that use a twist to a lower conductor:
sage: EllipticCurve('99a1').sha().an_padic(5)
1 + O(5)
sage: EllipticCurve('240d3').sha().an_padic(5) # sha has 4 elements here
4 + O(5)
sage: EllipticCurve('448c5').sha().an_padic(7,prec=4, use_twists=False) # long time (2s on sage.math, 2011)
2 + 7 + O(7^6)
sage: EllipticCurve([-19,34]).sha().an_padic(5) # see :trac: `6455`, long time (4s on sage.math, 2011)
1 + O(5)
Test for :trac: :
sage: E = EllipticCurve([-100,0])
sage: s = E.sha()
sage: s.an_padic(13)
1 + O(13^20)
Compute a provably correct bound on the order of the Tate-Shafarevich
group of this curve. The bound is either False (no bound) or a
list B of primes such that any prime divisor of the order of
is in this list.
EXAMPLES:
sage: EllipticCurve('37a').sha().bound()
([2], 1)
Returns a list of primes such that the theorems of Kato’s [Ka]
and others (e.g., as explained in a thesis of Grigor Grigorov [Gri])
imply that if
divides the order of
then
is in
the list.
If , then this function gives no information, so
it returns False.
THEOREM: Suppose and
is a prime such
that
does not have additive reduction at
,
- either the
-adic representation is surjective or has its image contained in a Borel subgroup.
Then is bounded from above by the
-adic valuation of
.
If the L-series vanishes, the method p_primary_bound can be used instead.
EXAMPLES:
sage: E = EllipticCurve([0, -1, 1, -10, -20]) # 11A = X_0(11)
sage: E.sha().bound_kato()
[2]
sage: E = EllipticCurve([0, -1, 1, 0, 0]) # X_1(11)
sage: E.sha().bound_kato()
[2]
sage: E = EllipticCurve([1,1,1,-352,-2689]) # 66B3
sage: E.sha().bound_kato()
[2]
For the following curve one really has that 25 divides the
order of (by [GJPST]):
sage: E = EllipticCurve([1, -1, 0, -332311, -73733731]) # 1058D1
sage: E.sha().bound_kato() # long time (about 1 second)
[2, 5, 23]
sage: E.galois_representation().non_surjective() # long time (about 1 second)
[]
For this one, is divisible by 7:
sage: E = EllipticCurve([0, 0, 0, -4062871, -3152083138]) # 3364C1
sage: E.sha().bound_kato() # long time (< 10 seconds)
[2, 7, 29]
No information about curves of rank > 0:
sage: E = EllipticCurve([0, 0, 1, -1, 0]) # 37A (rank 1)
sage: E.sha().bound_kato()
False
REFERENCES:
[Ka] | Kayuza Kato, ![]() ![]() |
[Gri] | G. Grigorov, Kato’s Euler System and the Main Conjecture, Harvard Ph.D. Thesis (2005). |
[GJPST] | G. Grigorov, A. Jorza, S. Patrikis, W. A. Stein, and C. Tarniţǎ, Computational verification of the Birch and Swinnerton-Dyer conjecture for individual elliptic curves, Math. Comp. 78 (2009), 2397-2425. |
Given a fundamental discriminant that satisfies the
Heegner hypothesis for
, return a list of primes so that
Kolyvagin’s theorem (as in Gross’s paper) implies that any
prime divisor of
is in this list.
INPUT:
OUTPUT:
REMARKS:
EXAMPLES:
sage: E = EllipticCurve('37a')
sage: E.sha().bound_kolyvagin()
([2], 1)
sage: E = EllipticCurve('141a')
sage: E.sha().an()
1
sage: E.sha().bound_kolyvagin()
([2, 7], 49)
We get no information when the curve has rank 2.:
sage: E = EllipticCurve('389a')
sage: E.sha().bound_kolyvagin()
(0, 0)
sage: E = EllipticCurve('681b')
sage: E.sha().an()
9
sage: E.sha().bound_kolyvagin()
([2, 3], 9)
Returns a provable upper bound for the order of the
-primary part
of the Tate-Shafarevich group.
INPUT:
OUTPUT:
In particular, if this algorithm does not fail, then it proves
that the -primary part of
is finite. This works also
for curves of rank > 1.
Note also that this bound is sharp if one assumes the main conjecture of Iwasawa theory of elliptic curves (and this is known in certain cases).
Currently the algorithm is only implemented when the following conditions are verified:
ALGORITHM:
The algorithm is described in [SW]. The results for the reducible case can be found in [Wu]. The main ingredient is Kato’s result on the main conjecture in Iwasawa theory.
EXAMPLES:
sage: e = EllipticCurve('11a3')
sage: e.sha().p_primary_bound(3)
0
sage: e.sha().p_primary_bound(5)
0
sage: e.sha().p_primary_bound(7)
0
sage: e.sha().p_primary_bound(11)
0
sage: e.sha().p_primary_bound(13)
0
sage: e = EllipticCurve('389a1')
sage: e.sha().p_primary_bound(5)
0
sage: e.sha().p_primary_bound(7)
0
sage: e.sha().p_primary_bound(11)
0
sage: e.sha().p_primary_bound(13)
0
sage: e = EllipticCurve('858k2')
sage: e.sha().p_primary_bound(3) # long time (10s on sage.math, 2011)
0
Some checks for trac ticket #6406 and trac ticket #16959:
sage: e.sha().p_primary_bound(7) # long time
2
sage: E = EllipticCurve('608b1')
sage: E.sha().p_primary_bound(5)
Traceback (most recent call last):
...
ValueError: The p-adic Galois representation is not surjective or reducible. Current knowledge about Euler systems does not provide an upper bound in this case. Try an_padic for a conjectural bound.
sage: E.sha().an_padic(5) # long time
1 + O(5^22)
sage: E = EllipticCurve("5040bi1")
sage: E.sha().p_primary_bound(5) # long time
0
REFERENCES:
[SW] | William Stein and Christian Wuthrich, Algorithms for the Arithmetic of Elliptic Curves using Iwasawa Theory Mathematics of Computation 82 (2013), 1757-1792. |
[Wu] | Christian Wuthrich, On the integrality of modular symbols and Kato’s Euler system for elliptic curves. Doc. Math. 19 (2014), 381-402. |
This returns the 2-rank, i.e. the -dimension
of the 2-torsion part of
, provided we can determine the
rank of
.
EXAMPLES:
sage: sh = EllipticCurve('571a1').sha()
sage: sh.two_selmer_bound()
2
sage: sh.an()
4
sage: sh = EllipticCurve('66a1').sha()
sage: sh.two_selmer_bound()
0
sage: sh.an()
1
sage: sh = EllipticCurve('960d1').sha()
sage: sh.two_selmer_bound()
2
sage: sh.an()
4