:- op(449,xfx,'..'). :- use_module(library(chr)). handler knowledge_manager. constraints class/1, object/2, property/2. property(Class, Prop:X), property(Class, Prop:Y) <=> integer(X), integer(Y), X =< Y | property(Class, Prop:X..Y). property(Class, Prop:X..Y), property(Class, Prop:Z) <=> integer(Z), Z =< X | property(Class, Prop:Z..Y). property(Class, Prop:X..Y), property(Class, Prop:Z) <=> integer(Z), X =< Z, Z =< Y | property(Class, Prop:X..Y). property(Class, Prop:X..Y), property(Class, Prop:Z) <=> integer(Z), Y < Z | property(Class, Prop:Z..Y). property(Class, Prop:A..B), property(Class, Prop:C..D) <=> min(X,A,B,C,D), max(Y,A,B,C,D) | property(Class, Prop:X..Y). min(A,A,B,C,D):- A =< B, A =< C, A =< D. min(B,A,B,C,D):- B =< A, B =< C, B =< D. min(C,A,B,C,D):- C =< B, C =< A, C =< D. min(D,A,B,C,D):- D =< B, D =< C, D =< A. max(A,A,B,C,D):- A >= B, A >= C, A >= D. max(B,A,B,C,D):- B >= A, B >= C, B >= D. max(C,A,B,C,D):- C >= B, C >= A, C >= D. max(D,A,B,C,D):- D >= B, D >= C, D >= A. %%%%%%%%%%%%%%%%%%%%%%%%%%% object(Obj,Class) \ property(Obj,Prop) <=> property(Class,Prop). %Test test:- class(man), object(john,man), object(peter,man), property(john,car:1), property(peter,car:3).