accao(nome : putTable(X),
 condicoes : [on(X,Z),clear(X)], 
   efeitos : [clear(Z),on(X,mesa),-on(X,Z)], 
restricoes : [(X\==Z)]).
 
accao(nome : putOn(X,Y),
 condicoes : [on(X,Z),clear(X),clear(Y)], 
   efeitos : [clear(Z),on(X,Y),-on(X,Z),-clear(Y)], 
restricoes : [(Y\==mesa),(X\==Y),(X\==Z),(Y\==Z)]).
 
 
inicial([clear(b),on(b,a),on(a,mesa),clear(d),on(d,c),on(c,mesa)]).
 
objectivos([on(a,c),on(b,d)]).
 
 
/* Alguns dos planos para este problema:
 
| ?- plano(L).
L = [putTable(d),putTable(b),putOn(b,d),putOn(a,c)];
L = [putTable(d),putTable(b),putOn(a,c),putOn(b,d)]
yes
| ?-
 
 
A execução do primeiro plano é:
 
Initial Situation: [clear(b),on(b,a),on(a,mesa),clear(d),on(d,c),on(c,mesa)]
Action performed: putTable(d)
Situation: [clear(c),on(d,mesa),clear(b),on(b,a),on(a,mesa),clear(d),on(c,mesa)]
Action performed: putTable(b)
Situation: [clear(a),on(b,mesa),clear(c),on(d,mesa),clear(b),on(a,mesa),clear(d),on(c,mesa)]
Action performed: putOn(b,d)
Situation: [clear(mesa),on(b,d),clear(a),clear(c),on(d,mesa),clear(b),on(a,mesa),on(c,mesa)]
Action performed: putOn(a,c)
Situation: [clear(mesa),on(a,c),clear(mesa),on(b,d),clear(a),on(d,mesa),clear(b),on(c,mesa)]
Goal [on(a,c),on(b,d)] satisfied
 
*/