# Generating only the ranks of elliptic curves that can be found provably correctly

Anonymous

Hello! I am trying to compute the rank for a large number of elliptic curves. I know that this is not always doable in a provably correct manner, so I would like to write up a piece of code that will go through my list of elliptic curves, calculate the rank provably correctly if possible, and skip those elliptic curves for which the rank cannot be computed provably correctly. Is there a simple way to do this? Thanks!

edit retag close merge delete

Sort by » oldest newest most voted

I assume that you mean elliptic curves over ℚ.

I would do two or three things. First, wrap your call to E.rank() in a try/except block to catch cases where an error is raised. Second, create an E.mwrank_curve() object, which you can ask its rank and ask whether the result is proved correct (this is delivered by mwrank):

sage: E = EllipticCurve([0,0,1,-7,6])
sage: Em = E.mwrank_curve()
sage: Em.rank()
3
sage: Em.certain()
True

sage: E = EllipticCurve([0, -1, 1, -929, -10595])
sage: Em = E.mwrank_curve()
sage: Em.rank()
0
sage: Em.certain()
False


In the second example, the rank really is 0 but E has Sha of order 4 and mwrank is not able to tell the difference.

I hope this helps.

more

Here is a piece of code trying to compute the rank of all elliptic curves $E(a,b)$ of the shape $y^2=x^3+ax+b$ for $a,b\in[2010, 2021]$. Sometimes, there it will be "harder" to compute the rank, so the code will not deliver a computed rank. We fill in a dictionary with keys $(a,b)$ and values the corresponding rank for the key when it could be computed, and None otherwise.

R, dic = [2010 .. 2021], {}
for a, b in cartesian_product([R, R]):
try:
E = EllipticCurve(QQ, [a, b])
E.two_descent(second_limit=13, verbose=False)
r = E.rank(only_use_mwrank=False)
dic[(a, b)] = r
print(f'({a}, {b}) -> {r}')
except Exception:
dic[(a, b)] = None


To see which cases could not be computed...

[key for key, val in dic.items() if val is None]


... and get an empty list, so in this case there was no None value. But well, in other cases we may have the situation. (Also maybe consider first commenting out the two_descent line, as it may be time consuming; but it may allow finding more curve ranks.)

more