|
Macaulay2 Engine
|
A FreeAlgebra modulo a two-sided ideal carried by an embedded NCGroebner. More...
#include "NCAlgebras/FreeAlgebra.hpp"#include "NCAlgebras/FreeMonoid.hpp"#include "NCAlgebras/NCGroebner.hpp"#include "Polynomial.hpp"#include "newdelete.hpp"#include "ringelem.hpp"#include <vector>Go to the source code of this file.
Classes | |
| class | FreeAlgebraQuotient |
| Quotient of a FreeAlgebra by a Groebner basis up to a fixed degree bound. More... | |
| class | FreeAlgebraQuotientElement |
| Owned Poly value paired with its FreeAlgebraQuotient*, providing operator-overloaded arithmetic for debugging / scripting. More... | |
A FreeAlgebra modulo a two-sided ideal carried by an embedded NCGroebner.
Declares the non-commutative analogue of PolyRingQuotient (the commutative quotient ring lives in polyquotient.hpp; the PolyQuotient name in polyring.hpp is just a stale forward declaration). The class holds a reference to its ambient FreeAlgebra together with an NCGroebner mGroebner that owns the stored Gröbner basis of the defining ideal (the word-table / suffix-tree indices for divisor lookup also live inside NCGroebner — in-source comments here confirm the lookup tables were "placed in NCGroebner object"). The constructor takes a precomputed ConstPolyList& GB plus a maxdeg cap. normalizeInPlace, mult, power, and the other arithmetic entries compute in the ambient algebra and then reduce modulo the GB via the embedded NCGroebner. The full Ring-like surface is implemented here even though the class does not inherit from Ring; M2FreeAlgebraQuotient wraps it to provide the engine-wide Ring facade.
The companion FreeAlgebraQuotientElement at the bottom of the header is a lightweight RAII handle around one Poly (calls init/clear on construction/destruction) with overloaded + / - / * / ^ / ==, exposed for unit tests and interactive debugging. A two-sided GB in a free algebra is in general infinite, so maxdeg is how the engine keeps the computation finite at the cost of incomplete reduction past that degree.
Definition in file FreeAlgebraQuotient.hpp.