Blocks world axiom/query examples from lecture
Allikas: Lambda
First, a simple version.
%set(auto).
set(factor).
set(binary_res).
%clear(print_kept).
set(prolog_style_variables).
list(sos).
%formulas(sos).
% ----- initial situation ------
holds(on(a,table),s0).
holds(on(b,table),s0).
holds(on(c,d),s0).
holds(on(d,table),s0).
holds(clear(a),s0).
holds(clear(b),s0).
holds(clear(c),s0).
holds(empty,s0).
holds(clear(table),State).
% ---- difference of objects -----
differ(X,Y)
| -differ(Y,X).
differ(a,b).
differ(a,c).
differ(a,d).
differ(a,table).
differ(b,c).
differ(b,d).
differ(b,table).
differ(c,d).
differ(c,table).
differ(d,table).
% ---- rules -----
%holds(and(X,Y),State)
% | -holds(X,State)
% | -holds(Y,State).
% pickup rules
holds(holding(X),do(pickup(X),State))
| -holds(empty,State)
| -holds(clear(X),State)
| -differ(X,table).
holds(clear(Y),do(pickup(X),State))
| -holds(on(X,Y),State)
| -holds(clear(X),State)
| -holds(empty,State).
% frame axioms for pickup
holds(on(X,Y),do(pickup(Z),State))
| -holds(on(X,Y),State)
| -differ(X,Z).
holds(clear(X),do(pickup(Z),State))
| -holds(clear(X),State)
| -differ(X,Z).
% putdown rules
holds(empty,do(putdown(X,Y),State))
| -holds(holding(X),State)
| -holds(clear(Y),State).
holds(on(X,Y),do(putdown(X,Y),State))
| -holds(holding(X),State)
| -holds(clear(Y),State).
holds(clear(X),do(putdown(X,Y),State))
| -holds(holding(X),State)
| -holds(clear(Y),State).
% frame axioms for putdown
holds(on(X,Y),do(putdown(Z,W),State))
| -holds(on(X,Y),State).
holds(clear(Z),do(putdown(X,Y),State))
| -holds(clear(Z),State)
| -differ(Z,Y).
% ----- query -------
end_of_list.
list(usable).
-holds(on(b,a),State) | -holds(on(c,b),State).
%-holds(and(on(c,b),on(b,a)),State).
end_of_list.
Second, a lot more complex version (not necessarily better!)
% this is the way comments start
%set(hyper_res). % another alternative is set(binary_res)
%set(factor). % probably comes automatically
%set(para_from).
%set(para_into).
set(auto).
clear(print_kept). % this will print out ALL derived and kept stuff
%formula_list(sos). % use list(sos) if not formula syntax
formulas(sos).
on(b,table,s0).
on(a,table,s0).
on(c,table,s0).
empty(s0).
all x hasspace(table,x).
-on(b,a,s0).
-on(a,b,s0).
-on(c,b,s0).
-on(c,a,s0).
-on(a,c,s0).
-on(b,c,s0).
all x all y -on(table,x,y).
block(a).
block(b).
block(c).
-block(table).
% being clear: closed world
all z ((-on(b,a,z) & -on(c,a,z)) -> clear(a,z)).
all z ((-on(a,b,z) & -on(c,b,z)) -> clear(b,z)).
all z ((-on(a,c,z) & -on(b,c,z)) -> clear(c,z)).
% general world rules
all x all y (clear(x,y) -> hasspace(x,y)).
all x all y all z
((on(x,y,z) & block(y))
->
-on(x,table,z)).
all x all z
( -(exists y on(y,x,z))
->
clear(x,z)).
% closed world
%all x (x=a | x=b | x=c | x=table).
%a!=b.
%a!=c.
%a!=table.
%b!=c.
%b!=table.
%c!=table.
all x (sameas(x,a) | sameas(x,b) | sameas(x,c) | sameas(x,table)).
-sameas(a,b).
-sameas(a,c).
-sameas(a,table).
-sameas(b,c).
-sameas(b,table).
-sameas(c,table).
all x sameas(x,x).
all x all y (sameas(x,y) -> sameas(y,x)).
%all x all y all z (sameas(x,y) & sameas(y,z) -> sameas(x,z)).
% actions
all x all y all z
((holds(x,z) &
hasspace(y,z) &
-sameas(x,y) )
->
(on(x,y,puton(x,y,z)) &
-clear(y,puton(x,y,z)) &
clear(x,puton(x,y,z)) &
hasspace(x,puton(x,y,z)) &
empty(puton(x,y,z))) ).
all x all y all z
((on(x,y,z) &
empty(z) &
clear(x,z))
->
(-on(x,y,lift(x,z)) &
clear(y,lift(x,z)) &
hasspace(y,lift(x,z)) &
holds(x,lift(x,z))) ).
% frame axioms
all x all y all z
(-on(x,y,z)
->
-on(x,y,lift(x,z)) ).
all x all y all z all u
((on(x,y,z) & -sameas(u,x))
->
on(x,y,lift(u,z)) ).
all x all y all z
((clear(x,z) & -sameas(x,y))
->
clear(x,lift(y,z)) ).
all x all y all z
((-clear(x,z) & -on(y,x))
->
-clear(x,lift(y,z)) ).
%
all x all y all z all u
(-on(x,y,z)
->
-on(x,y,puton(x,z)) ).
all x all y all z all u
((on(x,y,z) & -sameas(u,x))
->
on(x,y,lift(u,z)) ).
all x all y all z all u
((clear(x,z) & -sameas(x,y))
->
clear(x,puton(u,y,z)) ).
all x all y all z all u
((-clear(x,z) & -sameas(u,x))
->
-clear(x,puton(u,y,z)) ).
% queries
all z ((on(c,a,z) & on(b,c,z)) -> $answer(z)).
%all z (on(b,c,z) -> $answer(z)).
%all z (on(c,a,z) -> $answer(z)).
%all z (clear(a,z) -> $answer(z)).
end_of_list.