<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="et">
	<id>http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=Blocks_world_axiom%2Fquery_examples_from_lecture</id>
	<title>Blocks world axiom/query examples from lecture - Redigeerimiste ajalugu</title>
	<link rel="self" type="application/atom+xml" href="http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=Blocks_world_axiom%2Fquery_examples_from_lecture"/>
	<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Blocks_world_axiom/query_examples_from_lecture&amp;action=history"/>
	<updated>2026-11-08T13:49:14Z</updated>
	<subtitle>Selle lehekülje redigeerimiste ajalugu</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Blocks_world_axiom/query_examples_from_lecture&amp;diff=8296&amp;oldid=prev</id>
		<title>Tammet – 21. mai 2009, kell 22:46</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Blocks_world_axiom/query_examples_from_lecture&amp;diff=8296&amp;oldid=prev"/>
		<updated>2009-05-21T22:46:05Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Uus lehekülg&lt;/b&gt;&lt;/p&gt;&lt;div&gt;First, a simple version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
%set(auto).&lt;br /&gt;
set(factor).&lt;br /&gt;
set(binary_res).&lt;br /&gt;
&lt;br /&gt;
%clear(print_kept).&lt;br /&gt;
&lt;br /&gt;
set(prolog_style_variables).&lt;br /&gt;
&lt;br /&gt;
list(sos).&lt;br /&gt;
%formulas(sos).&lt;br /&gt;
&lt;br /&gt;
% ----- initial situation ------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
holds(on(a,table),s0).&lt;br /&gt;
&lt;br /&gt;
holds(on(b,table),s0).&lt;br /&gt;
&lt;br /&gt;
holds(on(c,d),s0).&lt;br /&gt;
&lt;br /&gt;
holds(on(d,table),s0).&lt;br /&gt;
&lt;br /&gt;
holds(clear(a),s0).&lt;br /&gt;
&lt;br /&gt;
holds(clear(b),s0).&lt;br /&gt;
&lt;br /&gt;
holds(clear(c),s0).&lt;br /&gt;
&lt;br /&gt;
holds(empty,s0).&lt;br /&gt;
&lt;br /&gt;
holds(clear(table),State).&lt;br /&gt;
&lt;br /&gt;
% ---- difference of objects -----&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
differ(X,Y)&lt;br /&gt;
    | -differ(Y,X).&lt;br /&gt;
&lt;br /&gt;
differ(a,b).&lt;br /&gt;
&lt;br /&gt;
differ(a,c).&lt;br /&gt;
&lt;br /&gt;
differ(a,d).&lt;br /&gt;
&lt;br /&gt;
differ(a,table).&lt;br /&gt;
&lt;br /&gt;
differ(b,c).&lt;br /&gt;
&lt;br /&gt;
differ(b,d).&lt;br /&gt;
&lt;br /&gt;
differ(b,table).&lt;br /&gt;
&lt;br /&gt;
differ(c,d).&lt;br /&gt;
&lt;br /&gt;
differ(c,table).&lt;br /&gt;
&lt;br /&gt;
differ(d,table).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% ---- rules -----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%holds(and(X,Y),State) &lt;br /&gt;
%    | -holds(X,State)&lt;br /&gt;
%    | -holds(Y,State).&lt;br /&gt;
&lt;br /&gt;
% pickup rules&lt;br /&gt;
&lt;br /&gt;
holds(holding(X),do(pickup(X),State))&lt;br /&gt;
    | -holds(empty,State)&lt;br /&gt;
    | -holds(clear(X),State)&lt;br /&gt;
    | -differ(X,table).&lt;br /&gt;
&lt;br /&gt;
holds(clear(Y),do(pickup(X),State))&lt;br /&gt;
    | -holds(on(X,Y),State)&lt;br /&gt;
    | -holds(clear(X),State)&lt;br /&gt;
    | -holds(empty,State).&lt;br /&gt;
&lt;br /&gt;
% frame axioms for pickup&lt;br /&gt;
&lt;br /&gt;
holds(on(X,Y),do(pickup(Z),State))&lt;br /&gt;
    | -holds(on(X,Y),State)&lt;br /&gt;
    | -differ(X,Z).&lt;br /&gt;
&lt;br /&gt;
holds(clear(X),do(pickup(Z),State))&lt;br /&gt;
    | -holds(clear(X),State)&lt;br /&gt;
    | -differ(X,Z).&lt;br /&gt;
&lt;br /&gt;
% putdown rules&lt;br /&gt;
&lt;br /&gt;
holds(empty,do(putdown(X,Y),State))&lt;br /&gt;
    | -holds(holding(X),State)&lt;br /&gt;
    | -holds(clear(Y),State).&lt;br /&gt;
&lt;br /&gt;
holds(on(X,Y),do(putdown(X,Y),State))&lt;br /&gt;
    | -holds(holding(X),State)&lt;br /&gt;
    | -holds(clear(Y),State).&lt;br /&gt;
&lt;br /&gt;
holds(clear(X),do(putdown(X,Y),State))&lt;br /&gt;
    | -holds(holding(X),State)&lt;br /&gt;
    | -holds(clear(Y),State).&lt;br /&gt;
&lt;br /&gt;
% frame axioms for putdown&lt;br /&gt;
&lt;br /&gt;
holds(on(X,Y),do(putdown(Z,W),State))&lt;br /&gt;
    | -holds(on(X,Y),State).    &lt;br /&gt;
&lt;br /&gt;
holds(clear(Z),do(putdown(X,Y),State))&lt;br /&gt;
    | -holds(clear(Z),State)&lt;br /&gt;
    | -differ(Z,Y).&lt;br /&gt;
&lt;br /&gt;
% ----- query -------&lt;br /&gt;
&lt;br /&gt;
end_of_list.&lt;br /&gt;
&lt;br /&gt;
list(usable).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-holds(on(b,a),State) | -holds(on(c,b),State).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%-holds(and(on(c,b),on(b,a)),State).&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end_of_list.    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, a lot more complex version (not necessarily better!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% this is the way comments start&lt;br /&gt;
%set(hyper_res).  % another alternative is set(binary_res)&lt;br /&gt;
%set(factor).   % probably comes automatically&lt;br /&gt;
%set(para_from).&lt;br /&gt;
%set(para_into).&lt;br /&gt;
set(auto).&lt;br /&gt;
clear(print_kept).  % this will print out ALL derived and kept stuff&lt;br /&gt;
&lt;br /&gt;
%formula_list(sos).  % use list(sos) if not formula syntax&lt;br /&gt;
formulas(sos).&lt;br /&gt;
&lt;br /&gt;
on(b,table,s0).&lt;br /&gt;
on(a,table,s0).&lt;br /&gt;
on(c,table,s0).&lt;br /&gt;
empty(s0).&lt;br /&gt;
all x hasspace(table,x).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-on(b,a,s0).&lt;br /&gt;
-on(a,b,s0).&lt;br /&gt;
-on(c,b,s0).&lt;br /&gt;
-on(c,a,s0).&lt;br /&gt;
-on(a,c,s0).&lt;br /&gt;
-on(b,c,s0).&lt;br /&gt;
all x all y -on(table,x,y).&lt;br /&gt;
&lt;br /&gt;
block(a).&lt;br /&gt;
block(b).&lt;br /&gt;
block(c).&lt;br /&gt;
-block(table).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% being clear: closed world&lt;br /&gt;
&lt;br /&gt;
all z ((-on(b,a,z) &amp;amp; -on(c,a,z))  -&amp;gt;  clear(a,z)).&lt;br /&gt;
all z ((-on(a,b,z) &amp;amp; -on(c,b,z))  -&amp;gt;  clear(b,z)).    &lt;br /&gt;
all z ((-on(a,c,z) &amp;amp; -on(b,c,z))  -&amp;gt;  clear(c,z)).&lt;br /&gt;
    &lt;br /&gt;
% general world rules&lt;br /&gt;
&lt;br /&gt;
all x all y (clear(x,y) -&amp;gt; hasspace(x,y)).&lt;br /&gt;
&lt;br /&gt;
all x all y all z &lt;br /&gt;
   ((on(x,y,z) &amp;amp; block(y))&lt;br /&gt;
     -&amp;gt; &lt;br /&gt;
     -on(x,table,z)).&lt;br /&gt;
          &lt;br /&gt;
all x all z &lt;br /&gt;
   ( -(exists y on(y,x,z))&lt;br /&gt;
     -&amp;gt; &lt;br /&gt;
     clear(x,z)).       &lt;br /&gt;
&lt;br /&gt;
% closed world&lt;br /&gt;
&lt;br /&gt;
%all x (x=a | x=b | x=c | x=table).&lt;br /&gt;
%a!=b.&lt;br /&gt;
%a!=c.&lt;br /&gt;
%a!=table.&lt;br /&gt;
%b!=c.&lt;br /&gt;
%b!=table.&lt;br /&gt;
%c!=table.&lt;br /&gt;
&lt;br /&gt;
all x (sameas(x,a) | sameas(x,b) | sameas(x,c) | sameas(x,table)).&lt;br /&gt;
-sameas(a,b).&lt;br /&gt;
-sameas(a,c).&lt;br /&gt;
-sameas(a,table).&lt;br /&gt;
-sameas(b,c).&lt;br /&gt;
-sameas(b,table).&lt;br /&gt;
-sameas(c,table).&lt;br /&gt;
&lt;br /&gt;
all x sameas(x,x).&lt;br /&gt;
all x all y (sameas(x,y) -&amp;gt; sameas(y,x)).&lt;br /&gt;
%all x all y all z (sameas(x,y) &amp;amp; sameas(y,z) -&amp;gt; sameas(x,z)).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% actions&lt;br /&gt;
&lt;br /&gt;
all x all y all z &lt;br /&gt;
   ((holds(x,z) &amp;amp;&lt;br /&gt;
     hasspace(y,z) &amp;amp;&lt;br /&gt;
     -sameas(x,y) )&lt;br /&gt;
     -&amp;gt; &lt;br /&gt;
    (on(x,y,puton(x,y,z)) &amp;amp;        &lt;br /&gt;
     -clear(y,puton(x,y,z)) &amp;amp;           &lt;br /&gt;
     clear(x,puton(x,y,z)) &amp;amp;               &lt;br /&gt;
     hasspace(x,puton(x,y,z)) &amp;amp;&lt;br /&gt;
     empty(puton(x,y,z))) ).        &lt;br /&gt;
      &lt;br /&gt;
    &lt;br /&gt;
all x all y all z &lt;br /&gt;
   ((on(x,y,z) &amp;amp;&lt;br /&gt;
     empty(z) &amp;amp;&lt;br /&gt;
     clear(x,z))&lt;br /&gt;
     -&amp;gt; &lt;br /&gt;
    (-on(x,y,lift(x,z)) &amp;amp; &lt;br /&gt;
     clear(y,lift(x,z)) &amp;amp;&lt;br /&gt;
     hasspace(y,lift(x,z)) &amp;amp;&lt;br /&gt;
     holds(x,lift(x,z))) ).&lt;br /&gt;
     &lt;br /&gt;
&lt;br /&gt;
% frame axioms&lt;br /&gt;
&lt;br /&gt;
all x all y all z &lt;br /&gt;
   (-on(x,y,z) &lt;br /&gt;
     -&amp;gt; &lt;br /&gt;
    -on(x,y,lift(x,z)) ).&lt;br /&gt;
    &lt;br /&gt;
all x all y all z all u &lt;br /&gt;
   ((on(x,y,z) &amp;amp; -sameas(u,x))&lt;br /&gt;
     -&amp;gt; &lt;br /&gt;
    on(x,y,lift(u,z)) ).    &lt;br /&gt;
    &lt;br /&gt;
all x all y all z &lt;br /&gt;
   ((clear(x,z) &amp;amp; -sameas(x,y))  &lt;br /&gt;
     -&amp;gt; &lt;br /&gt;
    clear(x,lift(y,z)) ).     &lt;br /&gt;
&lt;br /&gt;
all x all y all z &lt;br /&gt;
   ((-clear(x,z) &amp;amp; -on(y,x))&lt;br /&gt;
     -&amp;gt; &lt;br /&gt;
    -clear(x,lift(y,z)) ).&lt;br /&gt;
&lt;br /&gt;
% &lt;br /&gt;
&lt;br /&gt;
all x all y all z all u&lt;br /&gt;
   (-on(x,y,z) &lt;br /&gt;
     -&amp;gt; &lt;br /&gt;
    -on(x,y,puton(x,z)) ).&lt;br /&gt;
    &lt;br /&gt;
all x all y all z all u &lt;br /&gt;
   ((on(x,y,z) &amp;amp; -sameas(u,x))&lt;br /&gt;
     -&amp;gt; &lt;br /&gt;
    on(x,y,lift(u,z)) ).    &lt;br /&gt;
    &lt;br /&gt;
all x all y all z all u&lt;br /&gt;
   ((clear(x,z) &amp;amp; -sameas(x,y))  &lt;br /&gt;
     -&amp;gt; &lt;br /&gt;
    clear(x,puton(u,y,z)) ).     &lt;br /&gt;
&lt;br /&gt;
all x all y all z all u&lt;br /&gt;
   ((-clear(x,z) &amp;amp; -sameas(u,x))&lt;br /&gt;
     -&amp;gt; &lt;br /&gt;
    -clear(x,puton(u,y,z)) ).&lt;br /&gt;
&lt;br /&gt;
% queries&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
all z ((on(c,a,z) &amp;amp; on(b,c,z))  -&amp;gt; $answer(z)).&lt;br /&gt;
%all z (on(b,c,z)   -&amp;gt; $answer(z)).&lt;br /&gt;
%all z (on(c,a,z)   -&amp;gt; $answer(z)).&lt;br /&gt;
%all z (clear(a,z) -&amp;gt; $answer(z)).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end_of_list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
</feed>