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 st (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 st

set_ne_reif

predicate set_ne_reif(var set of int: s,
                      var set of int: t,
                      var bool: b)

Constrains b \(\leftrightarrow\) (st)

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