16 #ifndef polybori_groebner_NextSpoly_h_
17 #define polybori_groebner_NextSpoly_h_
34 m_gen(gen), m_status(status) {}
37 return compute(act_pair, act_pair.
extract(m_gen));
43 return compute(act_pair.
ijPair(), result);
52 int i = ij.
i, j = ij.
j;
54 m_status.setToHasTRep(ij.
i, ij.
j);
55 if ((i != ij.
i) || (ij.
j != j)){
56 m_status.setToHasTRep(i,j);
57 return spoly(m_gen[i].p, m_gen[j].p);
63 m_gen(vp.
i).vPairCalculated.insert(vp.
v);
64 return (!res.
isZero() && (res.
lead() == m_gen[vp.
i].lead)?
65 res + m_gen[vp.
i].p: res);
70 m_gen.leadingTerms.
divisorsOf(m_gen[first].leadExp.LCM(m_gen[second].leadExp));
75 template <
class Iterator>
76 void replacePair(Iterator start, Iterator finish,
int& first,
int& second) {
77 std::pair<int, int> original(first, second);
78 while(start != finish)
79 replaceGenerators(m_gen.index(*start++), original, first, second);
83 void replaceGenerators(
int index, std::pair<int, int> original,
84 int& first,
int& second)
const {
86 if ((index != original.first) && (index != original.second)) {
87 replaceGenerator(index, original.first, first);
88 replaceGenerator(index, original.second, second);
93 void replaceGenerator(
int next,
int original,
int& current)
const {
94 if (m_status.hasTRep(next, original) &&
95 (m_gen[current].weightedLength > m_gen[next].weightedLength) &&
96 (m_gen[next].ecart() <= m_gen[original].ecart()))
100 ReductionStrategy& m_gen;
101 PairStatusSet& m_status;
Polynomial compute(const Pair &act_pair, const Polynomial &result)
Definition: NextSpoly.h:41
const IJPairData & ijPair() const
Definition: PairE.h:85
idx_type v
Definition: VariablePairData.h:31
monom_type lead() const
Get leading term.
Definition: BoolePolynomial.cc:225
BoolePolynomial spoly(const BoolePolynomial &first, const BoolePolynomial &second)
Compute spoly of two polynomials.
Definition: pbori_algorithms.h:42
#define END_NAMESPACE_PBORIGB
Definition: groebner_defs.h:16
This class computes the next spoly for a generator pair.
Definition: NextSpoly.h:30
This class defines IJPairData.
Definition: IJPairData.h:28
self divisorsOf(const term_type &rhs) const
Compute intersection with divisors of rhs.
Definition: BooleSet.cc:156
exp_iterator expEnd() const
Finish of iteration over exponent vectors.
Definition: BooleSet.cc:109
int i
Definition: VariablePairData.h:30
void replacePair(Iterator start, Iterator finish, int &first, int &second)
Definition: NextSpoly.h:76
This class defines VariablePairData.
Definition: VariablePairData.h:28
#define BEGIN_NAMESPACE_PBORIGB
Definition: groebner_defs.h:15
This class defines PairE.
Definition: PairE.h:28
const VariablePairData & variablePair() const
Definition: PairE.h:90
exp_iterator expBegin() const
Start of iteration over exponent vectors.
Definition: BooleSet.cc:101
Polynomial compute(const IJPairData &ij, const Polynomial &res)
Definition: NextSpoly.h:51
NextSpoly(ReductionStrategy &gen, PairStatusSet &status)
Definition: NextSpoly.h:33
This class wraps the underlying decicion diagram type and defines the necessary operations.
Definition: BoolePolynomial.h:85
Polynomial compute(const VariablePairData &vp, const Polynomial &res)
Definition: NextSpoly.h:62
void replacePair(int &first, int &second)
Definition: NextSpoly.h:68
int getType() const
Definition: PairE.h:32
#define PBORI_ASSERT(arg)
Definition: pbori_defs.h:118
bool_type isZero() const
Check whether polynomial is constant zero.
Definition: BoolePolynomial.h:294
Polynomial extract(const PolyEntryVector &v) const
Definition: PairE.h:47
int i
Definition: IJPairData.h:30
Definition: BooleSet.h:57
This class defines ReductionStrategy.
Definition: ReductionStrategy.h:34
Polynomial operator()(const Pair &act_pair)
Definition: NextSpoly.h:36
This class defines PairStatusSet.
Definition: PairStatusSet.h:30
int j
Definition: IJPairData.h:31