16 #ifndef polybori_groebner_SlimgbReduction_h_
17 #define polybori_groebner_SlimgbReduction_h_
39 std::priority_queue<Polynomial, std::vector<Polynomial>,
LMLessCompare> to_reduce;
53 template <
int variant>
61 template <
int variant>
65 throw std::runtime_error(
"Empty result in SlimgbReduction.");
75 while (!(to_reduce.empty())){
77 std::vector<Polynomial> curr;
78 curr.push_back(to_reduce.top());
82 while ((!(to_reduce.empty())) && (to_reduce.top().lead()==lm)){
83 curr.push_back(to_reduce.top());
90 int index=strat->generators.select1(lm);
92 Polynomial p_high=(lm/strat->generators[index].lead)*strat->generators[index].p;
98 if (!(curr[i].isZero())){
99 to_reduce.push(curr[i]);
111 if (!(curr[i].isZero())){
113 to_reduce.push(curr[i]);
118 result.push_back(reductor);
122 result.push_back(curr[0]);
const int SLIMGB_SIMPLEST
Definition: SlimgbReduction.h:33
This class defines LMLessCompare.
Definition: LMLessCompare.h:29
monom_type lead() const
Get leading term.
Definition: BoolePolynomial.cc:225
#define END_NAMESPACE_PBORIGB
Definition: groebner_defs.h:16
std::vector< Polynomial > result
Definition: SlimgbReduction.h:41
SlimgbReduction(GroebnerStrategy &strat)
Definition: SlimgbReduction.h:43
#define BEGIN_NAMESPACE_PBORIGB
Definition: groebner_defs.h:15
This class wraps the underlying decicion diagram type and defines the necessary operations.
Definition: BoolePolynomial.h:85
This class defines GroebnerStrategy.
Definition: GroebnerStrategy.h:41
#define PBORI_ASSERT(arg)
Definition: pbori_defs.h:118
bool_type isZero() const
Check whether polynomial is constant zero.
Definition: BoolePolynomial.h:294
This class defines SlimgbReduction.
Definition: SlimgbReduction.h:36
This class is just a wrapper for using variables from cudd's decicion diagram.
Definition: BooleMonomial.h:50
SlimgbReduction()
Definition: SlimgbReduction.h:46