1% subset(S1, S2) :- 2% not -subset(S1, S2). 3 4% -subset(S1, S2) :- 5% -member(X, S1), member(X,S2). 6 7% -member(X, S) :- not member(X, S). 8 9% member(X1, [X2|_]) :- X1 #= X2. 10% member(X, [_|R]) :- member(X, R). 11 12superset(Y, L) :- 13 findall(X, subset(X, Y), L). % didn't work 14 15subset([], _). 16subset([X|R], S2) :- 17 minus(X, S2, [], NS2), 18 subset(R, NS2). 19 20% minus(X, S1, [], NS1) 21minus(X, [X|R], P, F) :- 22 append(P, R, F). 23minus(X1, [X2|R], P, F) :- 24 X1 #<> X2, 25 minus(X1, R, [X2|P], F). 26 27append([], X, X). 28append([U|X], Y, [U|Z]) :- append(X,Y,Z). 29 30?- subset(X, [1,2,3]). 31 32%?- superset([1,2], L).