Opened 3 years ago
Closed 4 months ago
#10735 closed defect (fixed)
Simon 2-descent only returns an upper bound on the 2-Selmer rank
Reported by: | weigandt | Owned by: | cremona |
---|---|---|---|
Priority: | minor | Milestone: | sage-6.2 |
Component: | elliptic curves | Keywords: | simon_two_descent |
Cc: | cremona, was, rlm | Merged in: | |
Authors: | Peter Bruin | Reviewers: | Chris Wuthrich |
Report Upstream: | Reported upstream. No feedback yet. | Work issues: | |
Branch: | 732191d (Commits) | Commit: | 732191df41bcc093230a41e747514bcdef46fd40 |
Dependencies: | #11005, #9322 | Stopgaps: |
Description (last modified by pbruin)
[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 Mordell-Weil rank of E, an integer which is supposed to be the F_2 dimension of the 2-Selmer group of E, and list of points, generating the part of the Mordell-Weil group that has been found.
Sometimes the second entry is larger than the actual 2-Selmer 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 2-Selmer rank.
Change History (17)
comment:1 Changed 12 months ago by jdemeyer
- Milestone changed from sage-5.11 to sage-5.12
comment:2 Changed 7 months ago by wuthrich
- Report Upstream changed from N/A to Reported upstream. No feedback yet.
comment:3 Changed 7 months ago by wuthrich
- Type changed from PLEASE CHANGE to defect
comment:4 Changed 7 months ago by cremona
- Description modified (diff)
comment:5 Changed 6 months ago by vbraun_spam
- Milestone changed from sage-6.1 to sage-6.2
comment:6 Changed 6 months ago by pbruin
- Dependencies set to #11005
comment:7 Changed 6 months ago by pbruin
It seems to me that the bug is not caused by failing to detect non-solubility at the real place. In fact, Simon's script computes the same 2-isogeny Selmer ranks as mwrank, but deduces an incorrect 2-Selmer rank from these.
Output of mwrank:
Curve [1,0,1,-130,-556] : 1 points of order 2: [13:-7:1] Using 2-isogenous 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 2-isogeny 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 2-descent...done: now regulator = 1 Regulator = 1 The rank and full Mordell-Weil 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 2-descent 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^2-4b,2)gen = 2 K(a^2-4b,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 2-Selmer 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 2-Selmer ranks of E and E' are in fact different (1 and 3, respectively).
comment:8 Changed 5 months ago by wuthrich
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 2-Selmer 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 5 months ago by cremona
You are right. DS does no second descent (unlike mwrank when over Q and with 2-torsion) and the second descent can give a better upper bound on the rank.
comment:10 Changed 5 months ago by pbruin
- Description modified (diff)
- Summary changed from Simon 2-descent may not check for solubility at archimedean places. to Simon 2-descent only returns an upper bound on the 2-Selmer 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 5 months ago by wuthrich
No the correctness of the parity is unconditional. (This is used for instance in the proof of the p-parity conjecture via p-isogeny.)
comment:12 Changed 5 months ago by pbruin
- Branch set to u/pbruin/10735-simon_two_descent_doc
- Commit set to a47b7a1281fdc057ac148535e88a01ed113dd8fc
- Priority changed from major to minor
- Status changed from new to 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 5 months ago by pbruin
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 4 months ago by wuthrich
- Reviewers set to Chris Wuthrich
- Status changed from needs_review to 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 4 months ago by git
- Commit changed from a47b7a1281fdc057ac148535e88a01ed113dd8fc to 732191df41bcc093230a41e747514bcdef46fd40
- Status changed from positive_review to 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/9322-defaults-for-two-descent' of git://trac.sagemath.org/sage into ticket/9322-simon_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 2-descent program |
8bceb36 | Merge branch 'u/pbruin/16022-simon_two_descent_bug' of trac.sagemath.org:sage into gp_simon_relative |
962d338 | Merge branch 'ticket/16009-gp_simon_relative' into ticket/9322-simon_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/9322-simon_two_descent_defaults' into ticket/10735-two_selmer_discrepancy |
comment:16 Changed 4 months ago by pbruin
- Dependencies changed from #11005 to #11005, #9322
- Status changed from needs_review to 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 4 months ago by vbraun
- Branch changed from u/pbruin/10735-simon_two_descent_doc to 732191df41bcc093230a41e747514bcdef46fd40
- Resolution set to fixed
- Status changed from positive_review to 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.