Macaulay2 Engine
Loading...
Searching...
No Matches
FreeAlgebraQuotient.hpp File Reference

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...

Detailed Description

A FreeAlgebra modulo a two-sided ideal carried by an embedded NCGroebner.

Note
AI-generated documentation. Verify against the source before relying on it.

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.

See also
FreeAlgebra.hpp
FreeMonoid.hpp
NCGroebner.hpp
Polynomial.hpp
M2FreeAlgebraQuotient.hpp
polyquotient.hpp

Definition in file FreeAlgebraQuotient.hpp.