prove(M,I) :- append(Q,[C|R],M), \+member(-_,C), append(Q,R,S), prove([!],[[-!|C]|S],[],I). prove([],_,_,_). prove([L|C],M,P,I) :- (-N=L; -L=N) -> (member(N,P); append(Q,[D|R],M), copy_term(D,E), append(A,[N|B],E), append(A,B,F), (D==E -> append(R,Q,S); length(P,K), K