Acciones

Ejercicio P1

De Lógica computacional y teoría de modelos (2019-20)

%% Ejercicio de planificación: los siguientes predicados describen un
%% "mundo" que representa la acciones de una persona que compra
%% alimentos en supermercados.

%% Consideremos el problema de planificación siguiente:
%% Contexto:
%%   (*) Tiendas: Mercadona vende café y Carrefour vende azúcar.
%%   (*) Una persona está en una ubicación, que puede ser su casa o una tienda.
%%   (*) Las acciones posibles son: ir, comprar.
%%   (*) Estado inicial: está en su casa, sin café ni azúcar.
%%   (*) Objetivo: tener café, azúcar y estar en casa.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Solución (jescammor1) %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


#const n = 5.
paso(0..n).

%% ----------
%% Signatura:
%% ----------

% tienda(X): X es una tienda
% vende(X,Y): la tienda X vende el producto Y
% ubicación(X): X es una tienda o casa
% ir(X,Y): la persona va de X a Y 
% comprar(X): la persona compra X 
% posicion(X): la persona esta en la ubicación X (inercial)
% tiene(X): la persona tiene el producto X (inercial)

%% ----------
%% Estáticos:
%% ----------

tienda(mercadona; carrefour).

vende(mercadona,cafe).
vende(carrefour,azucar).

ubicacion(X):- tienda(X).
ubicacion(casa).

producto(cafe; azucar).


%% ----------
%% Fluyentes:
%% ----------

fluyente(inercia,posicion(X)) :- ubicacion(X).

fluyente(inercia,tiene(Z)) :- producto(Z).


%% ---------
%% Acciones:
%% ---------

accion(ir(X,Y)) :- ubicacion(X), ubicacion(Y),
					X!=Y.

accion(compra(X)) :- producto(X).

%% ------
%% Leyes:
%% ------

%% Ir de la ubicacion X a Y cambia la posicion:
cierto(posicion(Y),I+1) :- ocurre(ir(X,Y),I),
							cierto(posicion(X),I),
							I<n.

%% Actualizar la posicion si nos movemos:
-cierto(posicion(X),I+1) :- ocurre(ir(X,Y),I),
							I<n.

%% Comprar un producto en alguna tienda que lo tenga:
cierto(tiene(X),I+1) :- ocurre(compra(X),I),
						cierto(posicion(Y),I),
						vende(Y,X),
						I<n.


%%----------------------------------------
%% Codificación del sistema de descripción:
%%----------------------------------------

%% Hipótesis del mundo cerrado para fluyentes definidos:

-cierto(F,I) :- fluyente(definido,F), paso(I),
               not cierto(F,I).


%% Axioma de inercia para fluyentes inerciales:

cierto(F,I+1) :- fluyente(inercia,F),
                cierto(F,I),
                not -cierto(F,I+1),
                I < n.

-cierto(F,I+1) :- fluyente(inercia,F),
                 -cierto(F,I),
                 not cierto(F,I+1),
                 I < n.
                 
%% Hipótesis del mundo cerrado para acciones:

-ocurre(A,I) :- accion(A), paso(I),
                not ocurre(A,I).
     
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       
%% Módulo de planificación usando regla de elección:
  
exito :- objetivo(I),
           I <= n.
:- not exito.

1{ocurre(A,I): accion(A)}1 :- paso(I),
                               not objetivo(I),
                               I < n.  

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Estado inicial

cierto(posicion(casa),0).
-cierto(tiene(azucar),0).
-cierto(tiene(cafe),0).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Objetivo:

objetivo(I) :- cierto(posicion(casa),I),
				cierto(tiene(azucar),I),
				cierto(tiene(cafe),I).



%% Presentación:
#show ocurre/2.