this repo has no description
1include "seq_precede_chain.mzn";
2
3predicate fzn_value_precede_chain_int(array[int] of int: T, array[int] of var int: X) =
4 if min(index_set(T)) = 1 /\ forall (i in index_set(T))(T[i] = i)
5 /\ max(T) = ub_array(X)
6 then
7 seq_precede_chain(X)
8 else
9 let {
10 int: l = lb_array(X);
11 int: u = ub_array(X);
12 array[1.. u -l +1] of int : p
13 = [sum([i | i in index_set(T) where T[i] = j]) | j in l..u];
14 array [int] of var 0..length(T): Y
15 = array1d(index_set(X),[p[X[i]-l+1] | i in index_set(X)]);
16 } in seq_precede_chain(Y)
17 endif;