contenuto([a,b,c,d]).

sov(X,a):- not(X==a).
sov(b,c).
sov(d,b).


pala(P) :- contenuto(C), palac(P,C).

palac([], _).
palac([X], Cesto):- member(X,Cesto).
palac([X,Y|R], Cesto) :- member(X,Cesto), 
                        sov(X,Y), 
                        elim(X,Cesto, Cesto1),
                        palac([Y|R],Cesto1).

elim(X,[X],[]) :- !.
elim(X,[A,B|R], [B|R]) :- X=A, !.
elim(X,[A,B|R],[A|E]) :- elim(X,[B|R],E).