Acciones

Relación 1

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

% Ejercicio 1. Calcular los conjuntos de respuesta del siguiente
% programa P y responder a las consultas siguientes: ¿p?, ¿q? 

p, q, r.
¬p :- not s.


% Solución:
% gemtermej
% La solución es tatata

% jescammor1
% S_1={q, -p} Si escogemos q entre (p, q, r) , tenemos que s no pertenece al conjunto y por la segunda regla debemos introducir -p.
% S_2={r, -p} Si escogemos r entre (p, q, r) , tenemos que s no pertenece al conjunto y por la segunda regla debemos introducir -p.
% S_3={p, ...} Escoger p nos lleva a contradicción con la segunda regla. Como S_1 y S_2 eran minimales, ya hemos estudiado todos los casos posibles.
% Consulta p: No, puesto que -p aparece en todos los conjuntos de respuesta (S_1, S_2).
% Consulta q: Desconodido, puesto que S_2 no lo contiene ni a el, ni a su complementario.

%xinwu2
%S_1={p, s},Si escogemos p, después tenemos que escogemos s,como consulta S={p, s}.
%S_2={q, -p},por condición 1, tenemos que elegir q o r, y después para satisfacer condición 2, hemos satisfacido el cuerpo, tenemos que satisfacer la cabeza con -p.
%S_3={r, -p},es igual con S_1.
%S_4={q, s},Si escogemos q o r para la regla 1, para 2, también podemos elegir S para satisfacer regla 2.
%S_5={r, s},es igual con S_3.
%consulta p:no es la consulta,no puede satisfacer S_2 y S_3.
%consulta q:desconocido,

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Ejercicio 2: Calcular los conjuntos de respuesta del siguiente
% programa:

p :- not q.
q :- not p.
r :- not s.
s :- not r.
-s :- q.

% Solución:
% jescammor1
% A priori las reglas 1 y 2 no nos restrigen en p y q. 
% Supongamos que tenemos p en nuestro conjunto de respuesta, entonces q no puede estar en el conjunto. Esto elimina la acción de la quinta regla. Por las reglas 3 y 4 volvemos a no estar restringidos entre elegir r o s. Así pues, obtenemos dos conjuntos S_1={p, s} y S_2={p, r}.
% Si en lugar de p escogemos q, la cosa cambia ligeramente. Por la quinta regla nos vemos obligados a introducir -s en el conjunto de respuesta. Esto hace que s no esté en dicho conjunto, para que sea consistente, por lo que la regla 3 nos obliga a introducir tambien a r. El conjunto quedaria como S_3={q, -s, r}.

%xinwu2
%S_1={p, r} desde el última regla hasta arriba,podemos satisfacer la regla 5 sin elegir q,y sobre regla 1,tenemos que escoger p, y regla 2 ya satisfacida,sobre regla 3 y 4, podemos elegir la cabeza para satisfacer.
%S_2={p, s}, la misma razón como S_3.
%Si escogemos -s(la cabeza), elegimos r para regla 4 y también satisface regla 3, y para regla primera y segunda, podemos elegir la cabeza también para satisfacer los dos,{-s, r, q},tampoco {-s, r, p} no satisface principal minimal.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Ejercicio 3: Dado el programa /P/ y el conjunto S = {p(c)}, obtener el
%  programa /P^S/ y decidir si S es un conjunto de respuesta de /P/.

p(a) :- not p(b).
p(b) :- not p(c).
p(c) :- not p(a).

% Solución:
% jescammor1
% Si obligamos a que se cumple S visto como regla "p(c)." la regla 2 deja de ser útil. La primera regla nos indica que hemos de añadir p(a) a nuestro conjunto de respuesta y anularía a su vez la tercera regla. Puesto que este conjunto de respuesta {p(c), p(a)} contiene al conjunto S, S no puede ser conjunto de respuesta porque dejaria de ser minimal.

%xinwu2
%si añadimos S={p(c)}, tenemos que elegir p(c) para satisfacerlo, después sadisface las reglas 2 y 3,final podemos elegir p(a) o -p(b) para la regla 1,obtenemos S_1={p(a),p(c)} o S_2={p(c), -p(b)}
%Y S={p(c)} no puede satisface la regla 1, no es un conjunto de respuesta. 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Ejercicio 4: Calcular los conjuntos de respuesta del siguiente
%   programa /P/ y responder a las consultas siguientes: ¿s(a)?, ¿r(a)?,
%   ¿s(b)?, ¿q(b)?


-s(a).
p(X) :- not q(X), -s(X).
q(X) :- not p(X).
r(X) :- p(X).
r(X) :- q(X).

% Solución:
% jescammor1
% -s(a) lo añadimos a todos los posibles conjuntos de respuesta.
% Si no añadimos q(a), aplica la regla 2 y nos vemos obligados a introducir p(a).
%% La regla 3 ya no influye, no así la 4, que nos añade r(a).
%% S_1={-s(a), p(a), r(a)}.
% Si pasamos directamente a la regla 3, podemos añadir q(a), que anula la regla 2. 
%% La cuarta regla no aplica, puesto que seguimos sin saber nada de p(a).
%% La última regla si nos añadiría un r(a).
%% S_2={-s(a), q(a), r(a)}
% Esto sería sin contar que tenemos un segundo literal b. Este estudio lo podemos hacer reparado eliminando la primera regla.
%% La regla 2 no aplica para b porque no sabemos nada de -s(b). 
%% La regla 3 si es útil, porque de momento no sabemos nada de b o en este caso p(b). Así que debemos añadir q(b) a todos nuestros conjuntos de respuesta.
%% Como vimos antes, si tenemos q(b) también tendremos r(b).
%% En conclusión los conjuntos de respuesta finales son S'_1={-s(a), p(a), r(a), q(b), r(b)} y S'_2={-s(a), q(a), r(a), q(b), r(b)}.
% Consulta s(a): No, porque aparece en ambos conjuntos negado
% Consulta r(a): Si, porque aparece en ambos conjuntos
% Consulta s(b): Desconocido, porque no aparece en ninguno
% Consulta q(b): Si, porque aparece en ambos

%xinwu2
%todos los conjuntos incluen -s(a)
%programa p puede expresar como 
%-s(a).
%p(a) ;- not q(a), -s(a).
%q(a) :- not p(a).
%r(a) :- p(a).
%r(a) :- q(a).
%final tenemos la respuesta S_1={-s(a), p(a), r(a)},tenemos que escoger la cabeza de la regla 2, porque he escogido s(a), y con p(a),r(a) la cabeza tiene que estar en el conjunto, y también ha satisfacido la regla 4. 
%s(a), no es la consulta.
%r(a), si, es %la consulta.
%si añadimos b, el programa cambia como
%-s(a).
%p(b) ;- not q(b), -s(b).
%q(b) :- not p(b).
%r(b) :- p(b).
%r(b) :- q(b).
%tenemos que elegir -s(a),podemos elegir p(b) para satisfacer la cabeza de regla 2, con r(b) para la regla 4 y 5.
%S_1={s(a), q(b), r(b)},o S_2={s(a), p(b), r(b)},S_3={-s(a), p(b), r(b)}
%s(b),no es la consulta.
%q(b),desconocido, q(b) consiste en S_1,pero sin S_2 o S_3.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Ejercicio 5:Calcular los conjuntos de respuesta del siguiente
%   programa /P/ y responder a las consultas siguientes: ¿q(a)?, ¿r(a)?,
%   ¿q(b)?, ¿r(b)?

p(a), -p(b).
q(X) :- -p(X).
-q(X) :- not q(X).
r(X) :- not p(X).

% Solución:

%xinwu2
%cambiamos x en a o b, tenemos 8 programas.
%p(a), -p(b).
%q(a) :- -p(a). o q(b) :- -p(b).
%-q(a) :- not q(a). o -q(b) :- not q(b).
%r(a) :- not p(a). o r(b) :- not p(b).
%al principio, tenemos que elegir p(a) o -p(b)
%con p(a),satisface la regla 2, y podemos elegir q(a) o -q(a) para satisfacer regla3, y p(a) puede satisfacer r(a) :- not p(a). por eso, tenemos S_1={p(a), q(a)(o q(b))}, S_2={p(a), -q(a)(o -q(b))} y si añadimos otro elemento, no satisface el principal minimal.
%con -p(b), puede satisface esta regla2 q(a) :- -p(a),lo mismo con arriba,y pero tenemos que elegir r(b) para regla 4, o añade r(a) o más.
%finalmente, tenemos S_1={p(a), q(a)(o q(b))}, S_2={p(a), -q(a)(o -q(b))}
%q(a) y q(b) son las consultas, y r(a) y r(b) no son las consultas.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Ejercicio 6: Calcular los conjuntos de respuesta del siguiente
%   programa /P/ y responder a las consultas siguientes: ¿p(b)?,¿q(b)?, ¿r(b)?


p(X),q(X) :- not r(X).
-p(X) :- h(X), not r(X).
h(a).
h(b).
r(a).

% Solución

%xinwu2
%tenemos 4 programas total,
%p(a),q(a) :- not r(a). 
%-p(a) :- h(a), not r(a). O -p(b) :- h(b), not r(b).
%h(a).
%h(b).
%r(a).
%En cualquiere caso, tenemos que tener S={h(a), h(b), r(a)}, S puede satisfacer la regla 1, pero tiene que añadir -p(a) para la regla 2, o añadir -p(b). {h(a), h(b), r(a), -h(a)} no satisface consiente,Por lo tanto, S_1={h(a), h(b), r(a),-p(a)}, S_2={h(a), h(b), r(a), -p(b)}.
%En otro caso
%p(b),q(b) :- not r(b). 
%-p(a) :- h(a), not r(a). O -p(b) :- h(b), not r(b).
%h(a).
%h(b).
%r(a).
%En cualquiere caso, tenemos que tener S={h(a), h(b), r(a)}, y añadir otros elementos no satisfacen consiente o no satisface el principal minimal.
%S_1={h(a), h(b), r(a),-p(a)}, S_2={h(a), h(b), r(a), -p(b)}
%r(b), p(b) o q(b) no son las consultas.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Ejercicio 7: Consideremos la siguiente situación: "Si Juan no compra
%   juguetes para sus hijos, los niños de Juan no recibirán juguetes por Reyes. 
%   Si los hijos de Juan no escriben sus cartas a los Reyes, Juan
%   no les comprará juguetes. Los niños de Juan reciben juguetes por
%   Reyes". Supongamos que la interpretación de esta historia implica que
%   los hijos de Jim escribieron las cartas a los Reyes. 
%   + Modelizar esta historia como un programa ASP y calcular los
%     conjuntos de respuesta, usando la disyunción para representar la ley
%     del tercio excluso.
%   + Modelizar esta historia en un programa ASP y calcular los conjuntos
%     de respuesta esta vez haciendo explícito el contrapositivo para cada
%     afirmación.

% Solución:

%xinwu2
%Sea a = Juan compra juguetes para sus hijos, b = los niños de Juan recibirán juguetes por Reyes, c = los hijos de Juan escriben sus cartas a los Reyes 
%por eso, podemos simplificar este frase a la programa p abajo:
%¬b :- not a
%b :- not c, not a
%si elegimos a, puedo elegir b para la regla 2. O puedo elegir c para la regla 2. 
%las resultas son: S_1={p(a), p(b)} y S_2={p(a), p(c)}.