Acciones

Diferencia entre revisiones de «Relación 2»

De Razonamiento automático (2010-11)

(Página creada con '<source lang="bash"> header {* 2ª relación de ejercicios *} theory Relacion_2 imports Main begin text {* Demostrar o refutar los siguientes lemas usando sólo las reglas ...')
 
m (Texto reemplazado: «"isar"» por «"isabelle"»)
 
(No se muestran 16 ediciones intermedias de 4 usuarios)
Línea 1: Línea 1:
<source lang="bash">
+
<source lang="isabelle">
 
header {* 2ª relación de ejercicios *}
 
header {* 2ª relación de ejercicios *}
  
Línea 12: Línea 12:
 
*}
 
*}
  
lemma "(∃x. ∀y. P x y) ⟶ (∀y. ∃x. P x y)"
+
lemma "(∃x.∀y. P x y) ⟶ (∀y.∃x. P x y)"
oops
+
proof (rule impI)
 +
  assume 1: "∃x. ∀y. P x y"
 +
  show "∀y. ∃x. P x y"
 +
  proof (rule allI)
 +
    from 1 obtain "x" where 2: "∀y. P x y" by (rule exE)
 +
    fix y
 +
    from 2 have 3: "P x y" by (rule allE)
 +
    from 3 show 4: "∃x. P x y" by (rule exI)
 +
  qed
 +
qed
  
 
lemma "(∀x. P x ⟶ Q) = ((∃x. P x) ⟶ Q)"
 
lemma "(∀x. P x ⟶ Q) = ((∃x. P x) ⟶ Q)"
oops
+
proof
 +
{ assume 1: "∀x. P x ⟶ Q"
 +
  show "(∃x. P x) ⟶ Q"
 +
  proof
 +
    assume "∃x. P x"
 +
    then obtain a where "P a" by (rule exE)
 +
    have "P a ⟶ Q" using 1 by (rule allE)
 +
    thus "Q" using `P a` by (rule mp)
 +
  qed }
 +
next
 +
{ assume 2: "(∃x. P x) ⟶ Q"
 +
  show "∀x. P x ⟶ Q"
 +
  proof
 +
    fix a
 +
    show "P a ⟶ Q"
 +
    proof
 +
      assume "P a"
 +
      hence 3: "∃x. P x" by (rule exI)
 +
      from 2 and 3 show "Q" by (rule mp)
 +
    qed
 +
  qed }
 +
qed
  
 
lemma "((∀ x. P x) ∧ (∀ x. Q x)) = (∀ x. (P x ∧ Q x))"
 
lemma "((∀ x. P x) ∧ (∀ x. Q x)) = (∀ x. (P x ∧ Q x))"
oops
+
proof
 +
  { assume 1: "(∀ x. P x) ∧ (∀ x. Q x)"
 +
    show "∀ x. (P x ∧ Q x)"
 +
    proof (rule allI)
 +
      from 1 have 2: "∀ x. P x" by (rule conjE)
 +
      from 1 have 3: "∀ x. Q x" by (rule conjE)
 +
      fix a
 +
      from 2 have 4: "P a" by (rule allE)
 +
      from 3 have 5: "Q a" by (rule allE)
 +
      from 4 and 5 show 6: "(P a) ∧ (Q a)" by (rule conjI)
 +
    qed }
 +
next
 +
  { assume 7: "∀ x. (P x ∧ Q x)"
 +
    show "(∀ x. P x) ∧ (∀ x. Q x)"
 +
    proof
 +
      show "(∀ x. P x)"
 +
      proof (rule allI)
 +
        fix a
 +
        from 7 have 8: "P a ∧ Q a" by (rule allE)
 +
        from 8 show "P a" by (rule conjE)
 +
      qed
 +
    next
 +
      show "(∀ x. Q x)"
 +
      proof (rule allI)
 +
        fix a
 +
        from 7 have 9: "P a ∧ Q a" by (rule allE)
 +
        from 9 show "Q a" by (rule conjE)
 +
      qed
 +
    qed }
 +
qed
  
 
lemma "((∀ x. P x) ∨ (∀ x. Q x)) = (∀ x. (P x ∨ Q x))"
 
lemma "((∀ x. P x) ∨ (∀ x. Q x)) = (∀ x. (P x ∨ Q x))"
 
oops
 
oops
 +
 +
text {*
 +
  Esta fórmula de la lógica de predicados es falsa. La implicación de
 +
  izquierda a derecha sí es cierta y a continuación la probamos:
 +
*}
 +
 +
lemma "((∀ x. P x) ∨ (∀ x. Q x)) ⟶ (∀ x. (P x ∨ Q x))"
 +
proof (rule impI)
 +
  assume 1: "(∀ x. P x) ∨ (∀ x. Q x)"
 +
  show "∀ x. (P x ∨ Q x)"
 +
  proof (rule allI)
 +
    fix x
 +
    note 1
 +
    moreover{
 +
      assume 11: "∀ x. P x" 
 +
      from 11 have 111: "P x" by (rule allE)
 +
      from 111 have "P x ∨ Q x" by (rule disjI1)}
 +
    moreover{ 
 +
      assume 12: "∀ x. Q x"
 +
      from 12 have 121: "Q x" by (rule allE)
 +
      from 121 have "P x ∨ Q x" by (rule disjI2)}
 +
    ultimately show "(P x ∨ Q x)" by (rule disjE)
 +
  qed
 +
qed
 +
 +
text {*
 +
  La implicación de derecha a izquierda es falsa y a continuación
 +
  construimos un contraejemplo. Supongamos un modelo en el que fuese
 +
  verdadera:
 +
    (∀ x. (P x ∨ Q x)) ∧ (∃x. ¬P x ) ∧ (∃x. ¬Q x),
 +
  lo cual equivale a
 +
    (∀ x. (P x ∨ Q x)) ∧ ¬(∀ x. P x ) ∧ ¬(∀ x. Q x)
 +
  y esto es contradictorio con
 +
    (∀ x. P x) ∨ (∀ x. Q x).
 +
  Un ejemplo en lenguaje natural que ilustra esto es el siguiente: todos
 +
  los números reales son algebraicos o trascendentes, pero de ello no
 +
  podemos concluir que o bien todos los números reales son algebraicos o bien todos los
 +
  números reales son trascendentes.
 +
*}
 +
 +
text {*
 +
  Comentario de J.A. Alonso: ¿Cómo se calcula un contraejemplo con Isabelle?
 +
*}
  
 
lemma "((∃ x. P x) ∨ (∃ x. Q x)) = (∃ x. (P x ∨ Q x))"
 
lemma "((∃ x. P x) ∨ (∃ x. Q x)) = (∃ x. (P x ∨ Q x))"
oops
+
proof
 +
  {assume 1:"((∃ x. P x) ∨ (∃ x. Q x))"
 +
  show "(∃ x. (P x ∨ Q x))"
 +
  proof -
 +
    note 1
 +
    moreover
 +
    { assume 2: "(∃ x. P x)"
 +
      obtain a where 3: "P a" using 2 by (rule exE)
 +
      from 3 have 4: "P a ∨ Q a" ..
 +
      from 4 have "(∃ x. (P x ∨ Q x))" by (rule exI) }
 +
    moreover
 +
    { assume 2: "(∃ x. Q x)"
 +
      obtain a where 3: "Q a" using 2 by (rule exE)
 +
      from 3 have 4: "P a ∨ Q a" ..
 +
      from 4 have "(∃ x. (P x ∨ Q x))" by (rule exI) }
 +
    ultimately show "(∃ x. (P x ∨ Q x))" by (rule disjE) 
 +
  qed}
 +
next
 +
  {assume 1:"(∃ x. (P x ∨ Q x))"
 +
  obtain a where 2: "P a ∨ Q a" using 1 by (rule exE)
 +
  show "((∃ x. P x) ∨ (∃ x. Q x))" using 2
 +
  proof
 +
    { assume 3: "P a"
 +
      from 3 have 4: "(∃ x. P x)" by (rule exI)
 +
      from 4 show "((∃ x. P x) ∨ (∃ x. Q x))" .. }
 +
    { assume 3: "Q a"
 +
      from 3 have 4: "(∃ x. Q x)" by (rule exI)
 +
      from 4 show "((∃ x. P x) ∨ (∃ x. Q x))" .. }
 +
  qed }
 +
qed
  
 
lemma "(∀x. ∃y. P x y) ⟶ (∃y. ∀x. P x y)"
 
lemma "(∀x. ∃y. P x y) ⟶ (∃y. ∀x. P x y)"
 
oops
 
oops
  
 +
text {*
 +
  Esta fórmula de la lógica de predicados es falsa y a continuación
 +
  construimos un contraejemplo. Supongamos un modelo en el que fuese verdadera:
 +
    (∀x.∃y. P x y) ∧ (∀x. P x x) ∧ (∀x.∀y. (¬(x = y) ⟶ ¬(P y x))) ∧ (∃x.∃y. (¬(x = y)))
 +
  y esto es contradictorio con
 +
    (∃y. ∀x. P x y).
 +
  Si interpretamos P como <<tener exactamente los mismos padres y los
 +
  mismos hermanos que>> es obvio que la implicación es falsa. Un
 +
  contraejemplo más conocido se obtiene interpretando P como la relación
 +
  <<menor o igual que>> sobre los números reales, de modo que el
 +
  antecedente indicaría que dichos números no están acotados
 +
  superiormente, mientras que el consecuente indicaría que el conjunto
 +
  de los reales tiene al menos una cota superior.
 +
*}
 +
 +
text {*
 +
  Comentario de J.A. Alonso: ¿Cómo se calcula un contraejemplo con Isabelle?
 +
 +
Simplemente ejecutando un lema o teorema para el cual se pueda encontrar un
 +
contraejemplo, isabelle automáticamente te lo mostrará. Para que el sistema
 +
calcule un contraejemplo directamente también es posible utilizar la palabra
 +
reservada "refute"
 +
*}
 +
 +
-- "La forma más corta y más automática es la que sigue"
 
lemma "(¬ (∀ x. P x)) = (∃ x. ¬ P x)"
 
lemma "(¬ (∀ x. P x)) = (∃ x. ¬ P x)"
oops
+
by auto
  
 
end
 
end
 
</source>
 
</source>

Revisión actual del 09:51 16 jul 2018

header {* 2ª relación de ejercicios *}

theory Relacion_2
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 y de la lógica
  de predicados (allI, allE, exI y exE). 
*}

lemma "(∃x.∀y. P x y) ⟶ (∀y.∃x. P x y)"
proof (rule impI)
  assume 1: "∃x. ∀y. P x y"
  show "∀y. ∃x. P x y"
  proof (rule allI)
    from 1 obtain "x" where 2: "∀y. P x y" by (rule exE)
    fix y
    from 2 have 3: "P x y" by (rule allE)
    from 3 show 4: "∃x. P x y" by (rule exI)
  qed
qed

lemma "(∀x. P x ⟶ Q) = ((∃x. P x) ⟶ Q)"
proof
 { assume 1: "∀x. P x ⟶ Q"
   show "(∃x. P x) ⟶ Q"
   proof
     assume "∃x. P x"
     then obtain a where "P a" by (rule exE)
     have "P a ⟶ Q" using 1 by (rule allE)
     thus "Q" using `P a` by (rule mp)
   qed }
next
 { assume 2: "(∃x. P x) ⟶ Q"
   show "∀x. P x ⟶ Q"
   proof
     fix a
     show "P a ⟶ Q"
     proof
       assume "P a"
       hence 3: "∃x. P x" by (rule exI)
       from 2 and 3 show "Q" by (rule mp)
     qed
   qed }
qed

lemma "((∀ x. P x) ∧ (∀ x. Q x)) = (∀ x. (P x ∧ Q x))"
proof
  { assume 1: "(∀ x. P x) ∧ (∀ x. Q x)"
    show "∀ x. (P x ∧ Q x)"
    proof (rule allI)
      from 1 have 2: "∀ x. P x" by (rule conjE)
      from 1 have 3: "∀ x. Q x" by (rule conjE)
      fix a
      from 2 have 4: "P a" by (rule allE)
      from 3 have 5: "Q a" by (rule allE)
      from 4 and 5 show 6: "(P a) ∧ (Q a)" by (rule conjI)
    qed }
next
  { assume 7: "∀ x. (P x ∧ Q x)"
    show "(∀ x. P x) ∧ (∀ x. Q x)"
    proof
      show "(∀ x. P x)"
      proof (rule allI)
        fix a
        from 7 have 8: "P a ∧ Q a" by (rule allE)
        from 8 show "P a" by (rule conjE)
      qed
    next
      show "(∀ x. Q x)"
      proof (rule allI)
        fix a
        from 7 have 9: "P a ∧ Q a" by (rule allE)
        from 9 show "Q a" by (rule conjE)
      qed 
    qed }
qed

lemma "((∀ x. P x) ∨ (∀ x. Q x)) = (∀ x. (P x ∨ Q x))"
oops

text {* 
  Esta fórmula de la lógica de predicados es falsa. La implicación de
  izquierda a derecha sí es cierta y a continuación la probamos:
*}

lemma "((∀ x. P x) ∨ (∀ x. Q x)) ⟶ (∀ x. (P x ∨ Q x))"
proof (rule impI)
  assume 1: "(∀ x. P x) ∨ (∀ x. Q x)"
  show "∀ x. (P x ∨ Q x)"
  proof (rule allI)
    fix x
    note 1
    moreover{
      assume 11: "∀ x. P x"   
      from 11 have 111: "P x" by (rule allE)
      from 111 have "P x ∨ Q x" by (rule disjI1)}
    moreover{  
      assume 12: "∀ x. Q x"
      from 12 have 121: "Q x" by (rule allE)
      from 121 have "P x ∨ Q x" by (rule disjI2)}
    ultimately show "(P x ∨ Q x)" by (rule disjE)
  qed
qed

text {* 
  La implicación de derecha a izquierda es falsa y a continuación
  construimos un contraejemplo. Supongamos un modelo en el que fuese
  verdadera: 
    (∀ x. (P x ∨ Q x)) ∧ (∃x. ¬P x ) ∧ (∃x. ¬Q x),
  lo cual equivale a 
    (∀ x. (P x ∨ Q x)) ∧ ¬(∀ x. P x ) ∧ ¬(∀ x. Q x)
  y esto es contradictorio con 
    (∀ x. P x) ∨ (∀ x. Q x). 
  Un ejemplo en lenguaje natural que ilustra esto es el siguiente: todos 
  los números reales son algebraicos o trascendentes, pero de ello no
  podemos concluir que o bien todos los números reales son algebraicos o bien todos los
  números reales son trascendentes.
*}

text {*
  Comentario de J.A. Alonso: ¿Cómo se calcula un contraejemplo con Isabelle?
*}

lemma "((∃ x. P x) ∨ (∃ x. Q x)) = (∃ x. (P x ∨ Q x))"
proof
  {assume 1:"((∃ x. P x) ∨ (∃ x. Q x))"
   show "(∃ x. (P x ∨ Q x))"
   proof -
     note 1
     moreover
     { assume 2: "(∃ x. P x)"
       obtain a where 3: "P a" using 2 by (rule exE)
       from 3 have 4: "P a ∨ Q a" .. 
       from 4 have "(∃ x. (P x ∨ Q x))" by (rule exI) }
     moreover
     { assume 2: "(∃ x. Q x)"
       obtain a where 3: "Q a" using 2 by (rule exE)
       from 3 have 4: "P a ∨ Q a" .. 
       from 4 have "(∃ x. (P x ∨ Q x))" by (rule exI) }
     ultimately show "(∃ x. (P x ∨ Q x))" by (rule disjE)  
   qed}
next
  {assume 1:"(∃ x. (P x ∨ Q x))"
   obtain a where 2: "P a ∨ Q a" using 1 by (rule exE)
   show "((∃ x. P x) ∨ (∃ x. Q x))" using 2
   proof 
     { assume 3: "P a"
       from 3 have 4: "(∃ x. P x)" by (rule exI)
       from 4 show "((∃ x. P x) ∨ (∃ x. Q x))" .. }
     { assume 3: "Q a"
       from 3 have 4: "(∃ x. Q x)" by (rule exI)
       from 4 show "((∃ x. P x) ∨ (∃ x. Q x))" .. }
   qed }
qed

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

text {*
  Esta fórmula de la lógica de predicados es falsa y a continuación
  construimos un contraejemplo. Supongamos un modelo en el que fuese verdadera:
    (∀x.∃y. P x y) ∧ (∀x. P x x) ∧ (∀x.∀y. (¬(x = y) ⟶ ¬(P y x))) ∧ (∃x.∃y. (¬(x = y))) 
  y esto es contradictorio con 
    (∃y. ∀x. P x y).
  Si interpretamos P como <<tener exactamente los mismos padres y los
  mismos hermanos que>> es obvio que la implicación es falsa. Un
  contraejemplo más conocido se obtiene interpretando P como la relación
  <<menor o igual que>> sobre los números reales, de modo que el
  antecedente indicaría que dichos números no están acotados
  superiormente, mientras que el consecuente indicaría que el conjunto
  de los reales tiene al menos una cota superior.
 *}

text {*
  Comentario de J.A. Alonso: ¿Cómo se calcula un contraejemplo con Isabelle?
 
 Simplemente ejecutando un lema o teorema para el cual se pueda encontrar un
 contraejemplo, isabelle automáticamente te lo mostrará. Para que el sistema
 calcule un contraejemplo directamente también es posible utilizar la palabra
 reservada "refute"
*}

-- "La forma más corta y más automática es la que sigue"
lemma "(¬ (∀ x. P x)) = (∃ x. ¬ P x)"
by auto

end