up previous next
MinPolyQuot, MinPolyQuotDef, MinPolyQuotElim, MinPolyQuotMat

compute a minimal polynomial

Syntax
MinPolyQuot(f: RINGELEM, I: IDEAL, z: RINGELEM): RINGELEM
MinPolyQuot(f: RINGELEM, I: IDEAL, z: RINGELEM, VerificationLevel: INT): RINGELEM
MinPolyQuotDef(f: RINGELEM, I: IDEAL, z: RINGELEM): RINGELEM
MinPolyQuotElim(f: RINGELEM, I: IDEAL, z: RINGELEM): RINGELEM
MinPolyQuotMat(f: RINGELEM, I: IDEAL, z: RINGELEM): RINGELEM

Description
These functions return the minimal polynomial (in the indeterminate z ) of the element f modulo the 0-dimensional ideal I .

See article Abbott, Bigatti, Palezzato, Robbiano "Computing and Using Minimal Polynomials" ( https://arxiv.org/abs/1702.07262 )

When coefficients are in QQ , MinPolyQuot uses modular methods. If called with VerificationLevel equal to n>=0 the result polynomial is verified over FF_p , with n different primes (if n=0, not verified).

Verbosity: At level 80 it lists all primes used, indicating any which are bad.

Example
/**/ use P ::= QQ[x,y];
/**/ I := IdealOfPoints(P, mat([[1,2], [3,4], [5,6]]));
/**/ MinPolyQuot(x,I,x); -- the smallest x-univariate poly in I
x^3 -9*x^2 +23*x -15
/**/ indent(factor(It));
record[
  RemainingFactor := 1,
  factors := [x -1, x -3, x -5],
  multiplicities := [1, 1, 1]
]

/**/ f := x+y;
/**/ I := ideal(x^2, y^2);
/**/ MinPolyQuot(f,I,x);
x^3
/**/ subst(It, x, f) isin I;
true

/**/ use QQ[x,y];
/**/ I := ideal(x^3-5,y^2-3);
/**/ f := x+y;
/**/ SetVerbosityLevel(80);
/**/ MinPolyQuot(f, I, x);
1: prime is 32009
2: prime is 32027
x^6 -9*x^4 -10*x^3 +27*x^2 -90*x -2

---- this is how to use an indet in another ring:
/**/ QQt := RingQQt(1);
/**/ MinPolyQuot(f, I, indet(RingQQt(1),1));
t^3

See Also