Karim Belabas on Tue, 28 Aug 2007 22:41:09 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: ellap: errors "impossible assignment I-->S" "not enough memory" "precision loss in truncation" "sorry, apell for p>10^25 is not yet implemented"


* Gaetan Bisson [2007-08-28 20:47]:
> I am encountering errors when trying to execute the following code.
> 
>   mc=ellinit([0,0,0,935824186433623028047894899424144532036848777,\
> 		   8985839528233295688881465643014243982999429660]);
>   ellap(mc,12542935105916320505274303565097221442462295713)
> 
> 
> Errors encountered depend on the architecture/version of PARI/GP:
> 
> Version 2.3.1 on i486 running linux (ix86/GMP-4.2.1 kernel) 32-bit.
>   *** ellap: impossible assignment I-->S
> 
> Version 2.3.0 on amd64 running linux (x86-64/GMP-4.1.4 kernel) 64-bit.
>   *** ellap: not enough memory
> 
> Version 2.1.1 on UltraSparc (MicroSparc kernel) 32-bit.
>   ***   precision loss in truncation
> 
> Version 2.0.15 on SuperSparc 32-bit.
>   ***   sorry, apell for p>10^25 is not yet implemented.
> 
> 
> If this helps, I actually know that this elliptic curve
> has trace 138 and discriminant -2312.

This still fails in the bleeding edge development version [Version 2.4.2
(development CHANGES-1.1861)]

(21:58) gp > e = ellinit([0,0,0,935824186433623028047894899424144532036848777,\
                          8985839528233295688881465643014243982999429660]);
(21:58) gp > p = 12542935105916320505274303565097221442462295713);
(21:58) gp > ellap(e,p)
  *** ellap: impossible assignment I-->S

It is expected, though:

(21:58) gp > ??ellap
ellap(E,p): [...]. If E/F_p  has  CM  by  a  principal  imaginary  quadratic
order we use an explicit formula   (involving  essentially Kronecker symbols
and Cornacchia's algorithm, hence very fast: O(log p)^2). Otherwise, we use
Shanks-Mestre's baby-step/giant-step  method,   which  runs in time O(p^{1/4})
using O(p^{1/4}) storage, hence becomes unreasonable when p has about 30
digits.
(21:58) gp > #Str(p)
%3 = 47

We are not in the CM case and p has 47 decimal digits, so we are "beyond
unreasonable" inputs for the naive algorithm.

The computation is still doable within PARI (in fact, easy) using the
external SEA package (1.5MB, GPL), which you can download from

  http://www.math.u-bordeaux.fr/~belabas/pari/scripts/ellsea.tar.gz

(21:58) gp > \r sea    \\ load the package. Actually done from my .gprc.
(21:58) gp > ? ellsea
ellsea(E,p,{flag1=0},{flag2=0}): returns the cardinality of the group of
rational points E(Fp) where E is an elliptic curve in ellinit format defined
over Z or Fp by the equation E: y^2 + a1*x*y + a3*y = x^3 + a2*x^2 + a4*x +
a6. If flag1 is equal to 1 the program displays information about the
computation process. [...]

(21:59) gp > ellsea(e, p, 1)
Computing the order of the elliptic curve
E:  y^2 = x^3 + 935824186433623028047894899424144532036848777*x + 8985839528233295688881465643014243982999429660
defined over the prime field of order 12542935105916320505274303565097221442462295713 (154bits)

Process prime 3.        Type: Elkies.    Compute trace mod 3, 9, 27
Process prime 5.        Type: Atkin.     Compute possible values for the trace
Process prime 7.        Type: Atkin.     Compute possible values for the trace
Process prime 11.       Type: Elkies.    Compute trace mod 11
Process prime 13.       Type: Atkin.     Compute possible values for the trace
Process prime 17.       Type: One root.  Compute trace mod 17
Process prime 19.       Type: Elkies.    Compute trace mod 19
Process prime 23.       Type: Atkin.     Compute possible values for the trace
Process prime 29.       Type: Atkin.     Compute possible values for the trace
Process prime 31.       Type: Atkin.     Compute possible values for the trace
Process prime 37.       Type: Atkin.     Compute possible values for the trace
Process prime 41.       Type: Elkies.    Compute trace mod 41
Process prime 43.       Type: Elkies.    Compute trace mod 43
Process prime 47.       Type: Atkin.     Compute possible values for the trace
Process prime 53.       Type: Atkin.     Compute possible values for the trace
Process prime 59.       Type: Elkies.    Compute trace mod 59
Process prime 61.       Type: Atkin.     Compute possible values for the trace

Computation of traces done. Entering match and sort algorithm.
time = 3,200 ms.
%5 = 12542935105916320505274303565097221442462295576
(21:59) gp > p + 1 - %
%6 = 138

Someday, this 'SEA' script shall become a true package like galdata
(Galois group computations) and elldata (Cremona's database).

Cheers,

    K.B.
--
Karim Belabas                  Tel: (+33) (0)5 40 00 26 17
Universite Bordeaux 1          Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation    http://www.math.u-bordeaux.fr/~belabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux.fr/  [PARI/GP]
`