Karim BELABAS on Tue, 2 Jul 2002 13:30:38 +0200 (MEST)

 Re: polcoeff() mystery

```On Tue, 2 Jul 2002, Ilya Zakharevich wrote:
> On Mon, Jul 01, 2002 at 07:49:27PM +0200, Karim BELABAS wrote:
>> > As one can see, z and temp have the same value,
>>
>> No. They evaluate to the same printed output.
>>
>> > but the results of c() are different!  Moreover, x and temp give the same \x
>>
>> They don't. The history objects obtained from x and temp give the same \x.
>>
>> But, assuming factory settings, the history result is obtained after
>> simplify() has been applied to the result of the command evaluation.
>
>>   ? install(voir, "vGD,-1,L,")  \\ library routine underlying \x
>>   ? voir(temp)
>> [&=00a5d58c] POL(lg=3,CLONE):15000003  (+,varn=9,lgef=3):40090003  00a5d5ac
>>   coef of degree 0 = [&=00a5d5ac] POL(lg=4):14000004 (+,varn=10,lgef=4):400a0004  00a5d5a4  00a5d598
>>     coef of degree 0 = [&=00a5d5a4] INT(lg=2):02000002  (0,lgef=2):00000002
>>     coef of degree 1 = [&=00a5d598] INT(lg=3):02000003  (+,lgef=3):40000003 00000001
>
>> Type coercion is nearly inexistent in PARI, you have to force it with
>> simplify().
>
> What the time coercion has to do with simplify()???  Why is not it
> documented that polcoeff() uses a very pessimized algorithm and *does
> not* return what I asked it to do?

I think it does, assuming we do not have automatic type coercion from

{ polynomials of degree 0 in R[X] } --> R

What polcoeff returns is the polynomial of degree 0 which is the actual
(unsimplified) coefficient.

> ? x^2+y*x+z
> %1 = x^2 + y*x + z
> ? \x
> [&=00485374] POL(lg=5,CLONE):15000005  (+,varn=0,lgef=5):40000005  00485388  004853ac  004853d0
>   coef of degree 0 = [&=00485388] POL(lg=4):14000004  (+,varn=2,lgef=4):40020004  00485398  004853a0
>     coef of degree 0 = [&=00485398] INT(lg=2):02000002  (0,lgef=2):00000002
>     coef of degree 1 = [&=004853a0] INT(lg=3):02000003  (+,lgef=3):40000003  00000001
>   coef of degree 1 = [&=004853ac] POL(lg=4):14000004  (+,varn=1,lgef=4):40010004  004853bc  004853c4
>     coef of degree 0 = [&=004853bc] INT(lg=2):02000002  (0,lgef=2):00000002
>     coef of degree 1 = [&=004853c4] INT(lg=3):02000003  (+,lgef=3):40000003  00000001
>   coef of degree 2 = [&=004853d0] INT(lg=3):02000003  (+,lgef=3):40000003  00000001
>
> So when I ask for coef of degree 0, I would expect to get
>
>   coef of degree 0 = [&=00485388] POL(lg=4):14000004  (+,varn=2,lgef=4):40020004  00485398  004853a0
>     coef of degree 0 = [&=00485398] INT(lg=2):02000002  (0,lgef=2):00000002
>     coef of degree 1 = [&=004853a0] INT(lg=3):02000003  (+,lgef=3):40000003  00000001

And you do, when you start from %1 (which is shown by \x).

Let's try again.

? install(voir,"vGD-1,L,")
? T = x^2+y*x+z;
? voir(T) \\ _not_ the same as voir(%), i.e \x

[&=00a5d26c] POL(lg=5,CLONE):15000005  (+,varn=0,lgef=5):40000005  00a5d2d4
00a5d2a0  00a5d280
coef of degree 0 = [&=00a5d2d4] POL(lg=3):14000003 (+,varn=7,lgef=3):40070003  00a5d2c4
coef of degree 0 = [&=00a5d2c4] POL(lg=4):14000004 (+,varn=8,lgef=4):40080004  00a5d2bc  00a5d2b0
coef of degree 0 = [&=00a5d2bc]
coef of degree 1 = [&=00a5d2b0]
coef of degree 1 = [&=00a5d2a0] POL(lg=4):14000004 (+,varn=7,lgef=4):40070004  00a5d298  00a5d28c
coef of degree 0 = [&=00a5d298]
coef of degree 1 = [&=00a5d28c] [...]

See the extra layer ? What you get is

coef of degree 0 = [&=00a5d2d4] POL(lg=3):14000003 (+,varn=7,lgef=3):40070003  00a5d2c4
coef of degree 0 = [&=00a5d2c4] POL(lg=4):14000004 (+,varn=8,lgef=4):40080004  00a5d2bc  00a5d2b0
coef of degree 0 = [&=00a5d2bc]
coef of degree 1 = [&=00a5d2b0]

> What other PARI functions return "unsimplified" results?

Very few PARI functions return "simplified" results. For instance a few very
high-level number field routines [like rnfkummer] return rational numbers
(viewed as elements in the base field, which is in general not Q) as
t_FRAC/t_INT, not as t_POLMOD.

By default, gp applies simplify() before putting results in history.

Hope this is clearer,

Karim.
--
Karim Belabas                    Tel: (+33) (0)1 69 15 57 48
Dép. de Mathematiques, Bat. 425  Fax: (+33) (0)1 69 15 60 19
Université Paris-Sud             Email: Karim.Belabas@math.u-psud.fr
F-91405 Orsay (France)           http://www.math.u-psud.fr/~belabas/
--