/* Global constraint minimum_greater_than in Picat. From Global Constraint Catalogue http://www.emn.fr/x-info/sdemasse/gccat/Cminimum_greater_than.html """ Constraint minimum_greater_than(VAR1,VAR2,VARIABLES) Purpose VAR1 is the smallest value strictly greater than VAR2 of the collection of variables VARIABLES: this concretely means that there exists at least one variable of VARIABLES that takes a value strictly greater than VAR1. Example (5, 3, <8, 5, 3, 8>) The minimum_greater_than constraint holds since value 5 is the smallest value strictly greater than value 3 among values 8, 5, 3 and 8. """ 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 ?=> N = 4, Variables = new_list(N), Variables :: 1..8, [Var1, Var2] :: 1..8, Variables = [8,5,3,8], % Var1 #= 5, % Var2 #= 3, minimum_greater_than(Var1,Var2,Variables), Vars = Variables ++ [Var1,Var2], solve(Vars), println(variables=Variables), println(var1=Var1), println(var2=Var2), nl, fail, nl. go => true. minimum_greater_than(Var1, Var2, Variables) => N = Variables.len, Var1 #> Var2, foreach(I in 1..N) Variables[I] #> Var2 #=> Var1 #=< Variables[I] end, % both var1 and var2 must exist in variables sum([Var1 #= Variables[I] : I in 1..N]) #>= 1, sum([Var2 #= Variables[I] : I in 1..N]) #>= 1.