Karim Belabas on Fri, 30 Jan 2004 17:16:59 +0100


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

Re: Preparing PARI 2.3


* Bill Allombert [2004-01-28 02:11]:
> Above is a mail I sent a year ago that listed some problems that needed
> to be addressed before releasing.
>
> > --- The polrootspadic(x^2+8*x+4, 2, 2) bug is still not fixed.
>
> It is rather annoying, since PARI 2.1 give the correct result while 2.2
> give another (incorrect) result.

I believe this can (and should!) wait. See final comments below.

Both stable and unstable usually give an "incorrect" inconsistent result
is the precision is small. E.g

(16:42) gp > for (i = 1, 4, print( polrootspadic((x+1)^2-27,3,i) ) )
[2 + O(3)]~
[2 + O(3^2), 2 + 3 + O(3^2)]~
[2 + 2*3 + 2*3^2 + O(3^3)]~
[]~

(16:45) gp > for(i = 1, 4, print( polrootspadic(x^2-27, 3, i) ) )
[O(3)]~
[]~      \\ because ( O(3^2) )^2 = O(3^4), not Mod(0, 9)
[]~
[]~

(16:45) gp > polrootspadic((x-1)^2 + O(3^3), 3, 100)
%1 = [1 + O(3^100)]~

The exact problem is: do we want polrootspadic(A, p, r) to return

1) an existing p-adic root of A (in Qp), given to relative accuracy r ?
[ consistent with polroots() ]

2) the roots of A in Z / p^r ? 

As for 1), it can already be optained via factorpadic. It is in general
impossible to answer the question if coefficients of A are (inexact) p-adic
numbers. It might require a huge amount of computation to decide whether a
root exists or not, even if r = 1. True, it is still much easier/faster than
factorpadic().

As for 2), polrootspadic currently does this for the roots which are not  0
mod p (because of the phenomenon described in the comment above). No other
routine does it and it would be straightforward to implement it consistently
(including 0 mod p !). We have a minor problem when A has non-p-integral
coefficients but one can always raise an error.

It should be fixed as 1) but 2) is also useful. Probably more so.

Notes:
1) padicappr() has the same problem.

2) the various polroots routine are inconsistent wrt multiplicities: polroots
and polrootsmod(,,1) repeat roots, the others don't.

3) we badly need a FqX_roots routine ( easy from factmod9 code ),
there's a ridiculous loop over Fq in padicappr(). Also we must rename

  factmod0 --> FpX_factor

and have factmod9 / rootmod be simple wrappers for

  factmod9 --> FqX_factor 
  rootmod  --> FpX_roots

In short, there's a lot of (simple but annoying) work to do to properly fix
the problem. The problem is not specific to the unstable branch (only a few
specific instances are), and has been with us since the beginning.

Cheers,

    Karim.
-- 
Karim Belabas                     Tel: (+33) (0)1 69 15 57 48
Dep. de Mathematiques, Bat. 425   Fax: (+33) (0)1 69 15 60 19
Universite Paris-Sud              http://www.math.u-psud.fr/~belabas/ 
F-91405 Orsay (France)            http://pari.math.u-bordeaux.fr/  [PARI/GP]