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.