1#ifndef _free_algebra_hpp_
2#define _free_algebra_hpp_
80 const std::vector<std::string>& names,
82 const std::vector<int>& degrees,
83 const std::vector<int>& wtvecs,
84 const std::vector<int>& heftVector
98 void copy(
Poly&
result, Poly::const_iterator fBegin, Poly::const_iterator fEnd)
const;
122 Poly::const_iterator fBegin,
123 Poly::const_iterator fEnd,
124 Poly::const_iterator gBegin,
125 Poly::const_iterator gEnd)
const;
127 Poly::const_iterator fBegin,
128 Poly::const_iterator fEnd,
129 Poly::const_iterator gBegin,
130 Poly::const_iterator gEnd,
154 bool p_parens)
const;
176 const Monom m)
const;
180 const Monom m)
const;
185 const Monom rightM)
const;
189 const Monom rightM)
const;
193 const Word& w)
const;
197 const Word& w)
const;
202 const Word& rightW)
const;
206 const Word& rightW)
const;
222 int index_of_var(
const Poly& a)
const;
224 void text_out(
buffer &o)
const;
232 const Poly* f)
const;
238 Poly* get_terms(
const Poly* f,
int lo,
int hi)
const;
240 void debug_display(
const Poly* f)
const;
246 for (
auto a : f.mCoefficients)
249 f.mCoefficients.clear();
250 f.mMonomials.clear();
300 return this->
mRing->is_equal(**
this,*g);
varpower::ConstExponents const_varpower
std::ostream & operator<<(std::ostream &o, const FreeAlgebraElement &f)
FreeMonoid — monoid of length-prefixed non-commutative words with weight-vector prefix.
Polynomial< CoefficientRingType > Poly
Modern Monom / Polynomial value types shared by NC algebras and the refactored F4.
Word and WordWithData — non-owning views over the flat-int encoding of a non-commutative word.
const Ring * coefficientRing() const
void add(Poly &result, Poly::const_iterator fBegin, Poly::const_iterator fEnd, Poly::const_iterator gBegin, Poly::const_iterator gEnd) const
void power(Poly &result, const Poly &f, int n) const
void negate(Poly &result, const Poly &f) const
bool is_unit(const Poly &f) const
void subtract(Poly &result, const Poly &f, const Poly &g) const
void copy(Poly &result, Poly::const_iterator fBegin, Poly::const_iterator fEnd) const
void mult_by_term_right(Poly &result, const Poly &f, const ring_elem c, const Monom m) const
void add_to_end(Poly &f, const Poly &g) const
void from_long(Poly &result, long n) const
void mult_by_term_left(Poly &result, const Poly &f, const ring_elem c, const Monom m) const
void makeMonicInPlace(Poly &f) const
std::pair< int, bool > heft_degree(const Poly &f) const
void from_coefficient(Poly &result, const ring_elem a) const
bool is_homogeneous(const Poly &f) const
void subtractScalarMultipleOf(Poly &result, const Poly &f, const Poly &g, ring_elem coeff) const
void mult(Poly &result, const Poly &f, const Poly &g) const
bool from_rational(Poly &result, const mpq_srcptr q) const
M2_arrayint support(const Poly &f) const
bool multi_degree(const Poly &f, monomial already_allocated_degree_vector) const
void mult_by_coeff(Poly &result, const Poly &f, const ring_elem c) const
void clear(Poly &f) const
void var(Poly &result, int v) const
const_monomial degree(const Poly &f) const
const Monoid & degreeMonoid() const
Word lead_word_prefix(const Poly &f, int endIndex) const
const Ring & mCoefficientRing
SumCollector * make_SumCollector() const
FreeAlgebra(const Ring *K, std::shared_ptr< FreeMonoid > M)
unsigned int computeHashValue(const Poly &a) const
Word lead_word(const Poly &f) const
const FreeMonoid & monoid() const
void lead_term_as_poly(Poly &result, const Poly &f) const
bool is_zero(const Poly &f) const
static FreeAlgebra * create(const Ring *K, const std::vector< std::string > &names, const PolynomialRing *degreeRing, const std::vector< int > °rees, const std::vector< int > &wtvecs, const std::vector< int > &heftVector)
void makeMonic(Poly &result, Poly &f) const
void mult_by_term_left_and_right(Poly &result, const Poly &f, const ring_elem c, const Monom leftM, const Monom rightM) const
void from_word(Poly &result, const Word &word) const
void elem_text_out(buffer &o, const Poly &f, bool p_one, bool p_plus, bool p_parens) const
bool is_equal(const Poly &f, const Poly &g) const
long n_terms(const Poly &f) const
std::shared_ptr< FreeMonoid > mMonoid
ring_elem eval(const RingMap *map, const Poly &f, int first_var) const
void from_int(Poly &result, mpz_srcptr n) const
int compare_elems(const Poly &f, const Poly &g) const
Word lead_word_suffix(const Poly &f, int beginIndex) const
void addScalarMultipleOf(Poly &result, Poly::const_iterator fBegin, Poly::const_iterator fEnd, Poly::const_iterator gBegin, Poly::const_iterator gEnd, ring_elem coeff) const
void setZero(Poly &f) const
const Poly & operator*() const
FreeAlgebraElement operator+(const FreeAlgebraElement &g)
FreeAlgebraElement operator*(const FreeAlgebraElement &g)
FreeAlgebraElement(const FreeAlgebra *F, const Poly &f)
const FreeAlgebra * mRing
FreeAlgebraElement operator^(int n)
FreeAlgebraElement(const FreeAlgebra *F)
bool operator==(const FreeAlgebraElement &g) const
FreeAlgebraElement operator-(const FreeAlgebraElement &g)
FreeAlgebraElement operator-() const
const FreeAlgebra & ring() const
Owned Poly value paired with its FreeAlgebra*, providing natural operator-overloaded arithmetic.
const Poly & debug_list(int i) const
FreeAlgebraHeap(const FreeAlgebra &F)
Geobucket-style accumulator for many Poly summands in the free associative algebra.
Free associative algebra over a coefficient ring: the non-commutative analogue of PolynomialRing.
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...
monomial make_one() const
Engine-side commutative monomial monoid: variable names, ordering, multidegree machinery,...
Abstract base for the engine's polynomial-ring hierarchy.
virtual void remove(ring_elem &f) const =0
Engine-side ring homomorphism: stores, for each source-ring variable, the target-ring element it maps...
~SumCollectorFreeAlgebraHeap()
virtual void add(ring_elem f1)
SumCollectorFreeAlgebraHeap(const FreeAlgebra &F)
virtual ring_elem getValue()
Abstract incremental accumulator that builds a ring_elem from many add(f) calls.
Non-owning view of a non-commutative word: [begin, end) of int variable indices.
const int * const_monomial
VALGRIND_MAKE_MEM_DEFINED & result(result)
engine_RawArrayPair engine_RawArrayPairOrNull
our_new_delete — per-class opt-in routing of new / delete through bdwgc.
Ring — the legacy abstract base class for every coefficient and polynomial ring.
ring_elem — the universal value type carried by every Ring* in the engine.
Non-owning view onto a [length, degree, v1, v2, ..., vn] packed monomial in some externally managed b...
Engine-wide stylistic constants: LT / EQ / GT codes, INTSIZE, GEOHEAP_SIZE.
const void * get_Poly() const
const PolynomialRing * degreeRing(const std::vector< std::string > &names)