1predicate bool_clause_reif(array[int] of var bool: p, array[int] of var bool: n, var bool: c) =
2    c = ( sum(i in index_set(p))( bool2int(p[i]) )
3          - sum(i in index_set(n))( bool2int(n[i]) )
4          + length(n)
5            >= 1
6        );
7
8
9predicate array_int_minimum(var int: m, array[int] of var int: x) =
10    array_int_minimum_I( m, [ x[i] | i in index_set(x)]);
11predicate array_int_maximum(var int: m, array[int] of var int: x) =
12    array_int_minimum_I(-m, [-x[i] | i in index_set(x)]);
13predicate array_float_minimum(var float: m, array[int] of var float: x) =
14    array_float_minimum_I( m, [ x[i] | i in index_set(x)]);
15predicate array_float_maximum(var float: m, array[int] of var float: x) =
16    array_float_minimum_I(-m, [-x[i] | i in index_set(x)]);
17
18