Re: [sage-support] division by zero bug in EllipticCurve rank()

2015-12-28 Thread John Cremona
It is hard to predict in advance whether given coeffients will be able
to be handled by mwrank or not.  The strategy up to now has been to
catch places where "too large" input causes an error, which should all
be soon, i.e. it is not that you'll run for an hour and then crash.

In this case the currve has 2-torsion and mwrank runs fine with the
real precision increased from the default.  Using -p50 completes in
10s, finds one point and says that the rank is between 1 and 3, i.e. a
normal output.  Within Sage you can ee this by running E.mwrank("-p
50") -- the output is then s string containing all of mwrank's output
so it looks prettier to actually do

sage: print E.mwrank("-p 50")

Sage does provide a way to changethe precision parameter used by
mwrank, but indirectly:

sage: mwrank.set_precision(100) # this is bit precision, mwrank's -p is decimal
sage: E.rank()

displays the message

Unable to compute the rank with certainty (lower bound=1).
This could be because Sha(E/Q)[2] is nontrivial.
Try calling something like two_descent(second_limit=13) on the
curve then trying this command again.  You could also try rank
with only_use_mwrank=False.

This interface to mwrank is rather a mess.  it looks to me that if you
do run E.two_descent(second_limit=15) then it is not using the
increased precision value; that method should allow more parameters to
be set.

Most of this interface goes back to 2007 at least; given a cooperative
upstream developer ;) it should not be hard for someone to improve it.
Just bear in mind that mwrank will never be able to compute the ranks
of all curves, not becuase of any bugs but because 2-descent cannot do
that even in principle.

John

On 27 December 2015 at 22:06, William Stein  wrote:
> On Sun, Dec 27, 2015 at 12:05 PM, Andrey Novoseltsev  
> wrote:
>> A report from Lee Morgenstern using SageMathCell running Sage 6.9.beta6, but
>> the same happens in 6.10:
>>
>> the following code produces
>> NTLError: RR: division by zero
>
> This curve has a very large conductor and coefficients, at least
> relative to what mwrank is designed to handle.  For example, I get the
> error
>
>   ValueError: Invalid input ([0, 4547218754, 0, 1581862737670677504,
> 0]) to mwrank (singular curve)
>
> when calling E.mwrank(), which suggests long int overflow.   I've cc'd
> John Cremona.
>
> John: what should Sage be checking before allowing E.mwrank to create
> a curve using mwrank?
>
> In this case, very likely E.rank() should instantly raise a 
> NotImplementedError.
>
> To the original person asking the question, you might try using Simon
> Spicer's new function:
>
>E.analytic_rank_upper_bound()
>
> which gives an upper bound of 1 in a few seconds; as the root number
> is -1, the rank of this curve *must* be 1 (by Gross-Zagier-Kolyvagin).
> This is, of course, exactly the hardest case for computing the
> MW-group explicitly using mwrank.  Using Heegner points or higher
> descents (as in Magma) is probably the only hope here...
>
> In any case, E.rank() is definitely 1.
>
> See
>
>   
> https://cloud.sagemath.com/projects/4a5f0542-5873-4eed-a85c-a18c706e8bcd/files/support/2015-12-27-rank-divzero.sagews
>
> for a worksheet illustrating the above.
>
>>
>>
>> m = 239; n = 48
>> X = 2*m*n; Y = m^2 - n^2; Z = m^2 + n^2
>> E = EllipticCurve([0, 2*(Z^2-X*Y), 0, (X*Y)^2, 0])
>> E.rank()
>>
>>
>> The same error also happens with E.gens(),
>> but takes longer to get it. But if you use
>> E.gens(descent_second_limit=9)
>> you can get the error sooner.
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "sage-support" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to sage-support+unsubscr...@googlegroups.com.
>> To post to this group, send email to sage-support@googlegroups.com.
>> Visit this group at https://groups.google.com/group/sage-support.
>> For more options, visit https://groups.google.com/d/optout.
>
>
>
> --
> William (http://wstein.org)

-- 
You received this message because you are subscribed to the Google Groups 
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-support+unsubscr...@googlegroups.com.
To post to this group, send email to sage-support@googlegroups.com.
Visit this group at https://groups.google.com/group/sage-support.
For more options, visit https://groups.google.com/d/optout.


Re: [sage-support] division by zero bug in EllipticCurve rank()

2015-12-27 Thread William Stein
On Sun, Dec 27, 2015 at 12:05 PM, Andrey Novoseltsev  wrote:
> A report from Lee Morgenstern using SageMathCell running Sage 6.9.beta6, but
> the same happens in 6.10:
>
> the following code produces
> NTLError: RR: division by zero

This curve has a very large conductor and coefficients, at least
relative to what mwrank is designed to handle.  For example, I get the
error

  ValueError: Invalid input ([0, 4547218754, 0, 1581862737670677504,
0]) to mwrank (singular curve)

when calling E.mwrank(), which suggests long int overflow.   I've cc'd
John Cremona.

John: what should Sage be checking before allowing E.mwrank to create
a curve using mwrank?

In this case, very likely E.rank() should instantly raise a NotImplementedError.

To the original person asking the question, you might try using Simon
Spicer's new function:

   E.analytic_rank_upper_bound()

which gives an upper bound of 1 in a few seconds; as the root number
is -1, the rank of this curve *must* be 1 (by Gross-Zagier-Kolyvagin).
This is, of course, exactly the hardest case for computing the
MW-group explicitly using mwrank.  Using Heegner points or higher
descents (as in Magma) is probably the only hope here...

In any case, E.rank() is definitely 1.

See

  
https://cloud.sagemath.com/projects/4a5f0542-5873-4eed-a85c-a18c706e8bcd/files/support/2015-12-27-rank-divzero.sagews

for a worksheet illustrating the above.

>
>
> m = 239; n = 48
> X = 2*m*n; Y = m^2 - n^2; Z = m^2 + n^2
> E = EllipticCurve([0, 2*(Z^2-X*Y), 0, (X*Y)^2, 0])
> E.rank()
>
>
> The same error also happens with E.gens(),
> but takes longer to get it. But if you use
> E.gens(descent_second_limit=9)
> you can get the error sooner.
>
> --
> You received this message because you are subscribed to the Google Groups
> "sage-support" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to sage-support+unsubscr...@googlegroups.com.
> To post to this group, send email to sage-support@googlegroups.com.
> Visit this group at https://groups.google.com/group/sage-support.
> For more options, visit https://groups.google.com/d/optout.



-- 
William (http://wstein.org)

-- 
You received this message because you are subscribed to the Google Groups 
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-support+unsubscr...@googlegroups.com.
To post to this group, send email to sage-support@googlegroups.com.
Visit this group at https://groups.google.com/group/sage-support.
For more options, visit https://groups.google.com/d/optout.