# UnivariatePolynomialDecompositionPackage(R, UP)¶

UnivariatePolynomialDecompositionPackage implements functional decomposition of univariate polynomial with coefficients in an `IntegralDomain` of `CharacteristicZero`.

completeDecompose: UP -> List UP if R has Field

`completeDecompose(f)` returns a list of factors of `f` for the functional decomposition of `f`. [`f1`, …, `fn`] means `f` = `f1` `o``o` `fn`.

decomposeIfCan: UP -> Union(Record(left: UP, right: UP), failed) if R has Field

`decomposeIfCan(f)` returns a functional decomposition of the polynomial `f` or “failed” if it has not found any.

leftFactorIfCan: (UP, UP) -> Union(UP, failed)

`leftFactorIfCan(f, h)` returns the left factor (`g` in `f` = `g` `o` `h`) of the functional decomposition of the polynomial `f` with given `h` or `"failed"` if `g` does not exist.

monicCompleteDecompose: UP -> List UP

`monicCompleteDecompose(f)` returns a list of factors of `f` for the functional decomposition of monic polynomial `f`. [`f1`, …, `fn`] means `f` = `f1` `o``o` `fn`.

monicDecomposeIfCan: UP -> Union(Record(left: UP, right: UP), failed)

`monicDecomposeIfCan(f)` returns a functional decomposition of the monic polynomial `f` or “failed” if it has not found any.

monicRightFactorIfCan: (UP, NonNegativeInteger) -> Union(UP, failed)

`monicRightFactorIfCan(f, d)` returns a candidate to be the monic right factor (`h` in `f` = `g` `o` `h`) of degree `d` of a functional decomposition of the polynomial `f` or `"failed"` if no such candidate.

rightFactorIfCan: (UP, NonNegativeInteger, R) -> Union(UP, failed)

`rightFactorIfCan(f, d, c)` returns a candidate to be the right factor (`h` in `f` = `g` `o` `h`) of degree `d` with leading coefficient `c` of a functional decomposition of the polynomial `f` or `"failed"` if no such candidate.