Instances For
Returns some c, where c is an equation from the basis whose leading monomial divides m.
Remark: if the current ring does not satisfy the property
∀ (k : Nat) (a : α), k ≠ 0 → OfNat.ofNat (α := α) k * a = 0 → a = 0
then the leading coefficient of the equation must also divide k
Instances For
Returns some c, where c is an equation from the basis whose leading monomial divides some
monomial in p.
Instances For
Simplifies d.p using c, and returns an extended polynomial derivation.
Instances For
Instances For
Simplified d.p using the current basis, and returns the extended polynomial derivation.
Instances For
Simplifies c₁ using c₂.
Instances For
Simplifies c₁ using c₂ exhaustively.
Instances For
Simplify the given equation constraint using the current basis.
Note: This function (and simplifyBasis) runs with checkCoeffDvd := true. It rewrites a
monomial k'*m' using an equation with leading term k*m only if k ∣ k' (or the ring
implements NoNatZeroDivisors). Rewriting without this restriction requires multiplying the
equation by k/gcd k k' ≠ ±1 first, and replacing an equation with the result loses
information: p = 0 cannot be recovered from (k/gcd k k') * p = 0 in an arbitrary
commutative ring. The consequences of the skipped rewrites are not lost: a skipped rewrite at
the leading monomial coincides with the S-polynomial computed by superposeWith, so it is
derived non-destructively. The price is that the basis is not
fully interreduced (e.g., 2*x = 0 and 3*x = 0 may coexist), and reduction is an incomplete
ideal-membership test in rings without NoNatZeroDivisors (e.g., x = 0 is not derived from
2*x = 0 and 3*x = 0). The complete alternative is a strong Gröbner basis over Int
(Kandri-Rody & Kapur): replace multiply-through rewriting with Euclidean remainder reduction
on coefficients (k' = q*k + r, so the equation is never multiplied by a constant), and
additionally superpose gcd-polynomials (Bézout combinations producing gcd k k' times the lcm
of the leading monomials). We should consider this option in the future.
Note: If using withCheckCoeffDvd becomes too expensive when one does not have
NoNatZeroDivisors, we will add a flag to perform the simplification anyway even if
information is lost.
Instances For
Returns true if c.p is the constant polynomial.
Instances For
Simplifies and checks whether the resulting constraint is trivial (i.e., 0 = 0),
or inconsistent (i.e., k = 0 where k % c != 0 for a comm-ring with characteristic c),
and returns none. Otherwise, returns the simplified constraint.
Instances For
Instances For
Tries to convert the leading monomial into a monic one.
It exploits the fact that given a polynomial with leading coefficient k,
if the ring has a nonzero characteristic p and gcd k p = 1, then
k has an inverse.
It also handles the easy case where k is -1.
Remark: if the ring implements the class NoNatZeroDivisors, then
the coefficients are divided by the gcd of all coefficients.
Instances For
Simplifies the basis using c. Every equation that c rewrites is removed from the basis
and requeued in its rewritten form.
See Note at EqCnstr.simplify for why checkCoeffDvd must be enabled here.
Instances For
Instances For
Returns true if c.d.p is the constant polynomial.