PolyBoRi
LexHelper.h
Go to the documentation of this file.
1 // -*- c++ -*-
2 //*****************************************************************************
14 //*****************************************************************************
15 
16 #ifndef polybori_groebner_LexHelper_h_
17 #define polybori_groebner_LexHelper_h_
18 
19 // include basic definitions
20 #include "groebner_defs.h"
21 #include "IsEcart0Predicate.h"
22 #include "ReductionStrategy.h"
23 #include "nf.h"
24 
26 
31 class LexHelper{
32  public:
33  static bool irreducible_lead(const Monomial& m, const ReductionStrategy& strat){
35  else{
36  BooleSet ms=strat.leadingTerms.intersect(m.divisors());
37  if (ms.isZero())
38  return true;
39  else {
40  return std::find_if(ms.expBegin(),ms.expEnd(),IsEcart0Predicate(strat))==ms.expEnd();
41  }
42  }
43 
44  }
46  return p.begin();
47  }
49  return p.end();
50  }
51  static Polynomial nf(const ReductionStrategy& strat, const Polynomial& p, const Monomial& m){
52  //return nf3_lexbuckets(strat,p,m);
53  if (strat.optRedTailDegGrowth) return nf3(strat,p,m);
54  else return nf3_no_deg_growth(strat,p,m);
55  }
57  const static bool isDegreeOrder=false;
58  const static bool isLexicographicalOrder=true;
59  static bool knowRestIsIrreducible(const iterator_type& it, const ReductionStrategy & strat){
60  if ( (it.deg()>0) && (it.firstIndex()>strat.reducibleUntil))
61  return true;
62  else return false;
63 
64  }
65  static Polynomial sum_range(std::vector<Monomial>& vec,const iterator_type&
66  it, const iterator_type& end, Polynomial init){
67  if (vec.size()==1) return vec[0];
68  if (it!=end)
69  return term_accumulate(it,end, init);
70  else return init;
71  }
72 };
73 
75 
76 #endif /* polybori_LexHelper_h_ */
Polynomial::const_iterator iterator_type
Definition: LexHelper.h:56
static Polynomial::const_iterator begin(const Polynomial &p)
Definition: LexHelper.h:45
#define END_NAMESPACE_PBORIGB
Definition: groebner_defs.h:16
const_iterator end() const
Finish of iteration over monomials.
Definition: BoolePolynomial.cc:531
idx_type reducibleUntil
Definition: ReductionOptions.h:40
const_iterator begin() const
Start of iteration over monomials.
Definition: BoolePolynomial.cc:523
static Polynomial sum_range(std::vector< Monomial > &vec, const iterator_type &it, const iterator_type &end, Polynomial init)
Definition: LexHelper.h:65
exp_iterator expEnd() const
Finish of iteration over exponent vectors.
Definition: BooleSet.cc:109
bool irreducible_lead(Monomial lm, const ReductionStrategy &strat)
Definition: ReductionStrategy.h:107
#define BEGIN_NAMESPACE_PBORIGB
Definition: groebner_defs.h:15
exp_iterator expBegin() const
Start of iteration over exponent vectors.
Definition: BooleSet.cc:101
static Polynomial::const_iterator end(const Polynomial &p)
Definition: LexHelper.h:48
This class wraps the underlying decicion diagram type and defines the necessary operations.
Definition: BoolePolynomial.h:85
This class defines LexHelper.
Definition: LexHelper.h:31
bool isZero() const
Test whether diagram represents the empty set.
Definition: CCuddDDFacade.h:244
set_type divisors() const
Divisors of the monomial.
Definition: BooleMonomial.h:154
This class defines IsEcart0Predicate.
Definition: IsEcart0Predicate.h:29
static bool knowRestIsIrreducible(const iterator_type &it, const ReductionStrategy &strat)
Definition: LexHelper.h:59
static bool irreducible_lead(const Monomial &m, const ReductionStrategy &strat)
Definition: LexHelper.h:33
Definition: BoolePolynomial.h:70
bool optRedTailDegGrowth
Definition: ReductionOptions.h:38
LeadingTerms leadingTerms
Definition: ReductionTerms.h:51
static Polynomial nf(const ReductionStrategy &strat, const Polynomial &p, const Monomial &m)
Definition: LexHelper.h:51
Polynomial nf3_no_deg_growth(const ReductionStrategy &strat, Polynomial p, Monomial rest_lead)
Definition: nf.cc:125
Definition: BooleSet.h:57
This class defines ReductionStrategy.
Definition: ReductionStrategy.h:34
ValueType term_accumulate(UpperIterator ustart, UpperIterator ufinish, NaviType navi, LowerIterator lstart, LowerIterator lfinish, ValueType init)
Definition: pbori_algorithms.h:128
This class is just a wrapper for using variables from cudd's decicion diagram.
Definition: BooleMonomial.h:50
Polynomial nf3(const ReductionStrategy &strat, Polynomial p, Monomial rest_lead)
Definition: nf.cc:64