Implemented primitives for working with ideals of polynomial rings of several variables and algorithms for finding various Groebner bases. Primitives are:
1). Fields: Fraction (for working with rational numbers), Mint (modulo numbers).
2). Variable: represents a variable of the form [A − Za − z](_(\d))+
.
3). Monomial: product of variables and coefficient. Represents a monomial of the form (Coefficient)?(Variable(^(\d)+)?)+
.
4). Orders: VariableOrders and MonomialOrders. Use them to change order of variables inside monomial and monomials inside polynomial.
5). Parsers: CoefficientParser and MonomialParser for parsing std::string
to primitives.
6). Polynomial: sum of monomials.
7). Ideal: represents ideal of polynomial ring of several variables K[x_1, ..., x_n]
.
Implemented Buchberger's algorithm with S-polynomials optimization for finding arbitrary Groebner basis, as well as functions for turning an arbitrary Groebner basis into a minimal Groebner basis and a minimal Groebner basis into a reduced Groebner basis.
Everything is tested by unit tests.