18 #ifndef polybori_BooleMonomial_h_
19 #define polybori_BooleMonomial_h_
97 std::less<poly_type::navigator>,
105 m_poly(rhs.m_poly) {}
108 BooleMonomial(
const var_type& rhs);
113 m_poly(rhs, ring) { }
117 m_poly(ring.one()) {}
126 exp_type exp()
const;
130 const_iterator
begin()
const {
return m_poly.firstBegin(); }
133 const_iterator
end()
const {
return m_poly.firstEnd(); }
137 return variable_iterator(begin(), ring());
142 return variable_iterator(end(), ring());
147 return std::distance(m_poly.firstBegin(),m_poly.firstEnd());
154 set_type
divisors()
const {
return m_poly.leadDivisors(); }
157 set_type multiples(
const self&)
const;
168 self change(idx_type)
const;
174 self& operator/=(
const self&);
176 self& operator/=(
const var_type&);
191 return m_poly.firstReducibleBy(rhs); }
192 bool_type reducibleBy(
const var_type& rhs)
const;
195 comp_type compare(
const self&)
const;
201 self& LCMAssign(
const self&);
204 self LCM(
const self&)
const;
207 self& GCDAssign(
const self&);
210 self GCD(
const self&)
const;
216 set_type
set()
const {
return m_poly.set(); }
221 return *
this = set_type( dd_type(m_poly.ring(),
222 m_poly.navigation().thenBranch()) );
226 var_type firstVariable()
const;
231 return *m_poly.navigation();
235 const ring_type&
ring()
const {
return m_poly.ring(); }
261 inline BoolePolynomial
267 inline BoolePolynomial
285 inline BooleMonomial::bool_type
288 return (lhs.
compare(rhs) == CTypes::less_than);
292 inline BooleMonomial::bool_type
295 return (lhs.
compare(rhs) == CTypes::greater_than);
299 inline BooleMonomial::bool_type
302 return (lhs.
compare(rhs) <= CTypes::less_or_equal_max);
306 inline BooleMonomial::bool_type
309 return (lhs.
compare(rhs) >= CTypes::greater_or_equal_min);
335 inline BoolePolynomial
342 inline BoolePolynomial
349 inline BoolePolynomial
365 inline BoolePolynomial&
381 inline BoolePolynomial
389 inline BoolePolynomial
398 inline BoolePolynomial
409 #endif // of polybori_BooleMonomial_h_
deg_type deg() const
Degree of the monomial.
Definition: BooleMonomial.h:146
This class is just a wrapper for using variables for storing indices as interim data structure for Bo...
Definition: BooleExponent.h:34
#define END_NAMESPACE_PBORI
Finish project's namespace.
Definition: pbori_defs.h:77
BoolePolynomial operator/(const BoolePolynomial &lhs, const BooleVariable &rhs)
Division of a polynomial by a variable (forcing monomial variant)
Definition: BooleMonomial.h:390
poly_type::var_type var_type
Type of Boolean variables.
Definition: BooleMonomial.h:73
bool_type reducibleBy(const self &rhs) const
Test for reducibility.
Definition: BooleMonomial.h:190
poly_type::ring_type ring_type
Type for Boolean polynomial rings (without ordering)
Definition: BooleMonomial.h:85
self GCD(const self &) const
Compute the greatest common divisor.
Definition: BooleMonomial.cc:169
BooleMonomial(const set_type &rhs)
Construct from decision diagram.
Definition: BooleMonomial.h:242
#define BEGIN_NAMESPACE_PBORI
Start project's namespace.
Definition: pbori_defs.h:74
std::map< self, idx_type, symmetric_composition< std::less< poly_type::navigator >, navigates< poly_type > > > idx_map_type
Type for index maps.
Definition: BooleMonomial.h:98
void stable_first_hash_range(HashType &seed, NaviType navi)
Definition: pbori_routines_hash.h:60
set_type set() const
Get corresponding subset of of the powerset over all variables.
Definition: BooleMonomial.h:216
const self & diagram() const
Access internal decision diagram.
Definition: BooleSet.h:231
self LCM(const self &) const
Compute the least common multiple.
Definition: BooleMonomial.cc:219
int deg_type
Type for polynomial degrees (ranges from -1 to maxint)
Definition: pbori_defs.h:222
int deg_type
Definition: groebner_defs.h:42
const_iterator begin() const
Start iteration over indices.
Definition: BooleMonomial.h:130
self & popFirst()
Removes the first variables from monomial.
Definition: BooleMonomial.h:219
dd_type & internalDiagram()
Access to internal decision diagramm structure.
Definition: BooleMonomial.h:239
BoolePolynomial operator%(const BoolePolynomial &lhs, const BooleVariable &rhs)
Remainder of division of a polynomial by a variable.
Definition: BooleMonomial.h:399
BooleMonomial(const exp_type &rhs, const ring_type &ring)
Construct from exponent vector.
Definition: BooleMonomial.h:112
Definition: COrderingBase.h:43
poly_type::ostream_type ostream_type
Definition: BooleMonomial.h:69
variable_iterator variableBegin() const
Start iteration over variables.
Definition: BooleMonomial.h:136
comp_type compare(const self &) const
Compare with rhs monomial and return comparision code.
Definition: BooleMonomial.cc:115
bool_type operator==(constant_type rhs) const
Definition: BooleMonomial.h:183
poly_type::dd_type dd_type
Definition: BooleMonomial.h:67
This class reinterprets decicion diagram managers as Boolean polynomial rings, adds an ordering and v...
Definition: BoolePolyRing.h:40
const_iterator end() const
Finish iteration over indices.
Definition: BooleMonomial.h:133
CVariableIter< const_iterator, var_type > variable_iterator
Access to iterator over variables.
Definition: BooleMonomial.h:91
idx_type firstIndex() const
Definition: BooleMonomial.h:230
Definition: pbori_func.h:722
This struct contains auxiliary type definitions.
Definition: pbori_defs.h:210
Definition: BooleMonomial.h:40
BooleMonomial::bool_type operator>=(const BooleMonomial &lhs, const BooleMonomial &rhs)
Greater or equal than comparision.
Definition: BooleMonomial.h:307
poly_type::first_iterator const_iterator
Access to iterator over indices.
Definition: BooleMonomial.h:88
BoolePolynomial poly_type
Type of Boolean polynomials.
Definition: BooleMonomial.h:63
int integer_type
Type for integer numbers.
Definition: pbori_defs.h:225
This class wraps the underlying decicion diagram type and defines the necessary operations.
Definition: BoolePolynomial.h:85
BooleMonomial GCD(const BooleMonomial &lhs, const BooleMonomial &rhs)
Compute the greatest common divisor of two monomials.
Definition: BooleMonomial.h:315
std::size_t hash_type
Type for hashing.
Definition: pbori_defs.h:231
hash_type stableHash() const
Hash value of the monomial.
Definition: BooleMonomial.h:160
This template class defines an iterator for monomial types.
Definition: CVariableIter.h:32
poly_type::exp_type exp_type
Type of exponent vector.
Definition: BooleMonomial.h:82
set_type divisors() const
Divisors of the monomial.
Definition: BooleMonomial.h:154
bool_type operator==(const self &rhs) const
Definition: BooleMonomial.h:181
BooleMonomial::bool_type operator<=(const BooleMonomial &lhs, const BooleMonomial &rhs)
Less or equal than comparision.
Definition: BooleMonomial.h:300
CTypes::ostream_type ostream_type
Definition: BoolePolynomial.h:103
BooleMonomial LCM(const BooleMonomial &lhs, const BooleMonomial &rhs)
Compute the greatest common divisor of two monomials.
Definition: BooleMonomial.h:322
~BooleMonomial()
Destructor.
Definition: BooleMonomial.h:120
Definition: CTermGenerator.h:151
BooleMonomial::bool_type operator>(const BooleMonomial &lhs, const BooleMonomial &rhs)
Greater than comparision.
Definition: BooleMonomial.h:293
Definition: CTermGenerator.h:34
dd_type::easy_equality_property easy_equality_property
The property whether the equality check is easy is inherited from dd_type.
Definition: BooleMonomial.h:101
poly_type::integer_type integer_type
Definition: BooleMonomial.h:68
#define PBORI_ASSERT(arg)
Definition: pbori_defs.h:118
Compose a binary function with a default constructable unary function for both arguments.
Definition: pbori_func.h:325
BooleMonomial(const self &rhs)
Copy constructor.
Definition: BooleMonomial.h:104
const ring_type & ring() const
Access ring, where this belongs to.
Definition: BooleMonomial.h:235
BooleMonomial(const ring_type &ring)
Construct from given ring.
Definition: BooleMonomial.h:116
bool_type operator!=(constant_type rhs) const
Definition: BooleMonomial.h:184
poly_type::set_type set_type
Type of sets of Boolean variables.
Definition: BooleMonomial.h:79
This class defines an iterator over the first minimal term of a given ZDD node.
Definition: CCuddFirstIter.h:35
BooleMonomial::bool_type operator<(const BooleMonomial &lhs, const BooleMonomial &rhs)
Less than comparision.
Definition: BooleMonomial.h:286
const dd_type & diagram() const
Read-only access to internal decision diagramm structure.
Definition: BooleMonomial.h:213
BoolePolynomial & operator*=(BoolePolynomial &lhs, const BooleVariable &rhs)
Multiplication of a polynomial by a variable with assignment.
Definition: BooleMonomial.h:366
bool_type isOne() const
Definition: BooleMonomial.h:185
size_type size() const
Size of the exponents.
Definition: BooleMonomial.h:151
variable_iterator variableEnd() const
Finish iteration over variables.
Definition: BooleMonomial.h:141
bool_type isConstant() const
Definition: BooleMonomial.h:186
polybori::CTypes::idx_type idx_type
Definition: groebner_defs.h:44
BoolePolynomial operator*(const BoolePolynomial &lhs, const BooleVariable &rhs)
Multiplication of a polynomial by a variable.
Definition: BooleMonomial.h:382
std::size_t size_type
Type for lengths, dimensions, etc.
Definition: pbori_defs.h:219
poly_type::constant_type constant_type
Type of Boolean constants.
Definition: BooleMonomial.h:76
Definition: BooleSet.h:57
This class wraps a bool value, which was not converted to a boolean polynomial or monomial yet...
Definition: BooleConstant.h:40
This class is just a wrapper for using variables from cudd's decicion diagram.
Definition: BooleMonomial.h:50
bool bool_type
Type for standard true/false statements.
Definition: pbori_defs.h:216
hash_type hash() const
Get unique hash value (valid only per runtime)
Definition: BooleMonomial.h:165
This class is just a wrapper for using variables from cudd's decicion diagram.
Definition: BooleVariable.h:39
This class shows, whether a property of an order is valid.
Definition: tags.h:32
bool_type operator!=(const self &rhs) const
Definition: BooleMonomial.h:182