Sol 8
De Lógica matemática y fundamentos (2018-19)
Revisión del 12:52 9 abr 2019 de Mjoseh (discusión | contribuciones)
chapter {* R8: Argumentación en lógica de primer orden *}
theory R8_sol
imports Main
begin
text {*
---------------------------------------------------------------------
El objetivo de esta relación es formalizar en lógica de primer orden
argumentos expresados en lenguaje natural.
Antes de escribir la soluciones, comprobar con APLI2 la corrección de
la formalización.
------------------------------------------------------------------ *}
text {* ---------------------------------------------------------------
Ejercicio 1. Formalizar el siguiente argumento
Hay estudiantes inteligentes y hay estudiantes trabajadores. Por
tanto, hay estudiantes inteligentes y trabajadores.
Usar I(x) para x es inteligente
T(x) para x es trabajador
------------------------------------------------------------------ *}
-- "La refutación automática es"
lemma ejercicio_1:
assumes "(∃x. I(x)) ∧ (∃x. T(x))"
shows "∃x. I(x) ∧ T(x)"
quickcheck
oops
text {*
El argumento es incorrecto como muestra el siguiente contraejemplo:
I = {a1}
T = {a2}
*}
text {* ---------------------------------------------------------------
Ejercicio 2. Formalizar el siguiente argumento
Todos los participantes son vencedores. Hay como máximo un
vencedor. Hay como máximo un participante. Por lo tanto, hay
exactamente un participante.
Usar P(x) para x es un participante
V(x) para x es un vencedor
------------------------------------------------------------------ *}
-- "La refutación automática es"
lemma ejercicio_2:
assumes "∀x. P(x) ⟶ V(x)"
"∀x y. V(x) ∧ V(y) ⟶ x=y"
"∀x y. P(x) ∧ P(y) ⟶ x=y"
shows "∃x. P(x) ∧ (∀y. P(y) ⟶ x=y)"
quickcheck
oops
text {*
El argumento es incorrecto como muestra el siguiente contraejemplo:
V = {}
P = {}
*}
text {* ---------------------------------------------------------------
Ejercicio 3. Formalizar el siguiente argumento
Ningún aristócrata debe ser condenado a galeras a menos que sus
crímenes sean vergonzosos y lleve una vida licenciosa. En la ciudad
hay aristócratas que han cometido crímenes vergonzosos aunque su
forma de vida no sea licenciosa. Por tanto, hay algún aristócrata
que no está condenado a galeras.
Usar A(x) para x es aristócrata
G(x) para x está condenado a galeras
L(x) para x lleva una vida licenciosa
V(x) para x ha cometido crímenes vergonzoso
------------------------------------------------------------------ *}
-- "La demostración automática es"
lemma ejercicio_3_a:
assumes "∀x. A(x) ∧ G(x) ⟶ L(x) ∧ V(x)"
"∃x. A(x) ∧ V(x) ∧ ¬L(x)"
shows "∃x. A(x) ∧ ¬G(x)"
using assms
by metis
lemma ejercicio_3_d:
assumes "∀x. A(x) ∧ G(x) ⟶ L(x) ∧ V(x)"
"∃x. A(x) ∧ V(x) ∧ ¬L(x)"
shows "∃x. A(x) ∧ ¬G(x)"
proof-
from assms(2) obtain a where 1:"A(a) ∧ V(a) ∧ ¬L(a)" ..
hence "A(a)" ..
have "¬G(a)"
proof
assume "G(a)"
with `A(a)` have 2: "A(a) ∧ G(a)" ..
have "A(a) ∧ G(a) ⟶ L(a) ∧ V(a)" using assms(1) ..
hence "L(a) ∧ V(a)" using 2 ..
hence "L(a)" ..
have "V(a) ∧ ¬L(a)" using 1 ..
hence "¬L(a)" ..
thus False using `L(a)`..
qed
with `A(a)` have "A(a) ∧ ¬G(a)" ..
thus "∃x. A(x) ∧ ¬G(x)" ..
qed
lemma ejercicio_3_e:
"⟦∀x. A(x) ∧ G(x) ⟶ L(x) ∧ V(x);
∃x. A(x) ∧ V(x) ∧ ¬L(x)⟧ ⟹ ∃x. A(x) ∧ ¬G(x)"
apply (erule exE)
apply (erule_tac x = x in allE)
apply (rule_tac x = x in exI)
apply (rule conjI)
apply (erule conjunct1)
apply (rule notI)
apply (drule mp)
apply (rule conjI)
apply (erule conjunct1, assumption)
apply (drule conjunct2)
apply (drule conjunct1)
apply (drule conjunct2)
apply (erule notE, assumption)
done
text {* ---------------------------------------------------------------
Ejercicio 4. Formalizar el siguiente argumento
Todos los robots obedecen a los amigos del programador jefe.
Alvaro es amigo del programador jefe, pero Benito no le
obedece. Por tanto, Benito no es un robot.
Usar R(x) para x es un robot
Ob(x,y) para x obedece a y
A(x) para x es amigo del programador jefe
b para Benito
a para Alvaro
------------------------------------------------------------------ *}
lemma ejercicio_4_a:
assumes "∀x y. R(x) ∧ A(y) ⟶ Ob(x,y)"
"A(a)"
"¬Ob(b,a)"
shows "¬R(b)"
using assms
by metis
lemma ejercicio_4_b:
assumes "∀x y. R(x) ∧ A(y) ⟶ Ob(x,y)"
"A(a)"
"¬Ob(b,a)"
shows "¬R(b)"
proof
assume "R(b)"
have "∀y. R(b) ∧ A(y) ⟶ Ob(b,y)" using assms(1) ..
hence 1: "R(b) ∧ A(a) ⟶ Ob(b,a)" ..
have "R(b) ∧ A(a)" using `R(b)` assms(2) ..
with 1 have "Ob(b,a)" ..
with assms(3) show False ..
qed
lemma ejercicio_4_c:
"⟦∀x y. R(x) ∧ A(y) ⟶ Ob(x,y);
A(a);¬Ob(b,a)⟧⟹ ¬R(b)"
apply (rule notI)
apply (erule_tac x = b in allE)
apply (erule notE)
apply (erule allE)
apply (erule mp)
apply (rule conjI, assumption+)
done
text {* ---------------------------------------------------------------
Ejercicio 5. Formalizar el siguiente argumento
Ningún socio del club está en deuda con el tesorero del club. Si
un socio del club no paga su cuota está en deuda con el tesorero
del club. Por tanto, si el tesorero del club es socio del club,
entonces paga su cuota.
Usar P(x) para x es socio del club
Q(x) para x paga su cuota
R(x) para x está en deuda con el tesorero
a para el tesorero del club
------------------------------------------------------------------ *}
lemma ejercicio_5_a:
assumes "¬(∃x. P(x) ∧ R(x))"
"∀x. P(x) ∧ ¬Q(x) ⟶ R(x)"
shows "P(a) ⟶ Q(a)"
using assms
by auto
lemma ejercicio_5_b:
assumes "¬(∃x. P(x) ∧ R(x))"
"∀x. P(x) ∧ ¬Q(x) ⟶ R(x)"
shows "P(a) ⟶ Q(a)"
proof
assume "P(a)"
show "Q(a)"
proof (rule ccontr)
assume "¬Q(a)"
with `P(a)` have 1: "P(a) ∧ ¬Q(a)" ..
have "P(a) ∧ ¬Q(a) ⟶ R(a)" using assms(2) ..
hence "R(a)" using 1 ..
with `P(a)` have "P(a) ∧ R(a)" ..
hence "∃x. P(x) ∧ R(x)" ..
with assms(1) show False ..
qed
qed
lemma ejercicio_5_c:
"⟦¬(∃x. P(x) ∧ R(x));
∀x. P(x) ∧ ¬Q(x) ⟶ R(x)⟧ ⟹ P(a) ⟶ Q(a)"
apply (rule impI)
apply (erule_tac x = a in allE)
apply (rule ccontr)
apply (erule notE)
apply (rule_tac x = a in exI)
apply (rule conjI, assumption)
apply (erule mp)
apply (rule conjI, assumption+)
done
text {* ---------------------------------------------------------------
Ejercicio 6. Formalizar el siguiente argumento
Los aficionados al fútbol aplauden a cualquier futbolista
extranjero. Juanito no aplaude a futbolistas extranjeros. Por
tanto, si hay algún futbolista extranjero nacionalizado español,
Juanito no es aficionado al fútbol.
Usar Af(x) para x es aficicionado al fútbol
Ap(x,y) para x aplaude a y
E(x) para x es un futbolista extranjero
N(x) para x es un futbolista nacionalizado español
j para Juanito
------------------------------------------------------------------ *}
-- "La demostración automática es"
lemma ejercicio_6_a:
assumes "∀x. Af(x) ⟶ (∀y. E(y) ⟶ Ap(x,y))"
"∀x. E(x) ⟶ ¬Ap(j,x)"
shows "(∃x. E(x) ∧ N(x)) ⟶ ¬Af(j)"
using assms
by metis
lemma ejercicio_6_d:
assumes "∀x. Af(x) ⟶ (∀y. E(y) ⟶ Ap(x,y))"
"∀x. E(x) ⟶ ¬Ap(j,x)"
shows "(∃x. E(x) ∧ N(x)) ⟶ ¬Af(j)"
proof
assume "∃x. E(x) ∧ N(x)"
then obtain a where "E(a) ∧ N(a)" ..
hence "E(a)" ..
have "E(a) ⟶ ¬Ap(j,a)" using assms(2) ..
hence "¬Ap(j,a)" using `E(a)` ..
show "¬Af(j)"
proof
assume "Af(j)"
have "Af(j) ⟶ (∀y. E(y) ⟶ Ap(j,y))" using assms(1) ..
hence "∀y. E(y) ⟶ Ap(j,y)" using `Af(j)` ..
hence "E(a) ⟶ Ap(j,a)" ..
hence "Ap(j,a)" using `E(a)` ..
with `¬Ap(j,a)` show False ..
qed
qed
lemma ejercicio_6_c:
"⟦∀x. Af(x) ⟶ (∀y. E(y) ⟶ Ap(x,y));
∀x. E(x) ⟶ ¬Ap(j,x)⟧ ⟹
(∃x. E(x) ∧ N(x)) ⟶ ¬Af(j)"
apply (rule impI)
apply (erule exE)
apply (erule_tac x = x in allE)
apply (erule_tac x = j in allE)
apply (rule notI)
apply (drule mp)
apply (erule conjunct1)
apply (drule mp, assumption)
apply (erule notE)
apply (drule conjunct1)
apply (erule_tac x = x in allE)
apply (erule mp, assumption)
done
text {* ---------------------------------------------------------------
Ejercicio 7. Formalizar el siguiente argumento
Todo aquel que entre en el país y no sea un VIP será cacheado por
un aduanero. Hay un contrabandista que entra en el país y que solo
podrá ser cacheado por contrabandistas. Ningún contrabandista es un
VIP. Por tanto, algún aduanero es contrabandista.
Usar A(x) para x es aduanero
Ca(x,y) para x cachea a y
Co(x) para x es contrabandista
E(x) para x entra en el pais
V(x) para x es un VIP
------------------------------------------------------------------ *}
-- "La demostración automática es"
lemma ejercicio_7_a:
assumes "∀x. E(x) ∧ ¬V(x) ⟶ (∃y. A(y) ∧ Ca(y,x))"
"∃x. Co(x) ∧ E(x) ∧ (∀y. Ca(y,x) ⟶ Co(y))"
"¬(∃x. Co(x) ∧ V(x))"
shows "∃x. A(x) ∧ Co(x)"
using assms
by metis
lemma ejercicio_7_d:
assumes "∀x. E(x) ∧ ¬V(x) ⟶ (∃y. A(y) ∧ Ca(y,x))"
"∃x. Co(x) ∧ E(x) ∧ (∀y. Ca(y,x) ⟶ Co(y))"
"¬(∃x. Co(x) ∧ V(x))"
shows "∃x. A(x) ∧ Co(x)"
proof-
from assms(2) obtain a where 1: "Co(a) ∧ E(a) ∧ (∀y. Ca(y,a) ⟶ Co(y))" ..
hence "Co(a)" ..
have 2:" E(a) ∧ (∀y. Ca(y,a) ⟶ Co(y))" using 1 ..
hence "E(a)" ..
have 3: "∀y. Ca(y,a) ⟶ Co(y)" using 2 ..
have "¬V(a) ∨ V(a)" ..
thus "∃x. A(x) ∧ Co(x)"
proof
assume "¬V(a)"
with `E(a)` have 4: "E(a) ∧ ¬V(a)" ..
have "E(a) ∧ ¬V(a) ⟶ (∃y. A(y) ∧ Ca(y,a))" using assms(1) ..
hence "∃y. A(y) ∧ Ca(y,a)" using 4 ..
then obtain b where "A(b) ∧ Ca(b,a)" ..
hence "A(b)" ..
have "Ca(b,a)" using `A(b) ∧ Ca(b,a)` ..
have "Ca(b,a) ⟶ Co(b)" using 3 ..
hence "Co(b)" using `Ca(b,a)`..
with `A(b)` have "A(b) ∧ Co(b)" ..
thus "∃x. A(x) ∧ Co(x)" ..
next
assume "V(a)"
with `Co(a) ` have "Co(a) ∧ V(a)" ..
hence "∃x. Co(x) ∧ V(x)" ..
with assms(3) show "∃x. A(x) ∧ Co(x)" ..
qed
qed
lemma ejercicio_7_c:
"⟦∀x. E(x) ∧ ¬V(x) ⟶ (∃y. A(y) ∧ Ca(y,x));
∃x. Co(x) ∧ E(x) ∧ (∀y. Ca(y,x) ⟶ Co(y));
¬(∃x. Co(x) ∧ V(x)) ⟧ ⟹ ∃x. A(x) ∧ Co(x)"
apply (erule exE)
apply (erule_tac x = x in allE)
apply (drule mp)
apply (rule conjI)
apply (drule conjunct2)
apply (drule conjunct1, assumption)
apply (rule notI)
apply (erule notE)
apply (drule conjunct1)
apply (rule_tac x = x in exI)
apply (rule conjI, assumption+)
apply (erule exE)
apply (rule_tac x = y in exI)
apply (rule conjI)
apply (erule conjunct1)+
apply (drule conjunct2)+
apply (erule_tac x = y in allE)
apply (drule mp, assumption+)
done
section {* Ejercicios con igualdad *}
text {* ---------------------------------------------------------------
Ejercicio 8. Formalizar el siguiente argumento
Rosa ama a Curro. Paco no simpatiza con Ana. Quien no simpatiza con
Ana ama a Rosa. Si una persona ama a otra, la segunda ama a la
primera. Hay como máximo una persona que ama a Rosa. Por tanto,
Paco es Curro.
Usar A(x,y) para x ama a y
S(x,y) para x simpatiza con y
a para Ana
c para Curro
p para Paco
r para Rosa
------------------------------------------------------------------ *}
lemma ejercicio_8_a:
assumes "A(r,c)"
"¬S(p,a)"
"∀x. ¬S(x,a) ⟶ A(x,r)"
"∀x y. A(x,y) ⟶ A(y,x)"
"∀x y. A(x,r) ∧ A(y,r) ⟶ x=y"
shows "p = c"
using assms
by auto
lemma ejercicio_8_b:
assumes "A(r,c)"
"¬S(p,a)"
"∀x. ¬S(x,a) ⟶ A(x,r)"
"∀x y. A(x,y) ⟶ A(y,x)"
"∀x y. A(x,r) ∧ A(y,r) ⟶ x=y"
shows "p = c"
proof-
have "∀y. A(r,y) ⟶ A(y,r)" using assms(4) ..
hence "A(r,c) ⟶ A(c,r)" ..
hence "A(c,r)" using assms(1) ..
have "¬S(p,a) ⟶ A(p,r)" using assms(3) ..
hence "A(p,r)" using assms(2) ..
hence 1: "A(p,r) ∧ A(c,r)" using `A(c,r)`..
have "∀y. A(p,r) ∧ A(y,r) ⟶ p=y" using assms(5) ..
hence "A(p,r) ∧ A(c,r) ⟶ p=c" ..
thus "p=c" using 1 ..
qed
lemma ejercicio_8_c:
"⟦A(r,c);
¬S(p,a);
∀x. ¬S(x,a) ⟶ A(x,r);
∀x y. A(x,y) ⟶ A(y,x);
∀x y. A(x,r) ∧ A(y,r) ⟶ x=y ⟧ ⟹ p = c"
apply (drule_tac x = p in spec)
apply (drule mp, assumption)
apply (drule_tac x = r in spec)
apply (drule_tac x = p in spec)
apply (frule_tac x = c in spec)
apply (drule mp, assumption)
apply (drule_tac x = c in spec)+
apply (rule mp, assumption)
apply (rule conjI, assumption+)
done
text {* ---------------------------------------------------------------
Ejercicio 9. Formalizar el siguiente argumento
Todos los filósofos se han preguntado qué es la filosofía. Los que
se preguntan qué es la filosofía se vuelven locos. Nietzsche es
filósofo. El maestro de Nietzsche no acabó loco. Por tanto,
Nietzsche y su maestro son diferentes personas.
Usar F(x) para x es filósofo
L(x) para x se vuelve loco
P(x) para x se ha preguntado qué es la filosofía.
m para el maestro de Nietzsche
n para Nietzsche
------------------------------------------------------------------ *}
lemma ejercicio_9_a:
assumes "∀x. F(x) ⟶ P(x)"
"∀x. P(x) ⟶ L(x)"
"F(n)"
"¬L(m)"
shows "n ≠ m"
using assms
by auto
lemma ejercicio_9_b:
assumes "∀x. F(x) ⟶ P(x)"
"∀x. P(x) ⟶ L(x)"
"F(n)"
"¬L(m)"
shows "n ≠ m"
proof
assume "n = m"
hence "F(m)" using assms(3) by (rule subst)
have "F(m) ⟶ P(m)" using assms(1) ..
hence "P(m)" using `F(m)` ..
have "P(m) ⟶ L(m)" using assms(2) ..
hence "L(m)" using `P(m)` ..
with assms(4) show False ..
qed
lemma ejercicio_9_c:
"⟦∀x. F(x) ⟶ P(x);
∀x. P(x) ⟶ L(x);
F(n);
¬L(m) ⟧ ⟹ n ≠ m"
apply (rule notI)
apply (erule_tac x = n in allE)
apply (drule mp, assumption)
apply (erule_tac x = m in allE)
apply (erule notE)
apply (erule mp)
apply (erule subst, assumption)
done
text {* ---------------------------------------------------------------
Ejercicio 10. Formalizar el siguiente argumento
Eduardo pudo haber visto al asesino. Antonio fue el primer testigo
de la defensa. O Eduardo estaba en clase o Antonio dio falso
testimonio. Nadie en clase pudo haber visto al asesino. Luego, el
primer testigo de la defensa dio falso testimonio.
Usar C(x) para x estaba en clase
F(x) para x dio falso testimonio
V(x) para x pudo haber visto al asesino
a para Antonio
e para Eduardo
p para el primer testigo de la defensa
------------------------------------------------------------------ *}
lemma ejercicio_10_a:
assumes "V(e)"
"a = p"
"C(e) ∨ F(a)"
"∀x. C(x) ⟶ ¬V(x)"
shows "F(p)"
using assms
by auto
lemma ejercicio_10_b:
assumes "V(e)"
"a = p"
"C(e) ∨ F(a)"
"∀x. C(x) ⟶ ¬V(x)"
shows "F(p)"
using assms(3)
proof
assume "C(e)"
have "C(e) ⟶ ¬V(e)" using assms(4) ..
hence "¬V(e)" using `C(e)` ..
thus "F(p)" using assms(1) ..
next
assume "F(a)"
with assms(2) show "F(p)" by (rule subst)
qed
lemma ejercicio_10_c:
"⟦ V(e);
a = p;
C(e) ∨ F(a);
∀x. C(x) ⟶ ¬V(x) ⟧ ⟹ F(p)"
apply (erule disjE)
apply (erule_tac x = e in allE)
apply (drule mp, assumption)
apply (erule notE, assumption)
apply (erule subst, assumption)
done
end