1
0
This repository has been archived on 2025-03-06. You can view files and clone it, but cannot push or open issues or pull requests.
on-restart-benchmarks/share/minizinc/std/fzn_strictly_increasing_int_opt.mzn
Jip J. Dekker fad1b07018 Squashed 'software/minizinc/' content from commit 4f10c8205
git-subtree-dir: software/minizinc
git-subtree-split: 4f10c82056ffcb1041d7ffef29d77a7eef92cf76
2021-06-16 14:06:46 +10:00

21 lines
684 B
MiniZinc

%-----------------------------------------------------------------------------%
% Requires that the array 'x' is in strict increasing order
%-----------------------------------------------------------------------------%
predicate fzn_strictly_increasing_int_opt(array[int] of var opt int: x) =
let {
array[int] of var opt int: xx = array1d(x);
array[1..length(xx)] of var int: y;
constraint forall(i in 1..length(xx)) (
y[i] = if occurs(xx[i]) then
deopt(xx[i])
elseif i = 1 then
lb_array(xx) - 1
else
y[i-1]
endif
);
} in forall (i in 2..length(y) where occurs(xx[i])) (
deopt(xx[i]) > y[i-1]
);