1#ifndef _NCGroebner_hpp_
2#define _NCGroebner_hpp_
84 mutable std::unique_ptr<PolynomialHeap>
mHeap;
99 void compute(
int softDegreeLimit);
138 int overlapIndex) ->
Poly*;
PolynomialHeap abstract interface — batched-subtraction heap for non-commutative reduction.
std::tuple< int, int, int, bool > Overlap
OverlapTable — degree-sorted queue of pending word overlaps for non-commutative GB drivers.
gc_vector< const Poly * > ConstPolyList
Polynomial< CoefficientRingType > Poly
gc_vector< Poly * > PolyList
Modern Monom / Polynomial value types shared by NC algebras and the refactored F4.
SuffixTree / SuffixTreeNode — experimental generalised suffix tree for non-commutative leading-word l...
WordTable / WordWithDataTable — leading-word indices for non-commutative Gröbner basis lookup.
Free associative algebra over a coefficient ring: the non-commutative analogue of PolynomialRing.
auto overlapWordLength(Overlap o) const -> int
std::vector< int > mGroebnerDegrees
void computeInhomogeneous(int softDegreeLimit)
auto twoSidedReduction(const ConstPolyList &reducees) const -> ConstPolyList
std::unique_ptr< PolynomialHeap > mHeap
void updateOverlaps(const Poly *toAdd)
NCGroebner(const FreeAlgebra &A, const ConstPolyList &input, int hardDegreeLimit, int strategy)
std::vector< int > mGeneratorDegrees
void autoreduceByLastElement()
const FreeAlgebra & mFreeAlgebra
void compute(int softDegreeLimit)
auto insertNewOverlaps(std::vector< Overlap > &newOverlaps) -> void
auto isOverlapNecessary(Overlap o) const -> bool
auto overlapHeft(Overlap o) const -> int
auto twoSidedReductionOld(const FreeAlgebra &A, const Poly *reducee, const ConstPolyList &reducers, const WordTable &W) -> Poly *
void computeHomogeneous(int softDegreeLimit)
const PolyList & currentValue() const
auto createOverlapLeadWord(Poly &wordAsPoly, Overlap o) const -> void
OverlapTable mOverlapTable
static auto createOverlapPoly(const FreeAlgebra &A, const PolyList &polyList, int polyIndex1, int polyIndex2, int overlapIndex) -> Poly *
auto displayGroebnerBasis(std::ostream &o) const -> void
const FreeAlgebra & freeAlgebra() const
auto printOverlapData(std::ostream &o, Overlap overlap) const -> void
ring_elem getCoeffOfMonom(const Poly &f, const Monom &m)
const ConstPolyList mInput
auto initReductionOnly() -> void
void addToGroebnerBasis(Poly *toAdd)
Per-degree FIFO queue of pending overlaps for the NC Groebner basis driver to process.
Index of Words (non-commutative monomials) with subword, prefix/suffix, and overlap lookup used by th...
our_new_delete — per-class opt-in routing of new / delete through bdwgc.
Non-owning view onto a [length, degree, v1, v2, ..., vn] packed monomial in some externally managed b...