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: b,
                            array [int] of set of int: as,
                            var set of int: c)
Constrains as[b] = c

array_var_set_element

predicate array_var_set_element(var int: b,
                                array [int] of var set of int: as,
                                var set of int: c)
Constrains as[b] = c

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: x,
                   var set of int: y,
                   var set of int: r)
Constrains r = x \(\setminus\) y

set_eq

predicate set_eq(var set of int: x, var set of int: y)
Constrains x = y

set_eq_reif

predicate set_eq_reif(var set of int: x,
                      var set of int: y,
                      var bool: r)
Constrains r \(\leftrightarrow\) (x = y)

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: r)
predicate set_in_reif(var int: x, var set of int: S, var bool: r)
Constrains \({\bf r} \leftrightarrow ({\bf x} \in {\bf S})\)

set_intersect

predicate set_intersect(var set of int: x,
                        var set of int: y,
                        var set of int: r)
Constrains r = x \(\cap\) y

set_le

predicate set_le(var set of int: x, var set of int: y)
Constrains xy (lexicographic order of the sorted lists of elements)

set_le_reif

predicate set_le_reif(var set of int: x,
                      var set of int: y,
                      var bool: r)
Constrains \({\bf r} \leftrightarrow ({\bf x} \leq {\bf y})\) (lexicographic order of the sorted lists of elements)

set_lt

predicate set_lt(var set of int: x, var set of int: y)
Constrains x < y (lexicographic order of the sorted lists of elements)

set_lt_reif

predicate set_lt_reif(var set of int: x,
                      var set of int: y,
                      var bool: r)
Constrains \({\bf r} \leftrightarrow ({\bf x} < {\bf y})\) (lexicographic order of the sorted lists of elements)

set_ne

predicate set_ne(var set of int: x, var set of int: y)
Constrains xy

set_ne_reif

predicate set_ne_reif(var set of int: x,
                      var set of int: y,
                      var bool: r)
Constrains r \(\leftrightarrow\) (xy)

set_subset

predicate set_subset(var set of int: x, var set of int: y)
Constrains x \(\subseteq\) y

set_subset_reif

predicate set_subset_reif(var set of int: x,
                          var set of int: y,
                          var bool: r)
Constrains \({\bf r} \leftrightarrow ({\bf x} \subseteq {\bf y})\)

set_superset

predicate set_superset(var set of int: x, var set of int: y)
Constrains x \(\supseteq\) y

set_superset_reif

predicate set_superset_reif(var set of int: x,
                            var set of int: y,
                            var bool: r)
Constrains \({\bf r} \leftrightarrow ({\bf x} \subseteq {\bf y})\)

set_symdiff

predicate set_symdiff(var set of int: x,
                      var set of int: y,
                      var set of int: r)
Constrains r to be the symmetric difference of x and y

set_union

predicate set_union(var set of int: x,
                    var set of int: y,
                    var set of int: r)
Constrains r = x \(\cup\) y