Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
sagetrac-weigandt mannequin opened this issue Feb 3, 2011 · 23 comments
Closed

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

sagetrac-weigandt mannequin opened this issue Feb 3, 2011 · 23 comments

Comments

@sagetrac-weigandt
Copy link
Mannequin

sagetrac-weigandt mannequin commented Feb 3, 2011

[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.

Depends on #11005
Depends on #9322

Upstream: Reported upstream. No feedback yet.

CC: @JohnCremona @williamstein @rlmill

Component: elliptic curves

Keywords: simon_two_descent

Author: Peter Bruin

Branch/Commit: 732191d

Reviewer: Chris Wuthrich

Issue created by migration from https://trac.sagemath.org/ticket/10735

@sagetrac-weigandt sagetrac-weigandt mannequin added this to the sage-5.11 milestone Feb 3, 2011
@jdemeyer jdemeyer modified the milestones: sage-5.11, sage-5.12 Aug 13, 2013
@chriswuthrich
Copy link
Contributor

comment:2

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.

@chriswuthrich
Copy link
Contributor

Upstream: Reported upstream. No feedback yet.

@JohnCremona

This comment has been minimized.

@sagetrac-vbraun-spam sagetrac-vbraun-spam mannequin modified the milestones: sage-6.1, sage-6.2 Jan 30, 2014
@pjbruin
Copy link
Contributor

pjbruin commented Feb 11, 2014

Dependencies: #11005

@pjbruin
Copy link
Contributor

pjbruin commented Feb 11, 2014

comment:6

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

@pjbruin
Copy link
Contributor

pjbruin commented Feb 13, 2014

comment:7

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

@chriswuthrich
Copy link
Contributor

comment:8

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.

@JohnCremona
Copy link
Member

comment:9

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.

@pjbruin
Copy link
Contributor

pjbruin commented Feb 15, 2014

comment:10

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?

@pjbruin

This comment has been minimized.

@pjbruin pjbruin changed the title Simon 2-descent may not check for solubility at archimedean places. Simon 2-descent only returns an upper bound on the 2-Selmer rank Feb 15, 2014
@chriswuthrich
Copy link
Contributor

comment:11

No the correctness of the parity is unconditional. (This is used for instance in the proof of the p-parity conjecture via p-isogeny.)

@pjbruin
Copy link
Contributor

pjbruin commented Feb 17, 2014

Branch: u/pbruin/10735-simon_two_descent_doc

@pjbruin
Copy link
Contributor

pjbruin commented Feb 17, 2014

Author: Peter Bruin

@pjbruin
Copy link
Contributor

pjbruin commented Feb 17, 2014

comment:12

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.

@pjbruin
Copy link
Contributor

pjbruin commented Feb 17, 2014

Commit: a47b7a1

@pjbruin
Copy link
Contributor

pjbruin commented Feb 17, 2014

comment:13

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.

@chriswuthrich
Copy link
Contributor

comment:14

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.

@chriswuthrich
Copy link
Contributor

Reviewer: Chris Wuthrich

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Mar 28, 2014

Changed commit from a47b7a1 to 732191d

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Mar 28, 2014

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

@pjbruin
Copy link
Contributor

pjbruin commented Mar 28, 2014

Changed dependencies from #11005 to #11005, #9322

@pjbruin
Copy link
Contributor

pjbruin commented Mar 28, 2014

comment:16

There was just a trivial merge conflict with #9322, which also has positive review, so I merged that branch and made it a dependency.

@vbraun
Copy link
Member

vbraun commented Mar 31, 2014

Changed branch from u/pbruin/10735-simon_two_descent_doc to 732191d

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants