clear(A) :- on(A,_), not on(_,A).
clear(A) :- table = A.
above(A,B) :- on(A,B).
above(A,B) :- on(A,C), above(C,B).
goalRelevant(A) :- goal(A,_).
goalRelevant(A) :- goal(_, A).
finalBasis(X) :- goal(_,X), not goal(X,_), 
	0 = #count { B : above(X,B), goalRelevant(B) }.
final(X, X) :- finalBasis(X).
final(X,B1) :- final(X,B2), on(B1,B2), goal(B1,B2).
incomplete(X,T) :- final(X,T), goal(B,T), not on(B,T).
