4.2.3.1. Integer FlatZinc builtins

In this section: array_int_element, array_var_int_element, int_abs, int_div, int_eq, int_eq_reif, int_le, int_le_reif, int_lin_eq, int_lin_eq_reif, int_lin_le, int_lin_le_reif, int_lin_ne, int_lin_ne_reif, int_lt, int_lt_reif, int_max, int_min, int_mod, int_ne, int_ne_reif, int_plus, int_pow, int_times, set_in.

array_int_element

predicate array_int_element(var int: idx,
                            array [int] of int: xs,
                            var int: y)

Constrains xs[idx] = y

array_var_int_element

predicate array_var_int_element(var int: idx,
                                array [int] of var int: xs,
                                var int: y)

Constrains xs[idx] = y

int_abs

predicate int_abs(var int: x, var int: y)

Constrains y to be the absolute value of x

int_div

predicate int_div(var int: x, var int: y, var int: z)

Constrains x / y = z, where z is rounded to the value closest to zero (i.e., truncated).

int_eq

predicate int_eq(var int: x, var int: y)

Constrains x to be equal to y

int_eq_reif

predicate int_eq_reif(var int: x, var int: y, var bool: b)

Constrains (x=y) \(\leftrightarrow\) b

int_le

predicate int_le(var int: x, var int: y)

Constrains x to be less than or equal to y

int_le_reif

predicate int_le_reif(var int: x, var int: y, var bool: b)

Constrains (xy) \(\leftrightarrow\) b

int_lin_eq

predicate int_lin_eq(array [int] of int: as,
                     array [int] of var int: xs,
                     int: y)

Constrains \({\bf y} = \sum_i {\bf as}[i]*{\bf xs}[i]\)

int_lin_eq_reif

predicate int_lin_eq_reif(array [int] of int: as,
                          array [int] of var int: xs,
                          int: y,
                          var bool: b)

Constrains \({\bf b} \leftrightarrow ({\bf y} = \sum_i {\bf as}[i]*{\bf xs}[i])\)

int_lin_le

predicate int_lin_le(array [int] of int: as,
                     array [int] of var int: xs,
                     int: y)

Constrains \(\sum\) as[i]*xs[i] ≤ y

int_lin_le_reif

predicate int_lin_le_reif(array [int] of int: as,
                          array [int] of var int: xs,
                          int: y,
                          var bool: b)

Constrains b \(\leftrightarrow\) (\(\sum\) as[i]*xs[i] ≤ y)

int_lin_ne

predicate int_lin_ne(array [int] of int: as,
                     array [int] of var int: xs,
                     int: y)

Constrains \({\bf y} \neq \sum_i {\bf as}[i]*{\bf xs}[i]\)

int_lin_ne_reif

predicate int_lin_ne_reif(array [int] of int: as,
                          array [int] of var int: xs,
                          int: y,
                          var bool: b)

Constrains \({\bf b} \leftrightarrow ({\bf y} \neq \sum_i {\bf as}[i]*{\bf xs}[i])\)

int_lt

predicate int_lt(var int: x, var int: y)

Constrains x < y

int_lt_reif

predicate int_lt_reif(var int: x, var int: y, var bool: b)

Constrains b \(\leftrightarrow\) (x < y)

int_max

predicate int_max(var int: x, var int: y, var int: z)

Constrains max(x, y) = z

int_min

predicate int_min(var int: x, var int: y, var int: z)

Constrains min(x, y) = z

int_mod

predicate int_mod(var int: x, var int: y, var int: z)

Constrains x % y = z

int_ne

predicate int_ne(var int: x, var int: y)

Constrains xy

int_ne_reif

predicate int_ne_reif(var int: x, var int: y, var bool: b)

b \(\leftrightarrow\) (xy)

int_plus

predicate int_plus(var int: x, var int: y, var int: z)

Constrains x + y = z

int_pow

predicate int_pow(var int: x, var int: y, var int: z)

Constrains z = \({\bf x} ^ {{\bf y}}\), {bf z} is constrained to 1 div pow(x, abs(y)) when \({\bf y} < 0\)

int_times

predicate int_times(var int: x, var int: y, var int: z)

Constrains x * y = z

set_in

predicate set_in(var int: x, set of int: s)

Constrains x \(\in\) s