:- use_module(library(lists), [member/2]). ppp :- findall(pp(Head,Body),pp(Head,Body),Program1), reverse_program(Program1,[],Program2), Query = run(_), findall(Query,exec(Query,Program1),Answers1), findall(Query,exec(Query,Program2),Answers2), is_a_copy(Answers1,Answers2). exec((Goal1,Goal2),Program) :- !, exec(Goal1,Program), exec(Goal2,Program). exec(true,_) :- !. exec(Head,Program) :- member(Clause,Program), copy_term(Clause,pp(Head,Body)), exec(Body,Program). reverse_program([],L,L). reverse_program([pp(H,B)|R],In,Out) :- reverse_body(B,true,NewB), reverse_program(R,[pp(H,NewB)|In],Out). reverse_body((A,B),In,Out) :- !, reverse_body(B,(A,In),Out). reverse_body(A,In,(A,In)). is_a_copy(A,B) :- numbervars(A,1,N), numbervars(B,1,N), A = B.