%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%% The {log} library %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Oct. 1996 - by Gianfranco Rossi % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% less(R,X,S) :- % S = R\{X} R = {X/S} & X nin S. subset(S1,S2) :- % subset forall(X in S1,X in S2). size(S,N) :- in_size(S,0,N). % cardinality in_size('{}',N,N). in_size(S,N,M) :- N neq M & less(S,_,SS) & NN is N + 1 & in_size(SS,NN,M). union('{}',X,X). % union union(R,S,{A/U}) :- less(R,A,RR) & union(RR,S,U). int('{}',_,'{}'). % intersection int(R,S,{X/U}) :- less(R,X,RR) & X in S & int(RR,S,U). int(R,S,U) :- less(R,X,RR) & X nin S & int(RR,S,U). diff('{}',_,'{}'). % difference diff(R,S,U) :- less(R,X,RR) & X in S & diff(RR,S,U). diff(R,S,{X/U}) :- less(R,X,RR) & X nin S & diff(RR,S,U). powerset(S,PS) :- % powerset PS = {SS : subset(SS,S)}.