/* Trace domains via Action Rules in Picat. Cf with trace_domains.pi. This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import trace_domains_ar. % import util. import cp. main => go. go => X = new_list(3), X :: 1..10, trace_domain_ar(X,"X"), println(global=get_global_map()), println("all_different"), all_different(X), println("X[1] != 4"), X[1] #!= 4, % println("X[1] != 5"), % X[1] #!= 5, println("sum(X) #= 6"), sum(X) #= 6, println("increasing(X)"), increasing(X), % println("X[1] #> X[2] #<=> X[3] #> 4"), % X[1] #> X[2] #<=> X[3] #> 4, println(before_solve=X), solve(X), println(after_solve), println(x=X), nl, % fail, nl. go2 => N = 3, X = new_array(N,N), X :: 1..10, println(x=X), trace_domain_ar(X,"X"), XList = X.vars(), all_different(XList), circuit(XList), println(before_solve), solve([ffd], X), println(after_solve), println(x=X), nl, % fail, nl. increasing(List) => foreach(I in 2..List.length) List[I-1] #<= List[I] end.