this repo has no description
1include "all_different.mzn";
2
3predicate fzn_circuit(array[int] of var int: x) =
4 let { set of int: S = index_set(x),
5 int: l = min(S),
6 int: n = card(S),
7 array[S] of var 1..n: order
8 } in
9 all_different(x) /\
10 all_different(order) /\
11 forall(i in S)(x[i] != i) /\
12 order[l] = 1 /\
13 forall(i in S)(order[i] != n -> order[x[i]] = order[i] + 1) /\
14 forall(i in S)(order[i] == n -> x[i] = l );
15
16%-----------------------------------------------------------------------------%