Ask Your Question

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

asked 2012-12-06 23:06:33 +0200

anonymous user


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 flag offensive close merge delete

2 Answers

Sort by » oldest newest most voted

answered 2013-12-10 05:41:06 +0200

John Cremona gravatar image

updated 2021-01-22 01:36:25 +0200

slelievre gravatar image

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()
sage: Em.certain()

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

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.

edit flag offensive delete link more

answered 2021-01-24 19:29:22 +0200

dan_fulea gravatar image

updated 2021-01-24 23:44:38 +0200

slelievre gravatar image

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

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2012-12-06 23:06:33 +0200

Seen: 589 times

Last updated: Jan 24 '21