16 #ifndef polybori_groebner_red_tail_h_
17 #define polybori_groebner_red_tail_h_
34 std::vector<Polynomial> res_vec;
40 res_vec.push_back(lm);
49 std::vector<Monomial> irr;
73 res_vec.push_back(irr_p);
83 p=
nf3(strat,p, rest_lead);
95 template <
class Helper>
102 std::vector<Polynomial> res_vec;
108 res_vec.push_back(lm);
121 std::vector<Monomial> irr;
122 typename Helper::iterator_type it=Helper::begin(p);
123 typename Helper::iterator_type it_orig=it;
124 typename Helper::iterator_type end=Helper::end(p);
125 bool rest_is_irreducible=
false;
131 if (!(irreducible_part.
isZero())){
132 res_vec.push_back(irreducible_part);
134 it=Helper::begin(p2);
142 rest_is_irreducible=
true;
151 rest_is_irreducible=
true;
159 irr_p=Helper::sum_range(irr,it_orig,it, p.
ring().
zero());
167 PBORI_ASSERT((s==irr_p.length())||(rest_is_irreducible));
169 res_vec.push_back(irr_p);
173 p=Helper::nf(strat,p,rest_lead);
188 return red_tail_generic<LexHelper>(strat,p);
190 return red_tail_generic<DegOrderHelper>(strat,p);
192 return red_tail_generic<BlockOrderHelper>(strat,p);
navigator navigation() const
Navigate through structure.
Definition: BoolePolynomial.h:441
Polynomial add_up_generic(const std::vector< T > &res_vec, int start, int end, Polynomial init)
Definition: add_up.h:205
monom_type lead() const
Get leading term.
Definition: BoolePolynomial.cc:225
Polynomial cheap_reductions(const ReductionStrategy &strat, Polynomial p)
Definition: nf.cc:831
#define END_NAMESPACE_PBORIGB
Definition: groebner_defs.h:16
Polynomial add_up_polynomials(const std::vector< Polynomial > &vec, const Polynomial &init)
Definition: add_up.h:238
const ring_type & ring() const
Access ring, where this belongs to.
Definition: BoolePolynomial.h:478
Polynomial nf3_short(const ReductionStrategy &strat, Polynomial p)
Definition: nf.cc:192
Polynomial red_tail(const ReductionStrategy &strat, Polynomial p)
Definition: red_tail.h:184
dd_type zero() const
Get empty decision diagram.
Definition: BoolePolyRing.cc:42
virtual idx_type lastBlockStart() const =0
Generic procedure to get index, where last block starts.
virtual bool_type isDegreeOrder() const =0
Test whether we deal with a degree-ordering.
bool irreducible_lead(Monomial lm, const ReductionStrategy &strat)
Definition: ReductionStrategy.h:107
BoolePolynomial Polynomial
Definition: embed.h:51
bool canRewrite(const Polynomial &p) const
Definition: ReductionStrategy.h:57
#define BEGIN_NAMESPACE_PBORIGB
Definition: groebner_defs.h:15
order_reference ordering() const
Access ordering of *this.
Definition: BoolePolyRing.h:156
ReductionStrategy generators
Definition: GroebnerStrategy.h:204
This class wraps the underlying decicion diagram type and defines the necessary operations.
Definition: BoolePolynomial.h:85
#define PBORI_LIKELY(expression)
For optimizing if-branches.
Definition: pbori_defs.h:56
Definition: BoolePolynomial.h:63
const dd_type & diagram() const
Read-only access to internal decision diagramm structure.
Definition: BoolePolynomial.h:461
Polynomial red_tail_general(const ReductionStrategy &strat, Polynomial p)
Definition: red_tail.h:29
MonomialSet mod_mon_set(const MonomialSet &as, const MonomialSet &vs)
Definition: nf.cc:855
This class defines GroebnerStrategy.
Definition: GroebnerStrategy.h:41
#define PBORI_ASSERT(arg)
Definition: pbori_defs.h:118
ordered_iterator orderedEnd() const
Finish of ordering respecting iterator.
Definition: BoolePolynomial.cc:499
Polynomial red_tail_short(const ReductionStrategy &strat, Polynomial p)
Definition: red_tail.h:197
const dd_type & diagram() const
Read-only access to internal decision diagramm structure.
Definition: BooleMonomial.h:213
virtual bool_type isBlockOrder() const =0
Test whether we deal with a block-ordering.
Polynomial red_tail_generic(const ReductionStrategy &strat, Polynomial p)
Definition: red_tail.h:97
bool_type isZero() const
Check whether polynomial is constant zero.
Definition: BoolePolynomial.h:294
polybori::CTypes::idx_type idx_type
Definition: groebner_defs.h:44
bool_type isConstant() const
Check whether constant node was reached.
Definition: CCuddNavigator.h:172
This class defines an iterator for navigating through then and else branches of ZDDs.
Definition: CCuddNavigator.h:36
self & incrementElse()
Increment in else direction.
Definition: CCuddNavigator.h:203
virtual bool_type isLexicographical() const =0
Check whether ring is lexicographical.
This class defines ReductionStrategy.
Definition: ReductionStrategy.h:34
This class is just a wrapper for using variables from cudd's decicion diagram.
Definition: BooleMonomial.h:50
Polynomial nf(Polynomial p) const
Definition: GroebnerStrategy.cc:702
MinimalLeadingTerms minimalLeadingTerms
Definition: ReductionTerms.h:52
#define PBORI_UNLIKELY(expression)
Definition: pbori_defs.h:59
Polynomial nf3(const ReductionStrategy &strat, Polynomial p, Monomial rest_lead)
Definition: nf.cc:64
ordered_iterator orderedBegin() const
Start of ordering respecting iterator.
Definition: BoolePolynomial.cc:491
Polynomial red_tail_in_last_block(const GroebnerStrategy &strat, Polynomial p)
Definition: red_tail.h:209
Polynomial nf3_degree_order(const ReductionStrategy &strat, Polynomial p, Monomial lead)
Definition: nf.cc:151