|  | 
|  | 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 v1andv2.
 | 
|  | 
| 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 trueif and only if*thisis an equality constraint.
 | 
|  | 
| bool | is_inequality () const | 
|  | Returns trueif and only if*thisis an inequality constraint (either strict or non-strict).
 | 
|  | 
| bool | is_nonstrict_inequality () const | 
|  | Returns trueif and only if*thisis a non-strict inequality constraint.
 | 
|  | 
| bool | is_strict_inequality () const | 
|  | Returns trueif and only if*thisis a strict inequality constraint.
 | 
|  | 
| Coefficient_traits::const_reference | coefficient (Variable v) const | 
|  | Returns the coefficient of vin*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 trueif and only if*thisis a tautology (i.e., an always true constraint).  More...
 | 
|  | 
| bool | is_inconsistent () const | 
|  | Returns trueif and only if*thisis inconsistent (i.e., an always false constraint).  More...
 | 
|  | 
| bool | is_equivalent_to (const Constraint &y) const | 
|  | Returns trueif and only if*thisandyare equivalent constraints.  More...
 | 
|  | 
| bool | is_equal_to (const Constraint &y) const | 
|  | Returns trueif*thisis identical toy.  More...
 | 
|  | 
| bool | OK () const | 
|  | Checks if all the invariants are satisfied. 
 | 
|  | 
| void | ascii_dump () const | 
|  | Writes to std::cerran ASCII representation of*this.
 | 
|  | 
| void | ascii_dump (std::ostream &s) const | 
|  | Writes to san ASCII representation of*this.
 | 
|  | 
| void | print () const | 
|  | Prints *thistostd::cerrusingoperator<<.
 | 
|  | 
| bool | ascii_load (std::istream &s) | 
|  | Loads from san ASCII representation (as produced by ascii_dump(std::ostream&) const) and sets*thisaccordingly. Returnstrueif successful,falseotherwise.
 | 
|  | 
| void | m_swap (Constraint &y) | 
|  | Swaps *thiswithy.
 | 
|  | 
| 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 trueif and only ifxis equivalent toy.  More...
 | 
|  | 
| bool | operator!= (const Constraint &x, const Constraint &y) | 
|  | Returns trueif and only ifxis not equivalent toy.  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 ; or
- a strict inequality:  ; ;
where  is the dimension of the space,
 is the dimension of the space,  is the integer coefficient of variable
 is the integer coefficient of variable  and
 and  is the integer inhomogeneous term.
 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,yandzare defined as follows:Variable x(0); Variable y(1); Variable z(2); 
- Example 1
- The following code builds the equality constraint  , having space dimension , having space dimension :  The following code builds the (non-strict) inequality constraint :  The following code builds the (non-strict) inequality constraint , having space dimension , having space dimension :  The corresponding strict inequality constraint :  The corresponding strict inequality constraint is obtained as follows:  An unsatisfiable constraint on the zero-dimension space 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 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 ), 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.