%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% simple constraint solver for inequalities between variables %% thom fruehwirth ECRC 950519, LMU 980207, 980311 %% %% ported to hProlog by Tom Schrijvers :- module(leq,[]). :- use_module(library(chr)). :- constraints 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). time(N):- cputime(X), length(L,N), genleq(L,Last), L=[First|_], leq(Last,First), cputime( Now), Time is Now-X, write(N-Time), nl. genleq([Last],Last) :- ! . genleq([X,Y|Xs],Last):- leq(X,Y), genleq([Y|Xs],Last). cputime( Ts) :- statistics( runtime, [Tm,_]), Ts is Tm/1000.