Gerhard Niklasch on Tue, 1 Sep 1998 12:45:22 +0200 (MET DST)

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

Re: bug of t_POLMOD ?

In response to:
> Message-Id: <>
> Date: Tue, 01 Sep 1998 17:56:20 +0900 (JST)
> From: Kiyoshi Ohgishi <>
> Don't work as I expected.
> Example)
> ? A=Mod(Mod(1, 2)*X, Mod(1, 2)*X^3 + Mod(1, 2)*X + Mod(1, 2))
> %1 = Mod(Mod(1, 2)*X, Mod(1, 2)*X^3 + Mod(1, 2)*X + Mod(1, 2))
> ? A^0
> %2 = Mod(1, Mod(1, 2)*X^3 + Mod(1, 2)*X + Mod(1, 2))
> ? A^0+A^0
> %3 = Mod(2, Mod(1, 2)*X^3 + Mod(1, 2)*X + Mod(1, 2))

You were expecting %2 to read
    Mod(Mod(1, 2), ...)
and %3 to read
    Mod(Mod(0, 2), ...),

The short answer is:  Multiply things by Mod(1,2) to force the
results you want  (and to make equality tests meaningful).

A longer answer is that polynomials in PARI can have coefficients
of mixed type, some integers, some integermods  (there are some
restrictions, and indeed I find these don't seem to work the way
they should -- will investigate later),  and thus it would be
quite impossible to formulate a general rule what sort of unit
element should be the result of (some polynomial)^0 -- should
we let ourselves be guided by the type of the constant coefficient?
or of the leading coefficient?  or choose a type to which each
coefficient can be projected  (integer if all coefficients are
integers, integermod the gcd of all moduli otherwise)?  or a type
which can be projected to each coefficient type?  PARI takes the
latter approach.  The element 1 of the ring of integers is the
only answer which is `safe' in the sense that it can be mapped
canonically into whatever ring you need.

(It can get even worse.  Try 1.2*X^2+3*X+Mod(1,2) ... It behaves
reasonably so long as you don't do anything which causes a real
by integermod multiplication.)

For working in algebras over finite fields, constructions like
          (ideal in Z[X] generated by a prime and by
           one or more polynomials)
(as pioneered by Kronecker more than a century ago)  would perhaps
be useful, but PARI's internal representation of an object like A
is not symmetrical in the prime and the modulus polynomial, but
hierarchical -- a polmod of two polynomial components, whose coef-
ficients happen to be integermods to modulus 2  (and could equally
well be of other types).