% Simple Robot Arm Planner % e represents initial state: % Initial state specification: % World Axioms. above(X,Y,S) :- on(X,Y,S). above(X,Y,S) :- on(X,Z,S), above(Z,Y,S). % Change Axioms holding(X,pickup(X,S)) :- armempty(S), clear(X,S). on(c,a,e). %on(X,Y,stack(X,Y,S)) :- clear(Y,S), holding(X,S). on(X,Y,stack(X,Y,S)) :- holding(X,S), clear(Y,S). on(X,Y,pickup(Z,S)) :- nott(X=Z), on(X,Y,S). on(X,Y,putdown(Z,S)) :- on(X,Y,S). on(X,Y,stack(Z,G,S)) :- on(X,Y,S). clear(b,e). clear(c,e). clear(X,pickup(Y,S)) :- on(Y,X,S), holding(Y,pickup(Y,S)). %clear(X,pickup(Y,S)) :- on(Y,X,S), clear(Y,S), armempty(S). clear(X,putdown(Y,S)) :- clear(X,S). clear(X,pickup(Y,S)) :- clear(X,S). clear(X,stack(Y,Z,S)) :- nott(Z=X), clear(X,S). ontable(a,e). ontable(b,e). ontable(X,putdown(X,S)) :- holding(X,S). ontable(X,pickup(Y,S)) :- nott(X=Y), ontable(X,S). ontable(X,putdown(Y,S)) :- ontable(X,S). ontable(X,stack(Y,Z,S)) :- ontable(X,S). armempty(e). armempty(putdown(X,S)) :- holding(X,S). armempty(stack(X,Y,S)) :- holding(X,S), clear(Y,S). nott(A) :- !, not(A). nott(A) :- call(A), !, 5=4. nott(A).