|
| Constraint (Representation r=default_representation) |
| Constructs the constraint.
|
|
| Constraint (const Constraint &c) |
| Ordinary copy constructor. More...
|
|
| Constraint (const Constraint &c, dimension_type space_dim) |
| Copy constructor with given size. More...
|
|
| Constraint (const Constraint &c, Representation r) |
| Copy constructor with given representation.
|
|
| Constraint (const Constraint &c, dimension_type space_dim, Representation r) |
| Copy constructor with given size and representation.
|
|
| Constraint (const Congruence &cg, Representation r=default_representation) |
| Copy-constructs from equality congruence cg . More...
|
|
| ~Constraint () |
| Destructor.
|
|
Representation | representation () const |
| Returns the current representation of *this.
|
|
void | set_representation (Representation r) |
| Converts *this to the specified representation.
|
|
Constraint & | operator= (const Constraint &c) |
| Assignment operator.
|
|
dimension_type | space_dimension () const |
| Returns the dimension of the vector space enclosing *this .
|
|
void | set_space_dimension (dimension_type space_dim) |
|
void | swap_space_dimensions (Variable v1, Variable v2) |
| Swaps the coefficients of the variables v1 and v2 .
|
|
bool | remove_space_dimensions (const Variables_Set &vars) |
| Removes all the specified dimensions from the constraint. More...
|
|
void | permute_space_dimensions (const std::vector< Variable > &cycle) |
| Permutes the space dimensions of the constraint.
|
|
void | shift_space_dimensions (Variable v, dimension_type n) |
|
Type | type () const |
| Returns the constraint type of *this .
|
|
bool | is_equality () const |
| Returns true if and only if *this is an equality constraint.
|
|
bool | is_inequality () const |
| Returns true if and only if *this is an inequality constraint (either strict or non-strict).
|
|
bool | is_nonstrict_inequality () const |
| Returns true if and only if *this is a non-strict inequality constraint.
|
|
bool | is_strict_inequality () const |
| Returns true if and only if *this is a strict inequality constraint.
|
|
Coefficient_traits::const_reference | coefficient (Variable v) const |
| Returns the coefficient of v in *this . More...
|
|
Coefficient_traits::const_reference | inhomogeneous_term () const |
| Returns the inhomogeneous term of *this .
|
|
memory_size_type | total_memory_in_bytes () const |
| Returns a lower bound to the total size in bytes of the memory occupied by *this .
|
|
memory_size_type | external_memory_in_bytes () const |
| Returns the size in bytes of the memory managed by *this .
|
|
bool | is_tautological () const |
| Returns true if and only if *this is a tautology (i.e., an always true constraint). More...
|
|
bool | is_inconsistent () const |
| Returns true if and only if *this is inconsistent (i.e., an always false constraint). More...
|
|
bool | is_equivalent_to (const Constraint &y) const |
| Returns true if and only if *this and y are equivalent constraints. More...
|
|
bool | is_equal_to (const Constraint &y) const |
| Returns true if *this is identical to y . More...
|
|
bool | OK () const |
| Checks if all the invariants are satisfied.
|
|
void | ascii_dump () const |
| Writes to std::cerr an ASCII representation of *this .
|
|
void | ascii_dump (std::ostream &s) const |
| Writes to s an ASCII representation of *this .
|
|
void | print () const |
| Prints *this to std::cerr using operator<< .
|
|
bool | ascii_load (std::istream &s) |
| Loads from s an ASCII representation (as produced by ascii_dump(std::ostream&) const) and sets *this accordingly. Returns true if successful, false otherwise.
|
|
void | m_swap (Constraint &y) |
| Swaps *this with y .
|
|
expr_type | expression () const |
| Partial read access to the (adapted) internal expression.
|
|
|
(Note that these are not member functions.)
|
Constraint | operator< (const Linear_Expression &e1, const Linear_Expression &e2) |
| Returns the constraint e1 < e2 . More...
|
|
Constraint | operator< (Variable v1, Variable v2) |
| Returns the constraint v1 < v2 . More...
|
|
Constraint | operator< (const Linear_Expression &e, Coefficient_traits::const_reference n) |
| Returns the constraint e < n . More...
|
|
Constraint | operator< (Coefficient_traits::const_reference n, const Linear_Expression &e) |
| Returns the constraint n < e . More...
|
|
Constraint | operator> (const Linear_Expression &e1, const Linear_Expression &e2) |
| Returns the constraint e1 > e2 . More...
|
|
Constraint | operator> (Variable v1, Variable v2) |
| Returns the constraint v1 > v2 . More...
|
|
Constraint | operator> (const Linear_Expression &e, Coefficient_traits::const_reference n) |
| Returns the constraint e > n . More...
|
|
Constraint | operator> (Coefficient_traits::const_reference n, const Linear_Expression &e) |
| Returns the constraint n > e . More...
|
|
Constraint | operator== (const Linear_Expression &e1, const Linear_Expression &e2) |
| Returns the constraint e1 = e2 . More...
|
|
Constraint | operator== (Variable v1, Variable v2) |
| Returns the constraint v1 = v2 . More...
|
|
Constraint | operator== (const Linear_Expression &e, Coefficient_traits::const_reference n) |
| Returns the constraint e = n . More...
|
|
Constraint | operator== (Coefficient_traits::const_reference n, const Linear_Expression &e) |
| Returns the constraint n = e . More...
|
|
Constraint | operator<= (const Linear_Expression &e1, const Linear_Expression &e2) |
| Returns the constraint e1 <= e2 . More...
|
|
Constraint | operator<= (Variable v1, Variable v2) |
| Returns the constraint v1 <= v2 . More...
|
|
Constraint | operator<= (const Linear_Expression &e, Coefficient_traits::const_reference n) |
| Returns the constraint e <= n . More...
|
|
Constraint | operator<= (Coefficient_traits::const_reference n, const Linear_Expression &e) |
| Returns the constraint n <= e . More...
|
|
Constraint | operator>= (const Linear_Expression &e1, const Linear_Expression &e2) |
| Returns the constraint e1 >= e2 . More...
|
|
Constraint | operator>= (Variable v1, Variable v2) |
| Returns the constraint v1 >= v2 . More...
|
|
Constraint | operator>= (const Linear_Expression &e, Coefficient_traits::const_reference n) |
| Returns the constraint e >= n . More...
|
|
Constraint | operator>= (Coefficient_traits::const_reference n, const Linear_Expression &e) |
| Returns the constraint n >= e . More...
|
|
std::ostream & | operator<< (std::ostream &s, const Constraint &c) |
| Output operator. More...
|
|
std::ostream & | operator<< (std::ostream &s, const Constraint::Type &t) |
| Output operator. More...
|
|
bool | operator== (const Constraint &x, const Constraint &y) |
| Returns true if and only if x is equivalent to y . More...
|
|
bool | operator!= (const Constraint &x, const Constraint &y) |
| Returns true if and only if x is not equivalent to y . More...
|
|
void | swap (Constraint &x, Constraint &y) |
|
bool | operator== (const Constraint &x, const Constraint &y) |
|
bool | operator!= (const Constraint &x, const Constraint &y) |
|
Constraint | operator== (const Linear_Expression &e1, const Linear_Expression &e2) |
|
Constraint | operator== (Variable v1, Variable v2) |
|
Constraint | operator>= (const Linear_Expression &e1, const Linear_Expression &e2) |
|
Constraint | operator>= (const Variable v1, const Variable v2) |
|
Constraint | operator> (const Linear_Expression &e1, const Linear_Expression &e2) |
|
Constraint | operator> (const Variable v1, const Variable v2) |
|
Constraint | operator== (Coefficient_traits::const_reference n, const Linear_Expression &e) |
|
Constraint | operator>= (Coefficient_traits::const_reference n, const Linear_Expression &e) |
|
Constraint | operator> (Coefficient_traits::const_reference n, const Linear_Expression &e) |
|
Constraint | operator== (const Linear_Expression &e, Coefficient_traits::const_reference n) |
|
Constraint | operator>= (const Linear_Expression &e, Coefficient_traits::const_reference n) |
|
Constraint | operator> (const Linear_Expression &e, Coefficient_traits::const_reference n) |
|
Constraint | operator<= (const Linear_Expression &e1, const Linear_Expression &e2) |
|
Constraint | operator<= (const Variable v1, const Variable v2) |
|
Constraint | operator<= (Coefficient_traits::const_reference n, const Linear_Expression &e) |
|
Constraint | operator<= (const Linear_Expression &e, Coefficient_traits::const_reference n) |
|
Constraint | operator< (const Linear_Expression &e1, const Linear_Expression &e2) |
|
Constraint | operator< (const Variable v1, const Variable v2) |
|
Constraint | operator< (Coefficient_traits::const_reference n, const Linear_Expression &e) |
|
Constraint | operator< (const Linear_Expression &e, Coefficient_traits::const_reference n) |
|
void | swap (Constraint &x, Constraint &y) |
|
A linear equality or inequality.
An object of the class Constraint is either:
- an equality:
;
- a non-strict inequality:
; or
- a strict inequality:
;
where
is the dimension of the space,
is the integer coefficient of variable
and
is the integer inhomogeneous term.
- How to build a constraint
- Constraints are typically built by applying a relation symbol to a pair of linear expressions. Available relation symbols are equality (
==
), non-strict inequalities (>=
and <=
) and strict inequalities (<
and >
). The space dimension of a constraint is defined as the maximum space dimension of the arguments of its constructor.
- In the following examples it is assumed that variables
x
, y
and z
are defined as follows: Variable x(0);
Variable y(1);
Variable z(2);
- Example 1
- The following code builds the equality constraint
, having space dimension
: The following code builds the (non-strict) inequality constraint
, having space dimension
: The corresponding strict inequality constraint
is obtained as follows: An unsatisfiable constraint on the zero-dimension space
can be specified as follows: Equivalent, but more involved ways are the following: In contrast, the following code defines an unsatisfiable constraint having space dimension
:
- How to inspect a constraint
- Several methods are provided to examine a constraint and extract all the encoded information: its space dimension, its type (equality, non-strict inequality, strict inequality) and the value of its integer coefficients.
- Example 2
- The following code shows how it is possible to access each single coefficient of a constraint. Given an inequality constraint (in this case
), we construct a new constraint corresponding to its complement (thus, in this case we want to obtain the strict inequality constraint
).
cout << "Constraint c1: " << c1 << endl;
if (c1.is_equality())
cout << "Constraint c1 is not an inequality." << endl;
else {
Linear_Expression e;
e += c1.coefficient(Variable(i)) * Variable(i);
e += c1.inhomogeneous_term();
Constraint c2 = c1.is_strict_inequality() ? (e <= 0) : (e < 0);
cout << "Complement c2: " << c2 << endl;
}
The actual output is the following:
Complement c2: A - 5*B + 3*C > 4
Note that, in general, the particular output obtained can be syntactically different from the (semantically equivalent) constraint considered.