Opened 12 years ago
Closed 9 years ago
#10735 closed defect (fixed)
Simon 2descent only returns an upper bound on the 2Selmer rank
Reported by:  Jamie Weigandt  Owned by:  John Cremona 

Priority:  minor  Milestone:  sage6.2 
Component:  elliptic curves  Keywords:  simon_two_descent 
Cc:  John Cremona, William Stein, Robert Miller  Merged in:  
Authors:  Peter Bruin  Reviewers:  Chris Wuthrich 
Report Upstream:  Reported upstream. No feedback yet.  Work issues:  
Branch:  732191d (Commits, GitHub, GitLab)  Commit:  732191df41bcc093230a41e747514bcdef46fd40 
Dependencies:  #11005, #9322  Stopgaps: 
Description (last modified by )
[See #15608 for a list of open simon_two_descent tickets]
Given an elliptic curve E the method E.simon_two_descent() returns an ordered triple. This consists of a lower bound on the MordellWeil rank of E, an integer which is supposed to be the F_2 dimension of the 2Selmer group of E, and list of points, generating the part of the MordellWeil group that has been found.
Sometimes the second entry is larger than the actual 2Selmer rank as computed by mwrank, and predicted by BSD. The first curve I know of for which this happens is the elliptic curve '438e1' from Cremona's tables.
sage: E=EllipticCurve('438e1') sage: E.simon_two_descent() (0, 3, [(13 : 7 : 1)]) sage: E.selmer_rank() #uses mwrank 1 sage: E.sha().an() 1
The explanation for this is that E.simon_two_descent()
, unlike Cremona's mwrank
, does not do a second descent and therefore only determines an upper bound on the 2Selmer rank.
Change History (17)
comment:1 Changed 9 years ago by
Milestone:  sage5.11 → sage5.12 

comment:2 Changed 9 years ago by
Report Upstream:  N/A → Reported upstream. No feedback yet. 

comment:3 Changed 9 years ago by
Type:  PLEASE CHANGE → defect 

comment:4 Changed 9 years ago by
Description:  modified (diff) 

comment:5 Changed 9 years ago by
Milestone:  sage6.1 → sage6.2 

comment:6 Changed 9 years ago by
Dependencies:  → #11005 

comment:7 Changed 9 years ago by
It seems to me that the bug is not caused by failing to detect nonsolubility at the real place. In fact, Simon's script computes the same 2isogeny Selmer ranks as mwrank
, but deduces an incorrect 2Selmer rank from these.
Output of mwrank
:
Curve [1,0,1,130,556] : 1 points of order 2: [13:7:1] Using 2isogenous curve [0,314,0,73,0] (minimal model [1,0,1,2050,35884])  First step, determining 1st descent Selmer groups  After first local descent, rank bound = 2 rk(S^{phi}(E'))= 3 rk(S^{phi'}(E))= 1  Second step, determining 2nd descent Selmer groups  After second local descent, rank bound = 0 rk(phi'(S^{2}(E)))= 1 rk(phi(S^{2}(E')))= 1 rk(S^{2}(E))= 1 rk(S^{2}(E'))= 3 Third step, determining E(Q)/phi(E'(Q)) and E'(Q)/phi'(E(Q))  1. E(Q)/phi(E'(Q))  (c,d) =(157,6144) (c',d')=(314,73) This component of the rank is 0  2. E'(Q)/phi'(E(Q))  This component of the rank is 0  Summary of results:  rank(E) = 0 #E(Q)/2E(Q) = 2 Information on III(E/Q): #III(E/Q)[phi'] = 1 #III(E/Q)[2] = 1 Information on III(E'/Q): #phi'(III(E/Q)[2]) = 1 #III(E'/Q)[phi] = 4 #III(E'/Q)[2] = 4 Used descent via 2isogeny with isogenous curve E' = [1,0,1,2050,35884] Rank = 0 Rank of S^2(E) = 1 Rank of S^2(E') = 3 Rank of S^phi(E') = 3 Rank of S^phi'(E) = 1 Processing points found during 2descent...done: now regulator = 1 Regulator = 1 The rank and full MordellWeil basis have been determined unconditionally. (0.098 seconds)
Output of simon_two_descent
:
ellrank([1,0,1,130,556]); Elliptic curve: Y^2 = x^3 + x^2  2072*x  35568 E[2] = [[0], [52, 0]] Elliptic curve: Y^2 = x^3 + 157*x^2 + 6144*x Algorithm of 2descent via isogenies trivial points on E(Q) = [[0, 0], [1, 1, 0], [0, 0], [0, 0]] #K(b,2)gen = 3 K(b,2)gen = [1, 2, 3]~ quartic ELS: Y^2 = x^4 + 157*x^2  6144 no point found on the quartic quartic ELS: Y^2 = 2*x^4 + 157*x^2 + 3072 no point found on the quartic quartic ELS: Y^2 = 2*x^4 + 157*x^2  3072 no point found on the quartic quartic ELS: Y^2 = 3*x^4 + 157*x^2 + 2048 no point found on the quartic quartic ELS: Y^2 = 3*x^4 + 157*x^2  2048 no point found on the quartic point on the quartic points on E(Q) = [[0, 0]] [E(Q):phi'(E'(Q))] >= 2 #S^(phi')(E'/Q) = 8 # agrees with mwrank #III(E'/Q)[phi'] <= 4 #K(a^24b,2)gen = 2 K(a^24b,2)gen = [1, 73]~ trivial points on E'(Q) = [[0, 0], [1, 1, 0], [0, 0], [0, 0]] point on the quartic points on E'(Q) = [[0, 0]] points on E(Q) = [[0, 0]] [E'(Q):phi(E(Q))] = 2 #S^(phi)(E/Q) = 2 # agrees with mwrank #III(E/Q)[phi] = 1 #III(E/Q)[2] <= 4 #E(Q)[2] = 2 #E(Q)/2E(Q) >= 2 0 <= rank <= 2 points = [[0, 0]] v = [0, 3, [[13, 7]]]
The 3 in the last line, which should be the rank of the 2Selmer group according to the documentation, is the result of computing (rank of S^(phi)(E/Q)
) + (rank of S^(phi')(E'/Q)
) + (rank of E(Q)[2]
)  2 = 1 + 3 + 1  2 = 3. There must be something wrong with this formula, as it is symmetric in E and E' (in this particular case, since E(Q)[2]
and E'(Q)[2]
both have rank 1) while the 2Selmer ranks of E and E' are in fact different (1 and 3, respectively).
comment:8 Changed 9 years ago by
That is indeed bad. The fomula (after the first descent) is indeed
dim Sel_phi + dim Sel_phihat + dim E[2]  2 .
this is a upper bound to dim Sel_2 and they have the same parity. But they need not be equal as the second descent in mwrank finds. The difference is a subquotient of Sha(E').
Conclusion: The output of Simon's algorithm is an upper bound on the 2Selmer group, which is correct in parity, but not necessarily equal.
In propose that we change the documentation, for I don't image that Simon's script could give back to full answer  though I have not looked at it.
comment:9 Changed 9 years ago by
You are right. DS does no second descent (unlike mwrank when over Q and with 2torsion) and the second descent can give a better upper bound on the rank.
comment:10 Changed 9 years ago by
Description:  modified (diff) 

Summary:  Simon 2descent may not check for solubility at archimedean places. → Simon 2descent only returns an upper bound on the 2Selmer rank 
Changing the documentation does indeed sound like the right solution here. The correctness of the parity of this upper bound probably relies on finiteness of Ш, or doesn't it?
comment:11 Changed 9 years ago by
No the correctness of the parity is unconditional. (This is used for instance in the proof of the pparity conjecture via pisogeny.)
comment:12 Changed 9 years ago by
Authors:  → Peter Bruin 

Branch:  → u/pbruin/10735simon_two_descent_doc 
Commit:  → a47b7a1281fdc057ac148535e88a01ed113dd8fc 
Priority:  major → minor 
Status:  new → needs_review 
Here is a patch for the documentation of simon_two_descent()
, including a new doctest using the example from the ticket description.
There are a few other improvements to the docstring. In particular, it contained several calls to set_random_seed()
. These can't have any effect, because Simon's script runs inside a separate GP interpreter with its own random state, so I removed these.
comment:13 Changed 9 years ago by
Another thing: the method simon_two_descent()
is currently not quite consistent between Q and other number fields: the method over Q removes points of finite order from the list (at least since #5153), but the corresponding method over general number fields does not. I made the documentation consistent with this, but did not change any code. If we want to fix this, it is probably best to do it as part of #10745.
comment:14 Changed 9 years ago by
Reviewers:  → Chris Wuthrich 

Status:  needs_review → positive_review 
We removed the points of finite order from .gens()
for number fields but not from simon_two_descent()
, which is a bit inconsistent, indeed. I agree to adress this in #10745.
Now to this ticket. I have run all tests and I am certainly happy with the improvement. So I give a positive review. I am not sure about the random seed issue above, but I trust you. Otherwise someone will complain at some point.
comment:15 Changed 9 years ago by
Commit:  a47b7a1281fdc057ac148535e88a01ed113dd8fc → 732191df41bcc093230a41e747514bcdef46fd40 

Status:  positive_review → needs_review 
Branch pushed to git repo; I updated commit sha1 and set ticket back to needs_review. Last 10 new commits:
b2b66c5  Fixed calls to simon's two descent to use his own defaults (by default).

594de7b  Merge branch 'u/mmasdeu/9322defaultsfortwodescent' of git://trac.sagemath.org/sage into ticket/9322simon_two_descent_defaults

db79035  Merge branch 'develop' into gp_simon_relative

a92a80e  Changed the doctest to make it independent of variable output.

275e4be  fix a bug in Denis Simon's 2descent program

8bceb36  Merge branch 'u/pbruin/16022simon_two_descent_bug' of trac.sagemath.org:sage into gp_simon_relative

962d338  Merge branch 'ticket/16009gp_simon_relative' into ticket/9322simon_two_descent_defaults

4bdb538  fix doctests in ell_number_field.py

ecd28b4  use default limtriv=3 for simon_two_descent over Q

732191d  Merge branch 'ticket/9322simon_two_descent_defaults' into ticket/10735two_selmer_discrepancy

comment:16 Changed 9 years ago by
Dependencies:  #11005 → #11005, #9322 

Status:  needs_review → positive_review 
There was just a trivial merge conflict with #9322, which also has positive review, so I merged that branch and made it a dependency.
comment:17 Changed 9 years ago by
Branch:  u/pbruin/10735simon_two_descent_doc → 732191df41bcc093230a41e747514bcdef46fd40 

Resolution:  → fixed 
Status:  positive_review → closed 
This is a bug in Simon's script indeed. I have emailed him about this one, too, as it happens with the later version of his file in gp, too.