3#ifndef _polyquotient_hpp_
4#define _polyquotient_hpp_
108 if (not ok)
return false;
164 return numerR_->preferred_associate(f);
174 return numerR_->divide_by_given_content(f, c);
181 return numerR_->PolyRing::is_zero(f);
186 return numerR_->PolyRing::is_equal(f, g);
191 return numerR_->PolyRing::compare_elems(f, g);
196 return numerR_->PolyRing::copy(f);
254 bool p_parens =
false)
const
256 numerR_->PolyRing::elem_text_out(o, f, p_one, p_plus, p_parens);
261 int first_var)
const;
268 return numerR_->PolyRing::index_of_var(a);
273 return numerR_->PolyRing::support(a);
283 return numerR_->PolyRing::multi_degree(f, d);
287 const std::vector<int> &wts,
291 return numerR_->PolyRing::degree_weights(f, wts, lo, hi);
297 const std::vector<int> &wts)
const
306 const std::vector<int> &wts)
const
324 return numerR_->PolyRing::n_flat_terms(f);
329 return numerR_->PolyRing::n_logical_terms(nvars0, f);
335 return numerR_->PolyRing::list_form(coeffR, f);
340 long &result_len)
const
342 return numerR_->PolyRing::get_parts(wts, f, result_len);
352 return numerR_->PolyRing::get_part(
353 wts, f, lobound_given, hibound_given, lobound, hibound);
375 return numerR_->PolyRing::lead_flat_coeff(f);
381 return numerR_->PolyRing::lead_logical_coeff(coeffR, f);
388 return numerR_->PolyRing::get_coeff(coeffR, f, vp);
398 return numerR_->PolyRing::get_terms(nvars0, f, lo, hi);
406 return numerR_->PolyRing::lead_flat_monomial(f);
413 numerR_->PolyRing::lead_logical_exponents(nvars0, f, result_exp);
418 numerR_->PolyRing::mult_coeff_to(a, f);
423 numerR_->PolyRing::divide_coeff_to(f, a);
429 return numerR_->PolyRing::monomial_divisor(a, exp);
435#warning "diff for quotient rings: should do what?"
437 return numerR_->PolyRing::diff(a, b, use_coeff);
442 return numerR_->PolyRing::in_subring(nslots, a);
447 return numerR_->PolyRing::degree_of_var(n, a, lo, hi);
452 return numerR_->PolyRing::divide_by_var(n, d, a);
457 return numerR_->PolyRing::divide_by_expvector(exp, a);
464 return numerR_->PolyRing::vec_locate_lead_term(F, v);
469 return numerR_->PolyRing::vec_lead_term(nparts, F, v);
474 return numerR_->vec_top_coefficient(v,
x, e);
479 return numerR_->PolyRing::translate_gbvector_from_ringelem(coeff);
489 return numerR_->PolyRing::translate_gbvector_from_vec(
490 F, v, result_denominator);
496 return numerR_->PolyRing::translate_gbvector_to_vec(F, v);
508 return numerR_->PolyRing::translate_gbvector_to_vec_denom(F, v, denom);
varpower::ConstExponents const_varpower
exponents::ConstExponents const_exponents
exponents::Exponents exponents_t
Engine-side free module R^n over a Ring.
base class for Groebner basis computations.
PolynomialRing subclass whose elements are represented as a single flat Nterm* linked list (no fracti...
virtual bool in_subring(int nslots, const ring_elem a) const
virtual void mult_coeff_to(ring_elem a, ring_elem &f) const
virtual vec translate_gbvector_to_vec_denom(const FreeModule *F, const gbvector *v, const ring_elem denom) const
virtual bool from_Interval(gmp_RRi a, ring_elem &result) const
virtual ring_elem divide(const ring_elem f, const ring_elem g) const
virtual ring_elem subtract(const ring_elem f, const ring_elem g) const
virtual ring_elem divide_by_var(int n, int d, const ring_elem a) const
virtual void divide_coeff_to(ring_elem &f, ring_elem a) const
virtual void degree_weights(const ring_elem f, const std::vector< int > &wts, int &lo, int &hi) const
virtual ring_elem from_int(mpz_srcptr n) const
virtual ring_elem * get_parts(const std::vector< int > &wts, const ring_elem f, long &result_len) const
virtual ring_elem diff(ring_elem a, ring_elem b, int use_coeff) const
virtual bool from_ComplexInterval(gmp_CCi a, ring_elem &result) const
virtual int index_of_var(const ring_elem a) const
friend class PolynomialRing
virtual void text_out(buffer &o) const
virtual gbvector * translate_gbvector_from_ringelem(ring_elem coeff) const
virtual vec vec_lead_term(int nparts, const FreeModule *F, vec v) const
virtual ring_elem get_terms(int nvars0, const ring_elem f, int lo, int hi) const
virtual ring_elem from_long(long n) const
virtual ring_elem divide_by_expvector(const_exponents exp, const ring_elem a) const
ring_elem ann(const ring_elem a, const ring_elem b) const
virtual ring_elem lead_logical_coeff(const Ring *coeffR, const ring_elem f) const
virtual ring_elem make_logical_term(const Ring *coeffR, const ring_elem a, const_exponents exp) const
virtual ring_elem add(const ring_elem f, const ring_elem g) const
virtual bool from_BigComplex(gmp_CC z, ring_elem &result) const
virtual gbvector * translate_gbvector_from_vec(const FreeModule *F, const vec v, ring_elem &result_denominator) const
virtual ~PolyRingQuotient()
virtual ring_elem quotient(const ring_elem f, const ring_elem g) const
virtual bool from_BigReal(gmp_RR a, ring_elem &result) const
virtual int compare_elems(const ring_elem f, const ring_elem g) const
virtual ring_elem negate(const ring_elem f) const
virtual M2_arrayint support(const ring_elem a) const
virtual engine_RawArrayPairOrNull list_form(const Ring *coeffR, const ring_elem f) const
virtual ring_elem make_flat_term(const ring_elem a, const_monomial m) const
virtual ring_elem homogenize(const ring_elem f, int v, const std::vector< int > &wts) const
virtual bool is_equal(const ring_elem f, const ring_elem g) const
virtual void degree_of_var(int n, const ring_elem a, int &lo, int &hi) const
virtual ring_elem get_part(const std::vector< int > &wts, const ring_elem f, bool lobound_given, bool hibound_given, long lobound, long hibound) const
GBComputation * make_gb(const ring_elem g) const
virtual ring_elem invert(const ring_elem f) const
virtual ring_elem random() const
virtual ring_elem content(ring_elem f) const
virtual ring_elem remainder(const ring_elem f, const ring_elem g) const
virtual ring_elem copy(const ring_elem f) const
virtual int n_flat_terms(const ring_elem f) const
virtual int n_logical_terms(int nvars0, const ring_elem f) const
virtual ring_elem divide_by_given_content(ring_elem f, ring_elem c) const
virtual ring_elem power(const ring_elem f, mpz_srcptr n) const
Exponentiation. This is the default function, if a class doesn't define this.
virtual void lead_logical_exponents(int nvars0, const ring_elem f, exponents_t result_exp) const
virtual ring_elem lead_flat_coeff(const ring_elem f) const
virtual vec vec_top_coefficient(const vec v, int &x, int &e) const
virtual bool promote(const Ring *R, const ring_elem f, ring_elem &result) const
virtual bool from_rational(mpq_srcptr q, ring_elem &result) const
virtual bool multi_degree(const ring_elem f, monomial d) const
virtual ring_elem remainderAndQuotient(const ring_elem f, const ring_elem g, ring_elem ") const
virtual ring_elem mult_by_term(const ring_elem f, const ring_elem c, const_monomial m) const
virtual ring_elem eval(const RingMap *map, const ring_elem f, int first_var) const
virtual vec translate_gbvector_to_vec(const FreeModule *F, const gbvector *v) const
virtual void syzygy(const ring_elem a, const ring_elem b, ring_elem &x, ring_elem &y) const
virtual ring_elem var(int v) const
virtual void elem_text_out(buffer &o, const ring_elem f, bool p_one=true, bool p_plus=false, bool p_parens=false) const
virtual PolyRingQuotient * cast_to_PolyRingQuotient()
const vecterm * vec_locate_lead_term(const FreeModule *F, vec v) const
virtual bool lift(const Ring *R, const ring_elem f, ring_elem &result) const
virtual ring_elem homogenize(const ring_elem f, int v, int deg, const std::vector< int > &wts) const
virtual void lower_content(ring_elem &c, ring_elem g) const
virtual bool is_homogeneous(const ring_elem f) const
virtual const PolyRingQuotient * cast_to_PolyRingQuotient() const
void normal_form(ring_elem &f) const
virtual bool from_double(double a, ring_elem &result) const
virtual const_monomial lead_flat_monomial(const ring_elem f) const
virtual ring_elem preferred_associate(ring_elem f) const
virtual bool from_complex_double(double re, double im, ring_elem &result) const
virtual bool is_zero(const ring_elem f) const
virtual void monomial_divisor(const ring_elem a, exponents_t exp) const
virtual ring_elem get_coeff(const Ring *coeffR, const ring_elem f, const_varpower vp) const
virtual bool is_unit(const ring_elem f) const
virtual void remove(ring_elem &f) const
virtual ring_elem mult(const ring_elem f, const ring_elem g) const
Engine-side ring homomorphism: stores, for each source-ring variable, the target-ring element it maps...
Engine-wide include prelude — a single point of truth for portability shims.
const int * const_monomial
VALGRIND_MAKE_MEM_DEFINED & result(result)
struct gmp_CC_struct * gmp_CC
engine_RawArrayPair engine_RawArrayPairOrNull
struct gmp_CCi_struct * gmp_CCi
Concrete commutative PolyRing — standard polynomial ring inheriting from PolyRingFlat.
PolynomialRing — abstract polynomial-ring base, the engine's most-reused class.
QRingInfo family — bookkeeping plus normal-form machinery attached to a PolyRingQuotient for R / I re...
ring_elem — the universal value type carried by every Ring* in the engine.