示例#1
0
bool SigPolyBasis::isSingularTopReducibleSlow(
  const Poly& poly,
  ConstMonoRef sig
) const {
  if (poly.isZero())
    return false;

  monomial multiplier = ring().allocMonomial();
  const size_t genCount = size();
  const auto polyLead = poly.leadMono();
  for (size_t i = 0; i < genCount; ++i) {
    if (!monoid().divides(leadMono(i), polyLead))
      continue;
    monoid().divide(leadMono(i), polyLead, multiplier);
    if (monoid().compare(sig, multiplier, signature(i)) == EQ)
      return true;
  }
  ring().freeMonomial(multiplier);
  return false;
}
示例#2
0
 /// Returns true if the lead monomial of poly is not divisible by the
 /// lead monomial of any basis element. Equality counts as divisibility.
 bool leadMinimal(const Poly& poly) const {
   MATHICGB_ASSERT(&poly != 0);
   return mMonoLookup->divisor(poly.leadMono()) !=
     static_cast<size_t>(-1);
 }