accao(nome : go(X,Y),
 condicoes : [at(X),road(X,Y)], 
   efeitos : [at(Y),-at(X)], 
restricoes : [(X\==Y)]).
 
inicial([at(lisboa),road(lisboa,evora),road(evora,faro),
         road(lisboa,coimbra),road(coimbra,porto),road(evora,coimbra)]).
 
objectivos([at(porto)]).
 
 
/* Um plano:
 
| ?- plano(L).
L = [go(lisboa,coimbra),go(coimbra,porto)]
yes
| ?-
 
 
E tem a seguinte execução:
 
Initial Situation: [at(lisboa),road(lisboa,evora),road(evora,faro),
                    road(lisboa,coimbra),road(coimbra,porto),
                    road(evora,coimbra)]
Action performed: go(lisboa,coimbra)
Situation: [at(coimbra),road(lisboa,evora),road(evora,faro),
            road(lisboa,coimbra),road(coimbra,porto),
            road(evora,coimbra)]
Action performed: go(coimbra,porto)
Situation: [at(porto),road(lisboa,evora),road(evora,faro),
            road(lisboa,coimbra),road(coimbra,porto),
            road(evora,coimbra)]
Goal [at(porto)] satisfied
*/