		/* Basic Set Operations */

mode none.
closure none.

union(S1, S2) contains S1.
union(S1, S2) contains S2.

product({X\_}, {Y\_}) contains {[X|Y]}.

intersect({X\_}, {X\_}) contains {X}.

member(X, {X\_}) equals true.
member(X, _)     equals false.

difference({X\_}, S2) contains if member(X,S2) then phi else {X}.

permutations(phi)   contains {[]}.
permutations({H\T}) contains distr(H,permutations(T)).

        distr(H, {T\_}) contains {[H|T]}.

size(phi)   equals 0.
size({H\T}) equals 1 + size(T).

powerset(phi)   equals {phi}.
powerset({H\T}) equals power(H,powerset(T)).

        power(_, S2)     contains S2.
        power(H, {S2\_}) contains {{H\S2}}.

