17 for (
int i=0; i<input->
n_cols(); i++)
46 std::unique_ptr<FreeAlgebraQuotient> A)
90 if (!worked)
return false;
114 auto resultf =
new Poly;
134 if (f->numTerms() != 1)
return false;
135 auto i = f->cbegin();
136 if (
monoid().is_one(i.monom()))
147 auto resultf =
new Poly;
274 std::cout <<
"coeffs: ";
275 for (
auto i=f->cbeginCoeff(); i != f->cendCoeff(); ++i)
279 std::cout << o.
str() <<
" ";
281 std::cout << std::endl <<
" monoms: ";
282 for (
auto i=f->cbeginMonom(); i != f->cendMonom(); ++i)
284 std::cout << (*i) <<
" ";
286 std::cout << std::endl;
306 return ring_elem(
reinterpret_cast<void*
>(f));
352 if (f ==
nullptr)
return true;
varpower::ConstExponents const_varpower
Free associative algebra k<x_1,...,x_n> over an arbitrary coefficient ring.
ConstPolyList copyMatrixToVector(const M2FreeAlgebra &F, const Matrix *input)
Ring-shaped façade around a non-commutative quotient algebra.
gc_vector< const Poly * > ConstPolyList
Polynomial< CoefficientRingType > Poly
void copy(Poly &result, Poly::const_iterator fBegin, Poly::const_iterator fEnd) const
void from_coefficient(Poly &result, const ring_elem a) const
SumCollector * make_SumCollector() const
void mult(Poly &result, const Poly &f, const Poly &g) const
void elem_text_out(buffer &o, const Poly &f, bool p_one, bool p_plus, bool p_parens) const
ring_elem eval(const RingMap *map, const Poly &f, int first_var) const
int compare_elems(const Poly &f, const Poly &g) const
bool is_unit(const Poly &f) const
void power(Poly &result, const Poly &f, int n) const
bool is_homogeneous(const Poly &f) const
long n_terms(const Poly &f) const
void add(Poly &result, const Poly &f, const Poly &g) const
void var(Poly &result, int v) const
void subtract(Poly &result, const Poly &f, const Poly &g) const
bool multi_degree(const Poly &f, monomial already_allocated_degree_vector) const
bool is_equal(const Poly &f, const Poly &g) const
void copy(Poly &result, const Poly &f) const
void normalizeInPlace(Poly &f) const
void negate(Poly &result, const Poly &f) const
Quotient of a FreeAlgebra by a Groebner basis up to a fixed degree bound.
virtual ring_elem invert(const ring_elem f) const
ring_elem lead_coefficient(const Ring *coeffRing, const Poly *f) const
const FreeAlgebra & freeAlgebra() const
const Ring * coefficientRing() const
virtual void text_out(buffer &o) const
ring_elem makeTerm(const ring_elem a, const_varpower monom) const
virtual int index_of_var(const ring_elem a) const
virtual ring_elem divide(const ring_elem f, const ring_elem g) const
virtual engine_RawArrayPairOrNull list_form(const Ring *coeffR, const ring_elem f) const
const PolynomialRing * degreeRing() const
Concrete Ring wrapper around an owned FreeAlgebra (no quotient).
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
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
void debug_display(const Poly *f) const
virtual ring_elem from_coefficient(const ring_elem a) 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
virtual ring_elem copy(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
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
ring_elem elem(int i, int j) 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 =0
long characteristic() const
virtual ring_elem copy(const ring_elem f) const =0
virtual bool from_rational(const mpq_srcptr q, ring_elem &result) const =0
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.
VALGRIND_MAKE_MEM_DEFINED & result(result)
engine_RawArrayPair engine_RawArrayPairOrNull
Matrix — the engine's immutable homomorphism F -> G between free modules.
Ring — the legacy abstract base class for every coefficient and polynomial ring.
const void * get_Poly() const