4.2.1.7. Conditionals

These functions implement conditional (if-then-else-endif) constraints.

In this section: if_then_else, if_then_else_partiality.

if_then_else

predicate if_then_else(array [int] of var bool: c,
                       array [int] of int: x,
                       var int: y)
predicate if_then_else(array [int] of var bool: c,
                       array [int] of var int: x,
                       var int: y)
predicate if_then_else(array [int] of var bool: c,
                       array [int] of opt int: x,
                       var opt int: y)
predicate if_then_else(array [int] of var bool: c,
                       array [int] of var opt int: x,
                       var opt int: y)
predicate if_then_else(array [int] of var bool: c,
                       array [int] of bool: x,
                       var bool: y)
predicate if_then_else(array [int] of var bool: c,
                       array [int] of var bool: x,
                       var bool: y)
predicate if_then_else(array [int] of var bool: c,
                       array [int] of opt bool: x,
                       var opt bool: y)
predicate if_then_else(array [int] of var bool: c,
                       array [int] of var opt bool: x,
                       var opt bool: y)
predicate if_then_else(array [int] of var bool: c,
                       array [int] of float: x,
                       var float: y)
predicate if_then_else(array [int] of var bool: c,
                       array [int] of var float: x,
                       var float: y)
predicate if_then_else(array [int] of var bool: c,
                       array [int] of opt float: x,
                       var opt float: y)
predicate if_then_else(array [int] of var bool: c,
                       array [int] of var opt float: x,
                       var opt float: y)
predicate if_then_else(array [int] of var bool: c,
                       array [int] of set of int: x,
                       var set of int: y)
predicate if_then_else(array [int] of var bool: c,
                       array [int] of var set of int: x,
                       var set of int: y)

Conditional constraint \(\{{\bf c}[i]\land\not\exists {\bf c}[1..i-1]\ \rightarrow\ {\bf y}={\bf x}[i] \}\)

This constraint is generated by the compiler for if-then-else expressions. The last entry in the c array is always the constant true, corresponding to the else case.

if_then_else_partiality

predicate if_then_else_partiality(array [int] of var bool: c,
                                  array [int] of var bool: d,
                                  var bool: b)

Conditional partiality constraint

This constraint is generated by the compiler for if-then-else expressions with potentially undefined cases. The last entry in the c array is always the constant true, corresponding to the else case. The d[i] variable represents whether case i is defined. Constrains that if b is defined, then the selected case must be defined, and if the selected case is undefined, then b must be undefined.