/* Global constraint equivalent in Picat. From Global Constraint Catalogue http://www.emn.fr/x-info/sdemasse/gccat/Cequivalent.html """ Constraint equivalent(VAR,VARIABLES) Purpose Let VARIABLES be a collection of 0-1 variables VAR1,VAR2. Enforce VAR=(VAR1<=>VAR2). Example (1,<0,0>) (0,<0,1>) (0,<1,0>) (1,<1,1>) """ This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import cp. main => go. go ?=> B :: 0..1, Variables = new_list(2), Variables :: 0..1, equivalent(B, Variables), Vars = Variables ++ [B], solve(Vars), println(variables=Variables), println(b=B), nl, fail, nl. go => true. equivalent(V, Vars) => N = Vars.len, NumPairs = N*(N-1) div 2, % number of comparison sum([Vars[I] #= Vars[J] : I in 1..N, J in I+1..N ]) #= NumPairs #<=> V #= 1.