[ library(fd) | Reference Manual | Alphabetic Index ]
# ##(?X, ?Y, ?B)

The constraint X ## Y has the truth value B.
*?X*
- A linear term.
*?Y*
- A linear term.
*?B*
- A variable with domain 0..1.

## Description

This predicate is an evaluation constraint: it succeeds if and only if
the truth value of its associated constraint (the constraint with arity
one less and the same arguments except for B) is equal to B, where the
value 0 means false and 1 true. This constraint can be used both to
test the validity of the associated constraint (entailment test) and to
impose this constraint or its negation. For the former, B will be
instantiated as soon as either the associated constraint or its negation
is subsumed by the current state of its domain variables. For the
latter, when B is instantiated, then depending on its value, either the
associated constraint or its negation will be imposed on its arguments.
Boolean expressions containing arithmetic constraints are converted by
the system to a series of evaluation constraints and arithmetic
constraints in a way similar to arithmetic evaluation, e.g.

X #> Y #=> T #> V #/\ E #= F

is transformed into

#>(X, Y, B1),
#>(T, V, B2),
#=(E, F, B3),
#=(B2 + B3, 2, B4),
B1 #<= B4. % i.e. if B1 then B4

### Fail Conditions

Fails if B is not the truth value of the associated constraint.
### Resatisfiable

No.
## See Also

#>= / 3, #< / 3, #<= / 3, #= / 3, #\= / 3