Opened 12 years ago

Closed 9 years ago

#10735 closed defect (fixed)

Simon 2-descent only returns an upper bound on the 2-Selmer rank

Reported by: Jamie Weigandt Owned by: John Cremona
Priority: minor Milestone: sage-6.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:

Status badges

Description (last modified by Peter Bruin)

[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
sage: E.sha().an()

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 9 years ago by Jeroen Demeyer

Milestone: sage-5.11sage-5.12

comment:2 Changed 9 years ago by wuthrich

Report Upstream: N/AReported 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 9 years ago by wuthrich


comment:4 Changed 9 years ago by John Cremona

Description: modified (diff)

comment:5 Changed 9 years ago by For batch modifications

Milestone: sage-6.1sage-6.2

comment:6 Changed 9 years ago by Peter Bruin

Dependencies: #11005

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

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

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

Version 0, edited 9 years ago by Peter Bruin (next)

comment:7 Changed 9 years ago by Peter Bruin

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:

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)
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:

 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 9 years 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 9 years ago by John 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 9 years ago by Peter Bruin

Description: modified (diff)
Summary: Simon 2-descent may not check for solubility at archimedean places.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 9 years 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 9 years ago by Peter Bruin

Authors: Peter Bruin
Branch: u/pbruin/10735-simon_two_descent_doc
Commit: a47b7a1281fdc057ac148535e88a01ed113dd8fc
Priority: majorminor
Status: newneeds_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 Peter Bruin

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 9 years ago by Peter Bruin (previous) (diff)

comment:14 Changed 9 years ago by wuthrich

Reviewers: Chris Wuthrich
Status: needs_reviewpositive_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 git

Commit: a47b7a1281fdc057ac148535e88a01ed113dd8fc732191df41bcc093230a41e747514bcdef46fd40
Status: positive_reviewneeds_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:// 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 into gp_simon_relative
962d338Merge branch 'ticket/16009-gp_simon_relative' into ticket/9322-simon_two_descent_defaults
4bdb538fix doctests in
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 9 years ago by Peter Bruin

Dependencies: #11005#11005, #9322
Status: needs_reviewpositive_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 Volker Braun

Branch: u/pbruin/10735-simon_two_descent_doc732191df41bcc093230a41e747514bcdef46fd40
Resolution: fixed
Status: positive_reviewclosed
Note: See TracTickets for help on using tickets.