not(P):- call(P), !, fail. not(P). :- dynamic why/1. not2(P) :- call(P), assert(why(P)), !, fail. not2(P).