Acciones

Relación 9

De Razonamiento automático (2016-17)

chapter {* R9: Deducción natural LPO en Isabelle/HOL *}

theory R9_Deduccion_natural_LPO
imports Main 
begin

text {*
  Demostrar o refutar los siguientes lemas usando sólo las reglas
  básicas de deducción natural de la lógica proposicional, de los
  cuantificadores y de la igualdad: 
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q
  · conjunct1:  P ∧ Q ⟹ P
  · conjunct2:  P ∧ Q ⟹ Q  
  · notnotD:    ¬¬ P ⟹ P
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q 
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q
  · disjI1:     P ⟹ P ∨ Q
  · disjI2:     Q ⟹ P ∨ Q
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R 
  · FalseE:     False ⟹ P
  · notE:       ⟦¬P; P⟧ ⟹ R
  · notI:       (P ⟹ False) ⟹ ¬P
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P 
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P
  · ccontr:     (¬P ⟹ False) ⟹ P

  · allI:       ⟦∀x. P x; P x ⟹ R⟧ ⟹ R
  · allE:       (⋀x. P x) ⟹ ∀x. P x
  · exI:        P x ⟹ ∃x. P x
  · exE:        ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q

  · refl:       t = t
  · subst:      ⟦s = t; P s⟧ ⟹ P t
  · trans:      ⟦r = s; s = t⟧ ⟹ r = t
  · sym:        s = t ⟹ t = s
  · not_sym:    t ≠ s ⟹ s ≠ t
  · ssubst:     ⟦t = s; P s⟧ ⟹ P t
  · box_equals: ⟦a = b; a = c; b = d⟧ ⟹ a: = d
  · arg_cong:   x = y ⟹ f x = f y
  · fun_cong:   f = g ⟹ f x = g x
  · cong:       ⟦f = g; x = y⟧ ⟹ f x = g y
*}

text {*
  Se usarán las reglas notnotI, mt y not_ex que demostramos a continuación.
  *}

lemma notnotI: "P ⟹ ¬¬ P"
by auto

lemma mt: "⟦F ⟶ G; ¬G⟧ ⟹ ¬F"
by auto

lemma no_ex: "¬(∃x. P(x)) ⟹ ∀x. ¬P(x)"
by auto

text {* --------------------------------------------------------------- 
  Ejercicio 1. Demostrar
       P a ⟶ (∃x. Q x) ⊢ ∃x. P a ⟶ Q x 
  ------------------------------------------------------------------ *}

lemma ejercicio_1: 
  fixes P Q :: "'b ⇒ bool" 
  assumes "P a ⟶ (∃x. Q x)"
  shows   "∃x. P a ⟶ Q x"
oops
  

(* migtermor ferrenseg juacabsou *)
lemma ejercicio_1: 
  fixes P Q :: "'b ⇒ bool" 
  assumes "P a ⟶ (∃x. Q x)"
  shows   "∃x. P a ⟶ Q x"
proof -
 {assume 1: "P a"
 have 2: "∃x. Q x" using assms 1 by (rule mp)}
 then obtain b where 3: "Q b" by (rule exE)          
(* No sé por qué salta un aviso aquí. Aún así, sin esto no se finaliza correctamente la demostración, y con ello sí. *)
 then have 4: "(P a) ⟶ (Q b)" by (rule impI)
 then show 5: "∃x. P a ⟶ Q x" by (rule exI)
qed

(* ivamenjim *)
(* Si se pone todo seguido, solo sale fallo en qed al final y no entiendo porqué *)

lemma ejercicio_1_1:  
  assumes 1: "P a ⟶ (∃x. Q x)"
  shows   "∃x. P a ⟶ Q x"
proof -
   assume 2: "P a"
   have 3: "(∃x. Q x)" using 1 2 by (rule mp)
   obtain b where 4: "Q b" using 3 by (rule exE)
   have 5: "P a ⟶ Q b" using 4 by (rule impI)
   then have "∃x. P a ⟶ Q x" by (rule exI) 
qed  


text {* --------------------------------------------------------------- 
  Ejercicio 2. Demostrar
       {∀x y z. R x y ∧ R y z ⟶ R x z, 
        ∀x. ¬(R x x)}
       ⊢ ∀x y. R x y ⟶ ¬(R y x)
  ------------------------------------------------------------------ *}

(* migtermor ferrenseg ivamenjim marcarmor13 serrodcal juacabsou marpoldia1 crigomgom*)
lemma ejercicio_2: 
  fixes R :: "'b ⇒ 'b ⇒ bool" 
  assumes 1: "∀x y z. R x y ∧ R y z ⟶ R x z"
  assumes 2: "∀x. ¬(R x x)"
  shows   "∀x y. R x y ⟶ ¬(R y x)"
proof (rule allI)
fix x
show "∀y. R x y ⟶ ¬(R y x)" 
 proof (rule allI) 
  fix y
  {assume 3: "R x y"
   {assume 4: "R y x"
    have 5: "R x y ∧ R y x" using 3 4 by (rule conjI)
    also have 6: "∀ z1 z2. R x z1 ∧ R z1 z2 ⟶ R x z2" using 1 by (rule allE)
    then have 7: "∀ z. R x y ∧ R y z ⟶ R x z" by (rule allE)
    then have 8: "R x y ∧ R y x ⟶ R x x" by (rule allE)
    then have 9: "R x x" using 5 by (rule mp)
    have 10: "¬(R x x)" using 2 by (rule allE)
    then have 11: "False" using 9 by (rule notE)}
  then have 12: "¬ (R y x)" by (rule notI)}
  thus "R x y ⟶ ¬(R y x)" by (rule impI)
 qed
qed

(* ivamenjim *)
(* Semejante al anterior, pero indicando que se pruebe por la regla correspondiente *)

lemma ejercicio_2_1: 
  assumes 1: "∀x y z. R x y ∧ R y z ⟶ R x z"
  assumes 2: "∀x. ¬(R x x)"
  shows   "∀x y. R x y ⟶ ¬(R y x)"
proof (rule allI)
fix x
show "∀y. R x y ⟶ ¬(R y x)" 
 proof (rule allI) 
  fix y
  {assume 3: "R x y"
   {assume 4: "R y x"
    have 5: "R x y ∧ R y x" using 3 4 ..
    have 6: "∀ y z. R x y ∧ R y z ⟶ R x z" using 1 ..
    then have 7: "∀ z. R x y ∧ R y z ⟶ R x z" ..
    then have 8: "R x y ∧ R y x ⟶ R x x" ..
    then have 9: "R x x" using 5 ..
    have 10: "¬(R x x)" using 2 ..
    then have 11: "False" using 9 ..}
  then have 12: "¬ (R y x)" ..}
  thus "R x y ⟶ ¬(R y x)" ..
 qed
qed 

text {* --------------------------------------------------------------- 
  Ejercicio 3. Demostrar o refutar
       (∀x. ∃y. P x y) ⟶ (∃y. ∀x. P x y)
  ------------------------------------------------------------------ *}

(* ivamenjim ferrenseg paupeddeg serrodcal juacabsou marpoldia1 crigomgom*)
lemma ejercicio_3: 
  assumes "(∀x. ∃y. P x y)"
  shows   "(∃y. ∀x. P x y)"
  quickcheck
oops  

(* Y se encuentra el contraejemplo: P = (λx. undefined)(a1 := {a2}, a2 := {a1}) *)

(* migtermor *)
fun P :: "'a ⇒ 'a ⇒ bool" where
  "P x y = (x=y)"

lemma ejercicio3:
 "(∀x. ∃y. P x y) ⟶ (∃y. ∀x. P x y)"
quickcheck
oops

text {* --------------------------------------------------------------- 
  Ejercicio 4. Demostrar o refutar
     {∀x. P a x x, 
      ∀x y z. P x y z ⟶ P (f x) y (f z)⟧
     ⊢ ∃z. P (f a) z (f (f a))
  ------------------------------------------------------------------ *}

(* ferrenseg ivamenjim *)
lemma ejercicio_4:
  assumes 1:"∀x. P a x x" and 2:"∀x y z. P x y z ⟶ P (f x) y (f z)"
  shows "∃z. P (f a) z (f (f a))"
proof -
  have 4:"P a (f a) (f a)" using 1 ..
  also have 5:"∀y z. P a y z ⟶ P (f a) y (f z)" using 2 ..
  then have 6:"∀z. P a (f a) z ⟶ P (f a) (f a) (f z)" ..
  then have 7:"P a (f a) (f a) ⟶ P (f a) (f a) (f (f a))" ..
  also have 8:"P (f a) (f a) (f (f a))" using 7 4 by (rule mp)
  then show "∃z. P (f a) z (f (f a))" ..
qed

(* migtermor serrodcal crigomgom*)
lemma ejercicio_4_2: 
  fixes P :: "'b ⇒ 'b ⇒ 'b ⇒ bool" 
  assumes 1: "∀x. P a x x"
  assumes 2: "∀x y z.  P x y z ⟶ P (f x) y (f z)"
  shows   " ∃z. P (f a) z (f (f a))"
proof (rule exI)
 have 3: "P a (f a) (f a)" using 1 by (rule allE)
 have 4: "∀y z.  P a y z ⟶ P (f a) y (f z)" using 2 by (rule allE)
 then have 5: "∀z.  P a (f a) z ⟶ P (f a) (f a) (f z)" by (rule allE)
 then have 6: "P a (f a) (f a) ⟶ P (f a) (f a) (f (f a))" by (rule allE)
 then show "P (f a) (f a) (f (f a))" using 3 by (rule mp)
qed

(* paupeddeg juacabsou marpoldia1*)
lemma ejercicio_4_3:
  assumes " ∀x. P a x x " 
          " ∀x y z. P x y z ⟶ P (f x) y (f z)"
  shows "∃z. P (f a) z (f (f a))"
proof
  have "∀ y z. P a y z ⟶ P (f a) y (f z)" using assms(2) by (rule allE)
  hence "∀z. P a (f a) z ⟶ P (f a) (f a) (f z)"  by (rule allE)
  hence "P a (f a) (f a) ⟶ P (f a) (f a) (f (f a))"  by (rule allE)
  have "P a (f a) (f a)" using assms(1) by (rule allE)
  show "P (f a) (f a) (f (f a))" using `P a (f a) (f a) ⟶ P (f a) (f a) (f (f a))` `P a (f a) (f a)`  by (rule mp)
qed

text {* --------------------------------------------------------------- 
  Ejercicio 5. Demostrar o refutar
     {∀y. Q a y, 
      ∀x y. Q x y ⟶ Q (s x) (s y)} 
     ⊢ ∃z. Qa z ∧ Q z (s (s a))
  ------------------------------------------------------------------ *}

(* ferrenseg ivamenjim *)
lemma ejercicio_5:
  assumes 1:"∀y. Q a y" and 2:"∀x y. Q x y ⟶ Q (s x) (s y)"
  shows "∃z. Q a z ∧ Q z (s (s a))"
proof
  have 3:"Q a (s a)" using 1 ..
  also have 4:"∀y. Q a y ⟶ Q (s a) (s y)" using 2 ..
  then have 5:"Q a (s a) ⟶ Q (s a) (s (s a))" ..
  then have 6:"Q (s a) (s (s a))" using 3 by (rule mp)
  show "Q a (s a) ∧ Q (s a) (s (s a))" using 3 6 by (rule conjI)
qed

(* migtermor *)
lemma ejercicio_5_2: 
  fixes P :: "'b ⇒ 'b ⇒ bool" 
  assumes 1: "∀y. Q a y"
  assumes 2: "∀x y. Q x y ⟶ Q (s x) (s y)"
  shows   " ∃z. Q a z ∧ Q z (s (s a))"
proof -
 have 3: "Q a (s a)" using 1 by (rule allE)
 have 4: "∀y. Q a y ⟶ Q (s a) (s y)" using 2 by (rule allE)
 then have 5: "Q a (s a) ⟶ Q (s a) (s (s a))" by (rule allE)
 then have 6: "Q (s a) (s (s a))" using 3 by (rule mp)
 have "Q a (s a) ∧ Q (s a) (s (s a))" using 3 6 by (rule conjI)
 then show "∃z. Q a z ∧ Q z (s (s a))" by (rule exI)
qed

(* paupeddeg serrodcal juacabsou marpoldia1 crigomgom*)
lemma ejercicio_5_3:
  assumes "∀y. Q a y" 
          "∀x y. Q x y ⟶ Q (s x) (s y)"
  shows "∃z. Q a z ∧ Q z (s (s a))"
proof 
have "∀y. Q a y ⟶ Q (s a) (s y)" using assms(2) by (rule allE)
hence "Q a (s a) ⟶ Q (s a) (s (s a))" by (rule allE)
have "Q a (s a)" using assms(1) by (rule allE)
have "Q (s a) (s (s a))" using `Q a (s a) ⟶ Q (s a) (s (s a))` `Q a (s a)` by (rule mp)
show "Q a (s a) ∧ Q (s a) (s (s a))" using `Q a (s a)` `Q (s a) (s (s a))` by (rule conjI)
qed

end