-
-
Notifications
You must be signed in to change notification settings - Fork 419
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
bug in elliptic curve gens() #10745
Comments
comment:1
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
The output of simon_two_descent() for EK is
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:
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:4
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
It seems that the second problem has disappeared in 6.0. I get now
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
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 |
This comment has been minimized.
This comment has been minimized.
comment:9
Given that the documentation no longer says that the points returned by
|
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
comment:11
I think 3) is covered in ticket #8829. So it does not really make sense to do duplicate it here. either this ticket can be closed as in 1) in case the documentation is clear enough about the current behaviour or otherwise it should improve it. or it is a suggestion to improve the gens function. It should run gens first in subfields (where it is much easier to run) and then put the resulting sets cleverly together. |
comment:12
Replying to @categorie:
OK, I agree (I hadn't seen #8829).
In that case I think it would be good to explicitly say that this is different from the function
The documentation can be improved in any case; even if we can do better in
There are quite a few things one could try, e.g.
|
comment:13
Yes, I agree that is the best to do. We can also make |
Dependencies: #10735 |
Author: Peter Bruin |
comment:14
OK, I made a branch doing what you suggested. The documentation is now hopefully clearer. Filtering out points of finite order is now always done directly after calling Simon's GP program. While I was at it, I removed the change to an integral model since this is not necessary (anymore?). |
Commit: |
Branch pushed to git repo; I updated commit sha1. New commits:
|
comment:16
Also implement caching of the result of New commits:
|
comment:17
My first comment when looking at the modifications above is that I see that you changed ell.gp. Is this good ? It is very very likely that the next update of simon's scripts will forget to make this patch-fix of a upstream file. Would it not be better to tell the author to change this in his version and we update our file ? This is a genuine question as I am not sure what is better. One thing to bear in mind is that it seems that Denis has not been very active on the bugs in his script recently. |
comment:18
If I understand correctly the old ell.gp returns 0 for the rank of the example in ell_number_field.py at line 2086, while the point in there is of infinite order. We should certainly report this upstream as a bug. |
comment:19
Replying to @categorie:
This is #16022, on which this ticket indirectly depends (explaining the edit of |
comment:20
That is not mentioned as dependency on the ticket though. How do I get to know quickly what the modifications to approve in this ticket are ? I always though that commit messages starting with the trac number were useful for that. |
comment:21
Replying to @categorie:
It is quite a long chain of dependencies: #10745 <- #10735 <- #9322 <- #16009 <- #16022 (plus #9322 <- #16011). I'm not sure if explicitly listing all of these makes it clearer.
All dependencies get in via #10735, so one way to do it is to create a local branch for #10735 and type
Good point; usually I number the branch name, but it could indeed be useful to put the ticket number in the commit message as well. |
Reviewer: Chris Wuthrich |
comment:22
OK, that was helpful. All tests pass and I am happy with all modifications. Except there is one I am not certain about. You changed in gp_simon that the model is not necessarily changed to an integral model. I tried a few example and it seems to work even with non-integral models. Why are you certain this will never cause a problem ? Can I leave you to open a ticket for the other issue on gens ? I believe there is one for saturation, but I think we should open another one for the original problem posted in the question here. |
comment:23
Replying to @categorie:
Thanks for the review!
Denis Simon writes this in the documentation of
One of the first things that the GP function
You mean for extracting a set of linearly independent points, or for the trick of looking over smaller fields first? I can open a ticket for each of those. The one for saturation is #8829. |
comment:24
Well, I guess saturation (using the height pairing anyway) should filter out the linearly dependent points too. I was rather thinking of the other issue. Maybe a simple thing would be to pass on the gens when using |
comment:25
Replying to @categorie:
Actually the current patch at #8829 requires the initial points to be linearly independent; it even has a doctest showing that it fails for linearly dependent points... It is probably better to fix this after #8829, though.
OK, then I will open a ticket to fix at least the following (inspired by the original problem):
|
comment:26
Well, whatever the documentation says about gens over number fields, users will assume that we are miracle-workers and hence that the gens are complete over the extension. The only situation where this is probably do-able is for quadratic extensions, assuming that we can find gens for the twist. Somewhere there is code which, on given an elliptic curve over a quadratic fields when evaluating its gens function, tries to see if the curve is a base-change and if so uses this trick. I cannot remember of anyone implemented this well enough to have been let in... |
comment:27
Replying to @pjbruin:
This is now #16034. |
comment:28
Replying to @JohnCremona:
I think this is part of the patch at #8829. |
Changed branch from u/pbruin/10745-elliptic_curve_gens to |
[See #15608 for a list of open simon_two_descent tickets]
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.Depends on #10735
CC: @adeines @JohnCremona @sagetrac-gagansekhon @sagetrac-weigandt @williamstein @categorie @robertwb
Component: elliptic curves
Author: Peter Bruin
Branch/Commit:
42c563c
Reviewer: Chris Wuthrich
Issue created by migration from https://trac.sagemath.org/ticket/10745
The text was updated successfully, but these errors were encountered: