%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% simple constraint solver for inequalities between variables %% thom fruehwirth ECRC 950519, LMU 980207, 980311 %% %% ported to hProlog by Tom Schrijvers :- module(leq,[leq/0]). :- use_module(library(chr)). :- chr_constraint leq/2. reflexivity @ leq(X,X) <=> true. antisymmetry @ leq(X,Y), leq(Y,X) <=> X = Y. idempotence @ leq(X,Y) \ leq(X,Y) <=> true. transitivity @ leq(X,Y), leq(Y,Z) ==> leq(X,Z). leq :- circle(X, Y, Z), \+ attvar(X), X == Y, Y == Z. circle(X, Y, Z) :- leq(X, Y), leq(Y, Z), leq(Z, X).