PolyBoRi
RelatedTermsBase.h
Go to the documentation of this file.
1 // -*- c++ -*-
2 //*****************************************************************************
14 //*****************************************************************************
15 
16 #ifndef polybori_groebner_RelatedTermsBase_h_
17 #define polybori_groebner_RelatedTermsBase_h_
18 
19 #include "minimal_elements.h"
21 #include "BoundedDivisorsOf.h"
22 
23 // include basic definitions
24 #include "groebner_defs.h"
25 
27 
33 
34 public:
37  m_lead(ring), m_ignorable(ring), m_ext_prod_terms(ring),
38  m_related(ring), m_divisors_of(ring, ring) { }
39 
41  RelatedTermsBase(const Monomial& lead, const MonomialSet& terms,
42  const MonomialSet& ignorable, const MonomialSet& significant):
43  m_lead(lead), m_ignorable(ignorable), m_ext_prod_terms(lead.ring()),
44  m_related(lead.ring()), m_divisors_of(lead, significant) {
45 
46  init(significant, unrelated_terms(significant));
47  }
48 
50  const MonomialSet& related_terms() const { return m_related; }
51 
53  const BoundedDivisorsOf& divisors_of() const { return m_divisors_of; }
54 
56  MonomialSet factors(const MonomialSet& terms) const {
57  return minimal_elements_divided(critical_terms_base(terms), m_lead,
58  m_ext_prod_terms);
59  }
60 
63  return mod_mon_set(m_related.intersect(terms), m_ignorable);
64  }
65 
67  MonomialSet unrelated_terms(const MonomialSet& terms) const {
68  return std::accumulate(m_lead.begin(), m_lead.end(), terms,
69  member_function_operator(&MonomialSet::subset0) );
70  }
71 
72 private:
74  void init(const MonomialSet& significant, const MonomialSet& unrelated) {
75  PBORI_ASSERT(!m_ignorable.owns(m_lead) && !significant.ownsOne());
76  m_related = significant.diff(unrelated);
77  m_ext_prod_terms = m_ignorable.existAbstract(m_lead).diff(unrelated);
78  }
79 
80  Monomial m_lead;
81  MonomialSet m_ignorable;
82  MonomialSet m_ext_prod_terms; // Contains terms of @c m_ignorable related to
83  // @c m_lead with its variables substituted by 1
84  MonomialSet m_related;
85  BoundedDivisorsOf m_divisors_of;
86 };
87 
89 
90 #endif /* polybori_groebner_RelatedTermsBase_h_ */
MonomialSet unrelated_terms(const MonomialSet &terms) const
Extract terms not owning variables of current generator's leading term.
Definition: RelatedTermsBase.h:67
#define END_NAMESPACE_PBORIGB
Definition: groebner_defs.h:16
self existAbstract(const term_type &rhs) const
Definition: BooleSet.cc:252
This class reinterprets decicion diagram managers as Boolean polynomial rings, adds an ordering and v...
Definition: BoolePolyRing.h:40
#define BEGIN_NAMESPACE_PBORIGB
Definition: groebner_defs.h:15
polybori::BooleSet MonomialSet
Definition: groebner_defs.h:45
MonomialSet minimal_elements_divided(MonomialSet m, Monomial lm, MonomialSet mod)
Definition: minimal_elements.h:430
MonomialSet mod_mon_set(const MonomialSet &as, const MonomialSet &vs)
Definition: nf.cc:855
This class deals as a base of RelatedTerns.
Definition: RelatedTermsBase.h:32
#define PBORI_ASSERT(arg)
Definition: pbori_defs.h:118
This class defines defines a function for computing a bounded variant of MononmialSet's divisorsOf...
Definition: BoundedDivisorsOf.h:42
MemberFunctionOperator< MemberFct > member_function_operator(MemberFct func)
Definition: CMemberFunctionTraits.h:83
const MonomialSet & related_terms() const
finally get the related terms
Definition: RelatedTermsBase.h:50
bool_type ownsOne() const
Test whether the empty set is included.
Definition: BooleSet.h:211
const BoundedDivisorsOf & divisors_of() const
Get parameterized functional.
Definition: RelatedTermsBase.h:53
MonomialSet critical_terms_base(const MonomialSet &terms) const
Related elements in terms modulo the ignorable elements.
Definition: RelatedTermsBase.h:62
RelatedTermsBase(const BoolePolyRing &ring)
Empty set of terms.
Definition: RelatedTermsBase.h:36
MonomialSet factors(const MonomialSet &terms) const
Minimal related elements from terms, with lead's variables set to 1.
Definition: RelatedTermsBase.h:56
Definition: BooleSet.h:57
This class is just a wrapper for using variables from cudd's decicion diagram.
Definition: BooleMonomial.h:50
RelatedTermsBase(const Monomial &lead, const MonomialSet &terms, const MonomialSet &ignorable, const MonomialSet &significant)
Nontrivial constructor.
Definition: RelatedTermsBase.h:41