Karim BELABAS on Tue, 16 Jul 2002 01:47:37 +0200 (MEST) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: polcoeff() mystery |
On Mon, 15 Jul 2002, Ilya Zakharevich wrote: > On Sun, Jul 14, 2002 at 05:37:54PM +0200, Karim BELABAS wrote: > > > Which algorithsms assume that a poly is "filled"? > > > Nearly everything operates on "filled" single variable polynomials. Once the > > higher level wrappers have done their stuff [ checking types, degrees, variable > > priorities, etc ], lower level routines assume everything is compatible (all args > > in sight are t_POL in the same variable) and operate on vectors of coefficients. > > Do you mean here the support for base arithmetic, or higher-level > stuff? If former, it is not out-of-hand to fix... The following assumption occurs in _many_ places in the code: if x, y are t_POL in variable v, then so is f(x, y), for all low-level routines f, like gadd / gmul / gres, etc. [ f(x,y) may be of degree 0, or -oo of course ] > > > > Maybe a print function that output 'foo^0 as 'foo^0 not 1 could be useful. > > > > > > \x *must*. > > > > \x *does*. Disable automatic simplification (\y) if you want \x to operate in the > > way you expect. > > This confuses me again, when I felt almost unconfused... Consider: > > ? aaa=x^2 + y*x + z; > ? aaa > %2 = x^2 + y*x + z > ? \x [...] > If every polynomial is filled, then aaa contains a filled poly, then > coefficient of degree 2 of aaa must be a polynomial in y - no matter > whether the simplifications are enabled or not. Right? I was unclear in my previous messages. Most polynomial are not "filled" in the sense implied in your query. x^2 + y*x + z (input as is) is really x^2 * 1 + x^1 * (1*y^1 + 0*y^0) + x^0 * y^0 * z This is not necessary: if input is x^2 + simplify(y*x) + z, one gets x^2 * 1 + x^1 * (1*y^1 + 0*y^0) + x^0 * z which is also a correct object. What I meant is that most pari routines handle and produce univariate polynomials (for some irrelevant coefficient ring). So a given multivariate polynomial, depending on its "history" may contain lots of polynomials of degree 0, which are only removed by simplify() [which is hardly ever called in the library code]. The routines do not care whether a polynomial is "filled" or not, but high level routines expect consistency when calling lower lever ones [and certainly never check return types]. This got mingled with another point, namely that \x does not operate on aaa. It operates on %2, which is equal to simplify(aaa), assuming automatic simplification is enabled. Hence part of the confusion. 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/ -- PARI/GP Home Page: http://www.parigp-home.de/