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(c),on(c,a),on(a,mesa),clear(b),on(b,mesa)]).
 
objectivos([on(a,b),on(b,c)]).
 
 
/* Um plano para este problema:
| ?- plano(L).
L = [putTable(c),putOn(b,c),putOn(a,b)]
yes
| ?-
 
A execução deste plano é:
 
Initial Situation: [clear(c),on(c,a),on(a,mesa),clear(b),on(b,mesa)]
Action performed: putTable(c)
Situation: [clear(a),on(c,mesa),clear(c),on(a,mesa),clear(b),on(b,mesa)]
Action performed: putOn(b,c)
Situation: [clear(mesa),on(b,c),clear(a),on(c,mesa),on(a,mesa),clear(b)]
Action performed: putOn(a,b)
Situation: [clear(mesa),on(a,b),clear(mesa),on(b,c),clear(a),on(c,mesa)]
Goal [on(a,b),on(b,c)] satisfied
 
*/