Singular Manual: decomp_lib

> | ### D.4.6 decomp_lib Library: decomp.lib Purpose: Functional Decomposition of Polynomials Author: Christian Gorzel, University of Muenster email: gorzelc@math.uni-muenster.de Overview: This library implements functional uni-multivariate decomposition of multivariate polynomials. A (multivariate) polynomial f is a composite if it can be written as 988#988 where g is univariate and h is multivariate, where 989#989. Uniqueness for monic polynomials is up to linear coordinate change 990#990. If f is a composite, then `decompose(f);` returns an ideal (g,h); such that 991#991 is maximal, ( 992#992). The polynomial h is, by the maximality of 993#993, not a composite. The polynomial g is univariate in the (first) variable vvar of f, such that deg_vvar(f) is maximal. `decompose(f,1);` computes a full decomposition, i.e. if f is a composite, then an ideal 994#994 is returned, where 995#995 are univariate and each entry is primitive such that 996#996. If f is not a composite, for instance if 997#997 is prime, then `decompose(f);` returns f. The command `decompose` is the inverse: `compose(decompose(f,1))==f`. Recall, that Chebyshev polynomials of the first kind commute by composition. The decomposition algorithms work in the tame case, that is if char(basering)=0 or p:=char(basering) > 0 but deg(g) is not divisible by p. Additionally, it works for monic polynomials over 30#30 and in some cases for monic polyomials over coefficient rings. See `is_composite` for examples. (It also works over the reals but there it seems not be numerical stable.) More information on the univariate resp. multivariate case. Univariate decomposition is created, with the additional assumption 989#989. A multivariate polynomial f is a composite, if f can be written as 988#988, where 149#149 is a univariate polynomial and 998#998 is multivariate. Note, that unlike in the univariate case, the polynomial 998#998 may be of degree 296#296. E.g. 999#999 is the composite of 1000#1000 and 1001#1001. If `nvars(basering)>1`, then, by default, a single-variable multivariate polynomial is not considered to be the same as in the one-variable polynomial ring; it will always be decomposed. That is: `> ring r1=0,x,dp;` `> decompose(x3+2x+1);` `x3+2x+1` but: `> ring r2=0,(x,y),dp;` `> decompose(x3+2x+1);` `_[1]=x3+2x+1` `_[2]=x` In particular: `is_composite(x3+2x+1)==1;` in `ring r1` but `is_composite(x3+2x+1)==0;` in `ring r2`. This is justified by interpreting the polynomial decomposition as an affine Stein factorization of the mapping 1002#1002. The behaviour can changed by the some global variables. `int DECMETH;` choose von zur Gathen's or Kozen-Landau's method. `int MINS;` compute f = g o h, such that h(0) = 0. `int IMPROVE;` simplify the coefficients of g and h if f is not monic. `int DEGONE;` single-variable multivariate are considered uni-variate. See `decompopts;` for more information. Additional information is displayed if `printlevel > 0`. References: D. Kozen, S. Landau: Polynomial Decomposition Algorithms, J. Symb. Comp. (1989), 7, 445-456. J. von zu Gathen: Functional Decomposition of Polynomials: the Tame Case, J. Symb. Comp. (1990), 9, 281-299. J. von zur Gathen, J. Gerhard: Modern computer algebra, Cambridge University Press, Cambridge, 2003. Procedures:
> D.4.6.1 decompopts |  | displays resp. resets global options
> D.4.6.2 decompose |  | [complete] functional decomposition of poly f
> D.4.6.3 is_composite |  | predicate, is f a composite polynomial?
> D.4.6.4 chebyshev |  | the nth Chebyshev polynomial of the first kind
> D.4.6.5 compose |  | compose f1 (f2 (...(fn))), f_i polys of ideal
> Auxiliary procedures:
> D.4.6.6 makedistinguished |  | transforms f to a var-distinguished polynomial // divisors(n[,1]); intvec [increasing] of the divisors d of n // gcdv(v); the gcd of the entries in intvec v // maxdegs(f); maximal degree for each variable of the poly f // randomintvec(n,a,b[,1]); random intvec size n, [non-zero] entries in {a,b}

User manual for Singular version 4.4.1, 2025, generated by texi2html.