Opened 4 years ago

Closed 5 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 13 months ago by jdemeyer

  • Milestone changed from sage-5.11 to sage-5.12

comment:2 Changed 8 months ago by wuthrich

  • Report Upstream changed from N/A to Reported upstream. No feedback yet.

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.

comment:3 Changed 8 months ago by wuthrich

  • Type changed from PLEASE CHANGE to defect

comment:4 Changed 8 months ago by cremona

  • Description modified (diff)

comment:5 Changed 7 months ago by vbraun_spam

  • Milestone changed from sage-6.1 to sage-6.2

comment:6 Changed 7 months ago by pbruin

  • Dependencies set to #11005

The problem still exists after #11005, which upgrades Simon's scripts to the latest version:

sage: E=EllipticCurve('438e1')
sage: E.simon_two_descent()
(0, 3, [])

(Note: the torsion point (13, -7) is no longer returned since #13593.)

Last edited 7 months ago by pbruin (previous) (diff)

comment:7 Changed 7 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 6 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 6 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 6 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 6 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 6 months ago by pbruin

  • Authors set to Peter Bruin
  • 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 6 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.

Last edited 6 months ago by pbruin (previous) (diff)

comment:14 Changed 5 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 5 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:

b2b66c5Fixed calls to simon's two descent to use his own defaults (by default).
594de7bMerge branch 'u/mmasdeu/9322-defaults-for-two-descent' of git://trac.sagemath.org/sage into ticket/9322-simon_two_descent_defaults
db79035Merge branch 'develop' into gp_simon_relative
a92a80eChanged the doctest to make it independent of variable output.
275e4befix a bug in Denis Simon's 2-descent program
8bceb36Merge branch 'u/pbruin/16022-simon_two_descent_bug' of trac.sagemath.org:sage into gp_simon_relative
962d338Merge branch 'ticket/16009-gp_simon_relative' into ticket/9322-simon_two_descent_defaults
4bdb538fix doctests in ell_number_field.py
ecd28b4use default limtriv=3 for simon_two_descent over Q
732191dMerge branch 'ticket/9322-simon_two_descent_defaults' into ticket/10735-two_selmer_discrepancy

comment:16 Changed 5 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 5 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
Note: See TracTickets for help on using tickets.