14 quotient_ideal.push_back(f);
15 quotient_gbvectors.push_back(g);
29 if (GR ==
nullptr)
return;
30 for (
int i = 0; i < quotient_gbvectors.size(); i++)
62 for (
int i = 0; i < quotients.size(); i++)
67 Nterm *f = quotients[i];
68 R->getMonoid()->to_expvector(f->
monom, exp);
72 if (!
Rideal->search_expvector(exp, not_used))
76 gbvector *g =
R->translate_gbvector_from_ringelem(f);
78 R->getMonoid()->to_varpower(f->
monom, vp);
79 Bag *b =
new Bag(index, vp);
99 const Monoid *M =
R->getMonoid();
102 if (
R->is_skew_commutative())
109 if (
R->getSkewInfo().mult_sign(EXP1, EXP2) < 0)
110 R->getCoefficients()->negate_to(c);
113 g1 =
R->mult_by_term(g1, c, MONOM1);
115 R->internal_add_to(f1, g1);
125 const Monoid *M =
R->getMonoid();
133 if (
Rideal->search_expvector(EXP1, b))
191 const Monoid *M =
R->getMonoid();
195 if (
R->is_skew_commutative())
202 if (
R->getSkewInfo().mult_sign(EXP1, EXP2) < 0)
206 g1 =
R->mult_by_term(g1, c, MONOM1);
208 R->internal_add_to(f1, g1);
218 const Monoid *M =
R->getMonoid();
226 if (
Rideal->search_expvector(EXP1, b))
322 for (
int i = 0; i < quotients.size(); i++)
327 Nterm *f = quotients[i];
328 R->getMonoid()->to_expvector(f->
monom, exp);
336 gbvector *g =
R->translate_gbvector_from_ringelem(f);
340 if (f->
next ==
nullptr &&
R->getMonoid()->is_one(f->
monom))
354 const Monoid *M =
R->getMonoid();
358 rem =
globalZZ->remainderAndQuotient(a, b, v);
359 if (
globalZZ->is_zero(v))
return false;
363 M->
divide(f->monom, g->monom, MONOM1);
364 if (
R->is_skew_commutative())
371 if (
R->getSkewInfo().mult_sign(EXP1, EXP2) < 0)
372 R->getCoefficients()->negate_to(v);
377 g1 =
R->mult_by_term(g1, v, MONOM1);
379 R->internal_add_to(f1, g1);
390 const Monoid *M =
R->getMonoid();
397 int w =
ringtableZZ->find_smallest_coeff_divisor(EXP1, 1);
427 int w =
ringtableZZ->find_smallest_coeff_divisor(EXP1, 1);
exponents::Exponents exponents_t
ConcreteRing<RingType> — the templated bridge between aring and the legacy Ring API.
Engine-side free module R^n over a Ring.
bool gbvector_reduce_lead_term_ZZ(const FreeModule *F, const FreeModule *Fsyz, gbvector *&f, gbvector *&fsyz, const gbvector *g, const gbvector *gsyz)
void gbvector_remove(gbvector *f)
void gbvector_get_lead_exponents(const FreeModule *F, const gbvector *f, int *result)
void gbvector_reduce_lead_term(const FreeModule *F, const FreeModule *Fsyz, gbvector *flead, gbvector *&f, gbvector *&fsyz, const gbvector *g, const gbvector *gsyz, bool use_denom, ring_elem &denom)
Polynomial-ring view tuned for the inner loop of classical Buchberger Groebner-basis computations.
void to_expvector(const_monomial m, exponents_t result_exp) const
void divide(const_monomial m, const_monomial n, monomial result) const
Engine-side commutative monomial monoid: variable names, ordering, multidegree machinery,...
Engine-side monomial ideal: a decision tree of Nmi_nodes storing the (typically minimal) generators b...
static MonomialTable * make(int nvars)
static MonomialTableZZ * make(int nvars)
Concrete PolyRingFlat subclass implementing ordinary commutative polynomial rings K[x_1,...
void normal_form(ring_elem &f) const
void gbvector_normal_form(const FreeModule *F, gbvector *&f) const
bool reduce_lead_term_ZZ(Nterm *&f, const Nterm *g) const
ring_elem ZZ_quotient_value_
QRingInfo_ZZ(const PolyRing *ambientR, const VECTOR(Nterm *) "ients)
MonomialTableZZ * ringtableZZ
QRingInfo_field_QQ(const PolyRing *ambientR, const VECTOR(Nterm *) "ients)
void gbvector_normal_form(const FreeModule *F, gbvector *&f) const
void normal_form(ring_elem &f) const
void reduce_lead_term_QQ(Nterm *&f, const Nterm *g) const
void gbvector_normal_form(const FreeModule *F, gbvector *&f) const
QRingInfo_field_basic(const PolyRing *ambientR, const VECTOR(Nterm *) "ients)
void normal_form(ring_elem &f) const
void reduce_lead_term_basic_field(Nterm *&f, const Nterm *g) const
MonomialTable * ringtable
QRingInfo_field(const PolyRing *ambientR, const VECTOR(Nterm *) "ients)
Nterm * quotient_element(int i) const
virtual void destroy(GBRing *GR)
const gbvector * quotient_gbvector(int i) const
QRingInfo(const PolyRing *R)
void appendQuotientElement(Nterm *f, gbvector *g)
GBRing and gbvector — the GB-tuned polynomial-ring view used by classical Buchberger code.
VALGRIND_MAKE_MEM_DEFINED & result(result)
MonomialIdeal — exponent-vector-only representation of an ideal generated by monomials.
#define MONOMIAL_BYTE_SIZE(mon_size)
#define ALLOCATE_EXPONENTS(byte_len)
#define EXPONENT_BYTE_SIZE(nvars)
#define ALLOCATE_MONOMIAL(byte_len)
MonomialTable — leading-monomial divisor index used by the GB reducer.
MonomialTableZZ — coefficient-aware leading-monomial index for ZZ-coefficient Groebner bases.
typename std::vector< T, gc_allocator< T > > gc_vector
a version of the STL vector, which allocates its backing memory with gc.
#define newarray_atomic(T, len)
Concrete commutative PolyRing — standard polynomial ring inheriting from PolyRingFlat.
QRingInfo family — bookkeeping plus normal-form machinery attached to a PolyRingQuotient for R / I re...
Singly linked-list node carrying one term of a polynomial-ring element.
mpz_srcptr get_mpz() const