Opened 11 years ago

Last modified 8 years ago

#10745 closed defect

bug in elliptic curve gens() — at Version 9

Reported by: rlm Owned by: cremona
Priority: major Milestone:
Component: elliptic curves Keywords:
Cc: aly.deines, cremona, gagansekhon, weigandt, was, wuthrich, robertwb Merged in:
Authors: Reviewers:
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Status badges

Description (last modified by pbruin)

[See #15608 for a list of open simon_two_descent tickets]

sage: a = [1, 0, 1, -1751, -31352]
sage: F = EllipticCurve(a)
sage: K.<d> = QuadraticField(5)
sage: FK = EllipticCurve(K, a)
sage: F.gens()
[(52 : 111 : 1)]
sage: FK.gens()

This isn't very good, because the default in Sage is proof=True, so one would expect this to be a provable result (until reading the docs of course).

Over Q, if the result is not provable an error is raised or a warning is printed, depending on the proof flag. This should be the same here.

In earlier versions of Sage (< 6.0), there was also a bug with caching:

sage: FK.gens(lim1=6)
Traceback (most recent call last):
KeyError: (6, 50, 10, 20, 30)

Change History (9)

comment:1 Changed 11 years ago by cremona

I'm not sure that, when the gens() function was added over number fields at SD22, we thought it through very well. In particular, I don't think that Simon's code necessarily passes the "proof=True" criteria (but cannot be more specific). Except that the points it returns are points on the curve...

comment:2 Changed 11 years ago by cremona

The output of simon_two_descent() for EK is

sage: FK.simon_two_descent()
(1, 1, [])

which can be interpreted as follows: he computes the 2-Selmer rank is 1, which gives a valid upper bound for the rank (=1). He fails to find points on 2-coverings, so there are no points returned. *But* he uses the parity conjecture to increase the lower bound from 0 to 1.

So when we decide (in the simon_two_descent()) method) that the output is certain, we need to take this into account.

Secondly, the gens() function for curves over number fields is completely reckless:

        lower,upper,gens = self.simon_two_descent(verbose=verbose,lim1=lim1,lim3=\
        return gens

There is no caching, no checking of Proof, and worst of all, the gens which are returned have not been looked at at all. Just about all you can say about them is that they are points on the curve.

Who let that in? This function needs changing urgently.

comment:3 Changed 11 years ago by wuthrich

  • Cc wuthrich added

comment:4 Changed 11 years ago by weigandt

  • Cc robertwb added

If we want to keep a gens() function for elliptic curves over number fields. We're going to need some functionality to check saturation of points over number fields. I'm ccing Robert Bradshaw because he's thought about this.

comment:5 Changed 8 years ago by wuthrich

It seems that the second problem has disappeared in 6.0. I get now

sage: FK.gens(lim1=6)

That still leaves 1).

Somehow, one should think that it would be best, if the curve remembered that it was defined over a smaller field and that it had found some points of infinite order already. In general, I think it is best if the algorithm would run through all subfield and search for points in there. ... But now I am dreaming.

comment:6 Changed 8 years ago by wuthrich

I modified the docstring of gens in #13593 . It now says there that the function returns some points of infinite order. In fact Simon's script just gives back what it came across during the various ways to search for points. They are not lin. indep. for instance. And of course there is no guarantee it finds any.

Maybe this ticket should now be rewritten as:

Implement gens correctly for elliptic curves over number fields. Extract from the points given by 2-descent (in case it determines the rank) a set of linearly indep. point and then saturate the Mordell-Weil group.

comment:7 Changed 8 years ago by cremona

  • Description modified (diff)

comment:8 Changed 8 years ago by wuthrich

I propose to close this after #13593 and #5153 as these two overlap a lot with the ticket here. Once they are closed. Then we open a new ticket enhancement for the saturation over number field (unless that exists already).

Last edited 8 years ago by wuthrich (previous) (diff)

comment:9 Changed 8 years ago by pbruin

  • Description modified (diff)
  • Status changed from new to needs_info

Given that the documentation no longer says that the points returned by gens() are linearly independent or span a subgroup of full rank, this is technically not a bug anymore, but there is still the inconsistency with the similar function over Q. There seem to be three options:

  1. close this ticket as invalid or wontfix;
  2. use this ticket to print a warning or raise an error if gens() returns something other than a basis for a subgroup of full rank in the Mordell-Weil group;
  3. rewrite this ticket with a more ambitious goal as in comment:6.

Any ideas?

Note: See TracTickets for help on using tickets.