1 #ifndef __ALGORITHM_BUCHBERGER_BASIC_HPP_ 2 #define __ALGORITHM_BUCHBERGER_BASIC_HPP_ 27 using std::cout;
using std::endl;
30 using std::iterator;
using std::forward_iterator_tag;
32 #include "system_constants.hpp" 35 #include "monomial.hpp" 36 #include "polynomial.hpp" 37 #include "critical_pair.hpp" 38 #include "normal_strategy.hpp" 39 #include "polynomial_array.hpp" 40 #include "polynomial_geobucket.hpp" 41 #include "polynomial_linked_list.hpp" 42 #include "polynomial_double_buffered.hpp" 44 #include "sugar_strategy.hpp" 45 #include "weighted_sugar_strategy.hpp" 65 bool degrees_smaller =
true;
66 for (NVAR_TYPE i = 0; degrees_smaller and i < u.
num_vars(); ++i)
67 degrees_smaller = degrees_smaller and u.
degree(i) <= p->lcm_degree(i);
68 result = result and !degrees_smaller;
69 if (not result)
break;
74 template bool no_triplet<Critical_Pair_Basic>(
100 list<Abstract_Polynomial *>
reduce_basis(list<Abstract_Polynomial *>G);
112 list<Critical_Pair_Basic *> & P,
113 list<Abstract_Polynomial *> & G,
125 template <
typename T>
127 cout << P.size() <<
" critical pairs remaining\n";
130 cout <<
'\t' << *p << endl;
133 template void report_critical_pairs<Critical_Pair_Basic>(
134 const list<Critical_Pair_Basic *>, bool
170 list<Abstract_Polynomial *> G,
172 bool very_verbose=
false 195 const list<Abstract_Polynomial *> &F,
198 WT_TYPE * strategy_weights =
nullptr 211 template <
typename T>
214 typename list<T *>::iterator minkey_i = P.begin();
216 for (
typename list<T *>::iterator pi = next(minkey_i);
222 if (*pairkey < *minkey_data) {
224 minkey_data = pairkey;
228 T * minkey = *minkey_i;
230 P.push_front(minkey);
233 template void sort_pairs_by_strategy<Critical_Pair_Basic>(
234 list<Critical_Pair_Basic *> &
The general class of a polynomial.
bool operator()(Abstract_Polynomial *f, Abstract_Polynomial *g)
returns true iff f’s leading monomial is smaller than g’s
void sort_pairs_by_strategy(list< T *> &P)
Applies the strategy to find the “smallest” critical pair.
void gm_update(list< Critical_Pair_Basic *> &P, list< Abstract_Polynomial *> &G, Abstract_Polynomial *r, StrategyFlags strategy)
Implementation of Gebauer-Moeller algorithm. Based on description in Becker and Weispfenning (1993)...
list< Constant_Polynomial * > buchberger(const list< Abstract_Polynomial *> &F, SPolyCreationFlags rep=SPolyCreationFlags::GEOBUCKETS, StrategyFlags strategy=StrategyFlags::SUGAR_STRATEGY, WT_TYPE *strategy_weights=nullptr)
Implementation of Buchberger’s algorithm.
virtual Monomial & leading_monomial() const =0
leading monomial – call after sort_by_order()!
Structure for sorting critical pairs.
StrategyFlags
flag indicating which strategy to use for computation
list< Abstract_Polynomial * > reduce_basis(list< Abstract_Polynomial *>G)
Remove redundant polynomials from G.
SPolyCreationFlags
flag indicating which structure to use for an s-polynomial
bool lcm_alike(const Monomial &t, const Monomial &u, const Critical_Pair_Basic *p)
Checks if the lcm of t and u is like the lcm stored in p.
NVAR_TYPE num_vars() const
number of variables
Implementation of monomials.
void check_correctness(list< Constant_Polynomial *>G, StrategyFlags strategy)
checks that G is a Gröbner basis by verifying each s-polynomial reduces to zero
DEG_TYPE degree(NVAR_TYPE i) const
Degree of th variable.
Monomial lcm(const Monomial &u) const
Least common multiple: largest exponents.
bool no_triplet(const T *p, const list< T *>C)
Checks whether p is in danger of forming a Buchberger triple with some pair listed in C...
Controls the creation of s-polynomials.
void report_critical_pairs(const list< T *>P, bool verbose=false)
A brief report on the number of critical pairs. If verbose is true, also lists them.
used to sort polynomials by leading monomial