1#ifndef _m2_free_algebra_quotient_hpp_
2#define _m2_free_algebra_quotient_hpp_
74 std::unique_ptr<FreeAlgebraQuotient> A
128 bool p_parens)
const;
156 const int* lead_monomial(
const Poly* f)
const;
157 const int* lead_monomial(
const ring_elem f)
const {
return lead_monomial
reinterpret_cast<const Poly*
>((f.
get_Poly())); }
A FreeAlgebra modulo a two-sided ideal carried by an embedded NCGroebner.
FreeMonoid — monoid of length-prefixed non-commutative words with weight-vector prefix.
Ring-shaped wrapper that exposes a non-commutative FreeAlgebra to the rest of the engine.
Polynomial< CoefficientRingType > Poly
Modern Monom / Polynomial value types shared by NC algebras and the refactored F4.
Free associative algebra over a coefficient ring: the non-commutative analogue of PolynomialRing.
Quotient of a FreeAlgebra by a Groebner basis up to a fixed degree bound.
const Monoid & degreeMonoid() const
unsigned int numVars() const
The free non-commutative monoid on a set of named variables, with monomial ordering and degree / weig...
const FreeAlgebra & freeAlgebra() const
const Ring * coefficientRing() const
const FreeMonoid & monoid() const
Poly * get_terms(const Poly *f, int lo, int hi) const
Concrete Ring wrapper around an owned FreeAlgebra (no quotient).
Abstract Ring subclass that lifts either a FreeAlgebra or a FreeAlgebraQuotient into the engine's Rin...
virtual bool lift(const Ring *R, const ring_elem f, ring_elem &result) const
virtual ring_elem divide(const ring_elem f, const ring_elem g) const
virtual ring_elem invert(const ring_elem f) const
virtual bool multi_degree(const ring_elem f, monomial d) const
virtual const M2FreeAlgebraQuotient * cast_to_M2FreeAlgebraQuotient() const
static M2FreeAlgebraQuotient * create(const M2FreeAlgebra &F, const Matrix *GB, int maxdeg)
virtual SumCollector * make_SumCollector() const
virtual bool is_equal(const ring_elem f, const ring_elem g) const
virtual ring_elem from_int(mpz_srcptr n) const
virtual ring_elem eval(const RingMap *map, const ring_elem f, int first_var) const
virtual bool from_rational(const mpq_srcptr q, ring_elem &result) const
virtual ring_elem negate(const ring_elem f) const
virtual ring_elem subtract(const ring_elem f, const ring_elem g) const
virtual void remove(ring_elem &f) const
virtual ring_elem var(int v) const
const FreeAlgebra & freeAlgebra() const
const M2FreeAlgebra & mM2FreeAlgebra
virtual engine_RawArrayPairOrNull list_form(const Ring *coeffR, const ring_elem f) const
virtual void elem_text_out(buffer &o, const ring_elem f, bool p_one, bool p_plus, bool p_parens) const
const FreeAlgebraQuotient & freeAlgebraQuotient() const
ring_elem get_terms(const ring_elem f, int lo, int hi) const
void debug_display(const Poly *f) const
virtual ring_elem from_coefficient(const ring_elem a) const
Poly * get_terms(const Poly *f, int lo, int hi) const
virtual ring_elem from_long(long n) const
void makeTerm(Poly &result, const ring_elem a, const int *monom) const
virtual bool is_zero(const ring_elem f) const
virtual ring_elem mult(const ring_elem f, const ring_elem g) const
const Ring * coefficientRing() const
virtual void text_out(buffer &o) const
virtual ring_elem add(const ring_elem f, const ring_elem g) const
virtual int index_of_var(const ring_elem a) const
ring_elem lead_coefficient(const Ring *coeffRing, const Poly *f) 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 int compare_elems(const ring_elem f, const ring_elem g) const
virtual void syzygy(const ring_elem a, const ring_elem b, ring_elem &x, ring_elem &y) const
const M2FreeAlgebra & m2FreeAlgebra() const
long n_terms(const ring_elem f) const
ring_elem makeTerm(const ring_elem a, const int *monom) const
virtual ring_elem copy(const ring_elem f) const
ring_elem lead_coefficient(const Ring *coeffRing, const ring_elem f) const
virtual bool is_homogeneous(const ring_elem f) const
M2FreeAlgebraQuotient(const M2FreeAlgebra &F, std::unique_ptr< FreeAlgebraQuotient > A)
virtual bool is_unit(const ring_elem f) const
const Monoid & degreeMonoid() const
virtual M2FreeAlgebraQuotient * cast_to_M2FreeAlgebraQuotient()
virtual unsigned int computeHashValue(const ring_elem a) const
const FreeMonoid & monoid() const
const std::unique_ptr< FreeAlgebraQuotient > mFreeAlgebraQuotient
virtual bool promote(const Ring *R, const ring_elem f, ring_elem &result) const
Engine-side commutative monomial monoid: variable names, ordering, multidegree machinery,...
Engine-side ring homomorphism: stores, for each source-ring variable, the target-ring element it maps...
Abstract incremental accumulator that builds a ring_elem from many add(f) calls.
Engine-wide include prelude — a single point of truth for portability shims.
VALGRIND_MAKE_MEM_DEFINED & result(result)
engine_RawArrayPair engine_RawArrayPairOrNull
ring_elem — the universal value type carried by every Ring* in the engine.
const void * get_Poly() const