-
Let M denote a matrix.
Let z denote an indeterminate in a polynomial ring.
RingElem MinPoly(ConstMatrixView M, ConstRefRingElem z);
the minimal polynomial (in z) of M.
Let P denote a SparsePolyRing over Z/(p) or QQ.
Let I denote an ideal in P.
Let f denote an element of P.
Let fbar denote an element of P/I.
Let f denote an element of P.
Let NumChecks denote a VerificationLevel.
RingElem MinPoly(fbar, z) --
the minimal polynomial (in z) of fbar.
RingElem MinPolyQuot(f, I, z, NumChecks) --
the minimal polynomial (in z) of f modulo I.
Uses modular computation and MinPolyQuotDef.
The modular computation is verified over NumChecks new primes.
For NumChecks=0 there is full verification over QQ.
RingElem MinPolyQuot(f, I, z) -- same as MinPolyQuot(f,I,z, 0)
RingElem MinPolyQuotMat(ConstRefRingElem f, const ideal& I, ConstRefRingElem z);
RingElem MinPolyQuotDef(ConstRefRingElem f, const ideal& I, ConstRefRingElem z);
RingElem MinPolyQuotDefLin(ConstRefRingElem f, const ideal& I, ConstRefRingElem z);
RingElem MinPolyQuotElim(ConstRefRingElem f, const ideal& I, ConstRefRingElem z);
RingElem MinPolyMat(ConstRefRingElem fbar, ConstRefRingElem z);
RingElem MinPolyDef(ConstRefRingElem fbar, ConstRefRingElem z);
RingElem MinPolyElim(ConstRefRingElem fbar, ConstRefRingElem z);
specific implementations
(not modular: computation actually in QQ if coeff are in QQ)
See article Abbott, Bigatti, Palezzato, Robbiano
"Computing and Using Minimal Polynomials"
("https://arxiv.org/abs/1702.07262")
matrix FrobeniusMat(const ideal& I);
matrix FrobeniusMat(const ideal& I, const std::vector<PPMonoidElem>& QB2);
std::vector<RingElem> ShapeLemma(const ideal& I);
"MinPolyQuot" uses modular methods when coefficients are in "QQ". At level 80 it lists all primes used indicating any which are "bad".
2018