4.2.3.3. Set FlatZinc builtins
In this section: array_set_element, array_var_set_element, set_card, set_diff, set_eq, set_eq_reif, set_in, set_in_reif, set_intersect, set_le, set_le_reif, set_lt, set_lt_reif, set_ne, set_ne_reif, set_subset, set_subset_reif, set_superset, set_superset_reif, set_symdiff, set_union.
array_set_element
predicate array_set_element(var int: idx,
array [int] of set of int: xs,
var set of int: y)
|
Constrains xs[idx] = y |
array_var_set_element
predicate array_var_set_element(var int: idx,
array [int] of var set of int: xs,
var set of int: y)
|
Constrains xs[idx] = y |
set_card
predicate set_card(var set of int: s, var int: x)
|
Constrains x = |s| |
set_diff
predicate set_diff(var set of int: s,
var set of int: t,
var set of int: r)
|
Constrains r = s \(\setminus\) t |
set_eq
predicate set_eq(var set of int: s, var set of int: t)
|
Constrains s = t |
set_eq_reif
predicate set_eq_reif(var set of int: s,
var set of int: t,
var bool: b)
|
Constrains b \(\leftrightarrow\) (s = t) |
set_in
predicate set_in(var int: x, var set of int: s)
|
Constrains x \(\in\) s |
set_in_reif
predicate set_in_reif(var int: x, set of int: s, var bool: b)
predicate set_in_reif(var int: x, var set of int: s, var bool: b)
|
Constrains \({\bf b} \leftrightarrow ({\bf x} \in {\bf s})\) |
set_intersect
predicate set_intersect(var set of int: s,
var set of int: t,
var set of int: r)
|
Constrains r = s \(\cap\) t |
set_le
predicate set_le(var set of int: s, var set of int: t)
|
Constrains s ≤ t (lexicographic order of the sorted lists of elements) |
set_le_reif
predicate set_le_reif(var set of int: s,
var set of int: t,
var bool: b)
|
Constrains \({\bf b} \leftrightarrow ({\bf s} \leq {\bf t})\) (lexicographic order of the sorted lists of elements) |
set_lt
predicate set_lt(var set of int: s, var set of int: t)
|
Constrains s < t (lexicographic order of the sorted lists of elements) |
set_lt_reif
predicate set_lt_reif(var set of int: s,
var set of int: t,
var bool: b)
|
Constrains \({\bf b} \leftrightarrow ({\bf s} < {\bf t})\) (lexicographic order of the sorted lists of elements) |
set_ne
predicate set_ne(var set of int: s, var set of int: t)
|
Constrains s ≠ t |
set_ne_reif
predicate set_ne_reif(var set of int: s,
var set of int: t,
var bool: b)
|
Constrains b \(\leftrightarrow\) (s ≠ t) |
set_subset
predicate set_subset(var set of int: s, var set of int: t)
|
Constrains s \(\subseteq\) t |
set_subset_reif
predicate set_subset_reif(var set of int: s,
var set of int: t,
var bool: b)
|
Constrains \({\bf b} \leftrightarrow ({\bf s} \subseteq {\bf t})\) |
set_superset
predicate set_superset(var set of int: s, var set of int: t)
|
Constrains s \(\supseteq\) t |
set_superset_reif
predicate set_superset_reif(var set of int: s,
var set of int: t,
var bool: b)
|
Constrains \({\bf b} \leftrightarrow ({\bf s} \subseteq {\bf t})\) |
set_symdiff
predicate set_symdiff(var set of int: s,
var set of int: t,
var set of int: r)
|
Constrains r to be the symmetric difference of s and t |
set_union
predicate set_union(var set of int: s,
var set of int: t,
var set of int: r)
|
Constrains r = s \(\cup\) t |