PolyBoRi
ReductionStrategy.h
Go to the documentation of this file.
1 // -*- c++ -*-
2 //*****************************************************************************
14 //*****************************************************************************
15 
16 #ifndef polybori_groebner_ReductionStrategy_h_
17 #define polybori_groebner_ReductionStrategy_h_
18 
19 // include basic definitions
20 #include "groebner_defs.h"
21 #include "polynomial_properties.h"
22 #include "PolyEntryVector.h"
23 #include "ReductionOptions.h"
24 #include "ReductionTerms.h"
25 #include "SetAssociatedMinimal.h"
26 
28 
35  public PolyEntryVector, public ReductionOptions, public ReductionTerms {
36  typedef ReductionStrategy self;
37 public:
38 
41  ReductionTerms(ring) { }
42 
44  void addGenerator(const PolyEntry& entry) {
45  PolyEntryVector::append(entry);
46  setupSetsForElement(back());
47  }
48 
51  void append(const PolyEntry& entry) { addGenerator(entry); }
52 
53  Polynomial nf(const Polynomial& p) const {
54  return (optRedTail? reducedNormalForm(p): headNormalForm(p));
55  }
56 
57  bool canRewrite(const Polynomial& p) const {
58  return is_rewriteable(p, minimalLeadingTerms);
59  }
60 
61  int select1(const Polynomial& p) const;
62  int select1(const Monomial& m) const;
63 
64  int select_short(const Polynomial& p) const {
65  return select_short_by_terms(p.leadDivisors());
66  }
67  int select_short(const Monomial& m) const {
68  return select_short_by_terms(m.divisors());
69  }
70 
71  Polynomial headNormalForm(const Polynomial& p) const;
72  Polynomial reducedNormalForm(const Polynomial& p) const;
73 
74  void llReduceAll();
75 
76  operator const PolyEntryVector&() const {
77  return static_cast<const PolyEntryVector&>(*this);
78  }
79 
80 protected:
81  void llReduce(const PolyEntry& entry, const Exponent& ll_e);
82 
83  int select_short_by_terms(const MonomialSet&) const;
84 
86  std::for_each(removed.expBegin(), removed.expEnd(),
88  }
89 
90  void setupSetsForElement(const PolyEntry& entry);
91 
92 
93  template <class Iterator, class CompareType>
94  size_type minimum(Iterator start, Iterator finish, const CompareType& comp)
95  const {
96  start = std::min_element(start, finish, comp);
97  if PBORI_UNLIKELY(start == finish)
98  return size_type(-1);
99 
100  return index(*start);
101  }
102 
103 };
104 
105 
106 inline bool
108 
109  return (!(strat.minimalLeadingTerms.hasTermOfVariables(lm)));//
110  // strat.generators.minimalLeadingTerms.intersect(lm.divisors()).isZero();
111 }
112 
113 
114 
115 
117 
118 #endif /* polybori_ReductionStrategy_h_ */
ReductionStrategy(const BoolePolyRing &ring)
Definition: ReductionStrategy.h:39
This class is just a wrapper for using variables for storing indices as interim data structure for Bo...
Definition: BooleExponent.h:34
void append(const PolyEntry &entry)
Definition: ReductionStrategy.h:51
Definition: PolyEntryVector.h:28
data_type::size_type size_type
Definition: PolyEntryVector.h:35
#define END_NAMESPACE_PBORIGB
Definition: groebner_defs.h:16
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
This class reinterprets decicion diagram managers as Boolean polynomial rings, adds an ordering and v...
Definition: BoolePolyRing.h:40
bool canRewrite(const Polynomial &p) const
Definition: ReductionStrategy.h:57
#define BEGIN_NAMESPACE_PBORIGB
Definition: groebner_defs.h:15
exp_iterator expBegin() const
Start of iteration over exponent vectors.
Definition: BooleSet.cc:101
This class defines PolyEntry.
Definition: PolyEntry.h:32
int select_short(const Monomial &m) const
Definition: ReductionStrategy.h:67
This class wraps the underlying decicion diagram type and defines the necessary operations.
Definition: BoolePolynomial.h:85
This class set the attribute minimal of a given index to a valued selected by the template parameter ...
Definition: SetAssociatedMinimal.h:32
set_type divisors() const
Divisors of the monomial.
Definition: BooleMonomial.h:154
int select_short(const Polynomial &p) const
Definition: ReductionStrategy.h:64
This class defines term for ReductionStrategy.
Definition: ReductionTerms.h:46
size_type minimum(Iterator start, Iterator finish, const CompareType &comp) const
Definition: ReductionStrategy.h:94
bool is_rewriteable(const Polynomial &p, const MonomialSet &leading_terms)
Definition: polynomial_properties.cc:104
Polynomial nf(const Polynomial &p) const
Definition: ReductionStrategy.h:53
void unmarkNonMinimalLeadingTerms(MonomialSet removed)
Definition: ReductionStrategy.h:85
set_type leadDivisors() const
Get all divisors of the leading term.
Definition: BoolePolynomial.h:328
bool_type hasTermOfVariables(const term_type &rhs) const
Definition: BooleSet.cc:182
This class defines option values for the ReductionStrategy.
Definition: ReductionOptions.h:29
Definition: BooleSet.h:57
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
MinimalLeadingTerms minimalLeadingTerms
Definition: ReductionTerms.h:52
#define PBORI_UNLIKELY(expression)
Definition: pbori_defs.h:59
void for_each(InIter start, InIter finish, Object &obj, MemberFuncPtr func)
Definition: pbori_algo.h:857
void addGenerator(const PolyEntry &entry)
Adding next element.
Definition: ReductionStrategy.h:44