<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/LMF2020/index.php?action=history&amp;feed=atom&amp;title=TF_sol</id>
	<title>TF sol - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/LMF2020/index.php?action=history&amp;feed=atom&amp;title=TF_sol"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2020/index.php?title=TF_sol&amp;action=history"/>
	<updated>2026-07-18T23:50:15Z</updated>
	<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2020/index.php?title=TF_sol&amp;diff=1268&amp;oldid=prev</id>
		<title>Mjoseh en 07:13 18 jun 2020</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2020/index.php?title=TF_sol&amp;diff=1268&amp;oldid=prev"/>
		<updated>2020-06-18T07:13:48Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://www.glc.us.es/~jalonso/LMF2020/index.php?title=TF_sol&amp;amp;diff=1268&amp;amp;oldid=1267&quot;&gt;Mostrar los cambios&lt;/a&gt;</summary>
		<author><name>Mjoseh</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2020/index.php?title=TF_sol&amp;diff=1267&amp;oldid=prev</id>
		<title>Mjoseh: Protegió «TF sol» ([Editar=Solo administradores] (indefinido) [Trasladar=Solo administradores] (indefinido))</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2020/index.php?title=TF_sol&amp;diff=1267&amp;oldid=prev"/>
		<updated>2020-06-18T06:53:16Z</updated>

		<summary type="html">&lt;p&gt;Protegió «&lt;a href=&quot;/~jalonso/LMF2020/index.php/TF_sol&quot; title=&quot;TF sol&quot;&gt;TF sol&lt;/a&gt;» ([Editar=Solo administradores] (indefinido) [Trasladar=Solo administradores] (indefinido))&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;es&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Revisión anterior&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revisión del 06:53 18 jun 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;es&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Sin diferencias)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Mjoseh</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2020/index.php?title=TF_sol&amp;diff=1266&amp;oldid=prev</id>
		<title>Mjoseh: Página creada con «&lt;source lang = &quot;isabelle&quot;&gt; chapter ‹Expresiones booleanas y expresiones condicionales›  theory Trabajo_final_sol imports Main  begin  section ‹Expresiones booleanas…»</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2020/index.php?title=TF_sol&amp;diff=1266&amp;oldid=prev"/>
		<updated>2020-06-18T06:53:06Z</updated>

		<summary type="html">&lt;p&gt;Página creada con «&amp;lt;source lang = &amp;quot;isabelle&amp;quot;&amp;gt; chapter ‹Expresiones booleanas y expresiones condicionales›  theory Trabajo_final_sol imports Main  begin  section ‹Expresiones booleanas…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;source lang = &amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter ‹Expresiones booleanas y expresiones condicionales›&lt;br /&gt;
&lt;br /&gt;
theory Trabajo_final_sol&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section ‹Expresiones booleanas›&lt;br /&gt;
&lt;br /&gt;
text ‹------------------------------------------------------------------ &lt;br /&gt;
  Ejercicio 1. La expresiones booleanas se definen por&lt;br /&gt;
  * las constantes booleanas son expresiones,&lt;br /&gt;
  * las variables son expresiones,&lt;br /&gt;
  * Si e es una expresión, entonces ¬e también lo es.&lt;br /&gt;
  * Si e1 y e2 son expresiones, entonces e1 ∧ e2 también lo es.&lt;br /&gt;
&lt;br /&gt;
  Definir exp_booleana como el tipo de las expresiones booleanas.&lt;br /&gt;
  ---------------------------------------------------------------------›&lt;br /&gt;
&lt;br /&gt;
datatype exp_booleana = Const bool &lt;br /&gt;
                      | Var nat &lt;br /&gt;
                      | Neg exp_booleana&lt;br /&gt;
                      | And exp_booleana exp_booleana&lt;br /&gt;
&lt;br /&gt;
section ‹El valor de las expresiones boolenas›&lt;br /&gt;
&lt;br /&gt;
text ‹------------------------------------------------------------------ &lt;br /&gt;
  Ejercicio 2. Una interpretación es una función i que asigna a cada&lt;br /&gt;
  número natural un booleano de forma que el valor de la variable&lt;br /&gt;
  &amp;#039;Var n&amp;#039; en la interpretación &amp;#039;i&amp;#039; es &amp;#039;i(n)&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     valor :: exp_booleana ⇒ (nat ⇒ bool) ⇒ bool&lt;br /&gt;
  tal que (valor e i) es el valor de la expresión booleana e en la&lt;br /&gt;
  interpretación i. Por ejemplo,&lt;br /&gt;
     value &amp;quot;(valor (Var 3) (λx. False)) &lt;br /&gt;
  es False&lt;br /&gt;
  ---------------------------------------------------------------------›&lt;br /&gt;
&lt;br /&gt;
fun valor :: &amp;quot;exp_booleana ⇒ (nat ⇒ bool) ⇒ bool&amp;quot; where&lt;br /&gt;
   &amp;quot;valor (Const b) _   = b&amp;quot;&lt;br /&gt;
 | &amp;quot;valor (Var n) i     = i n &amp;quot;&lt;br /&gt;
 | &amp;quot;valor (Neg e) i     = (¬ (valor e i))&amp;quot;&lt;br /&gt;
 | &amp;quot;valor (And e1 e2) i = (valor e1 i ∧ valor e2 i)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
section ‹Expresiones If›&lt;br /&gt;
&lt;br /&gt;
text ‹------------------------------------------------------------------ &lt;br /&gt;
  Ejercicio 3. La expresiones if se definen por&lt;br /&gt;
  * las constantes booleanas son expresiones,&lt;br /&gt;
  * las variables son expresiones,&lt;br /&gt;
  * Si e, e1 y e2 son expresiones, entonces (if e e1 e2) también lo es.&lt;br /&gt;
&lt;br /&gt;
  Definir exp_if como el tipo de las expresiones if.&lt;br /&gt;
  ---------------------------------------------------------------------›&lt;br /&gt;
&lt;br /&gt;
datatype exp_if = CIF bool &lt;br /&gt;
                | VIF nat &lt;br /&gt;
                | IF exp_if exp_if exp_if&lt;br /&gt;
&lt;br /&gt;
text ‹------------------------------------------------------------------ &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     valor_if :: exp_if ⇒ (nat ⇒ bool) ⇒ bool&lt;br /&gt;
  tal que (valor_if e i) es el valor de la expresión if e en la&lt;br /&gt;
  interpretación i.&lt;br /&gt;
  ---------------------------------------------------------------------›&lt;br /&gt;
&lt;br /&gt;
fun valor_if :: &amp;quot;exp_if ⇒ (nat ⇒ bool) ⇒ bool&amp;quot; where&lt;br /&gt;
   &amp;quot;valor_if (CIF b) _      = b&amp;quot;&lt;br /&gt;
 | &amp;quot;valor_if (VIF n) i      = i n&amp;quot;&lt;br /&gt;
 | &amp;quot;valor_if (IF e e1 e2) i = (if (valor_if e i) &lt;br /&gt;
                               then (valor_if e1 i) &lt;br /&gt;
                               else (valor_if e2 i))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
section ‹Transformación de expresiones booleanas en expresiones if›&lt;br /&gt;
&lt;br /&gt;
subsection ‹Definición de bool2if›&lt;br /&gt;
&lt;br /&gt;
text ‹------------------------------------------------------------------ &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     bool2if :: exp_booleana ⇒ exp_if&lt;br /&gt;
  tal que (bool2if e) es una expresión if equivalente a la expresión&lt;br /&gt;
  booleana e.&lt;br /&gt;
  ---------------------------------------------------------------------›&lt;br /&gt;
&lt;br /&gt;
fun bool2if :: &amp;quot;exp_booleana ⇒ exp_if&amp;quot; where&lt;br /&gt;
   &amp;quot;bool2if (Const b)   = CIF b&amp;quot;&lt;br /&gt;
 | &amp;quot;bool2if (Var n)     = VIF n&amp;quot;&lt;br /&gt;
 | &amp;quot;bool2if (Neg e)     = IF (bool2if e) (CIF False) (CIF True)&amp;quot;&lt;br /&gt;
 | &amp;quot;bool2if (And e1 e2) = IF (bool2if e1) (bool2if e2) (CIF False)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text ‹------------------------------------------------------------------ &lt;br /&gt;
  Ejercicio 6. Demostrar que para cualquier expresión boolena e, son&lt;br /&gt;
  equivalentes (bool2if e) y e.&lt;br /&gt;
  ---------------------------------------------------------------------›&lt;br /&gt;
&lt;br /&gt;
subsection ‹Demostraciones de valor_if_bool2if›&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración estructurada de valor_if_bool2if›&lt;br /&gt;
lemma valor_if_bool2if_E:&lt;br /&gt;
  &amp;quot;valor_if (bool2if e) ent = valor e ent&amp;quot;&lt;br /&gt;
proof (induct e)&lt;br /&gt;
  case (Const x)&lt;br /&gt;
  then show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case (Var x)&lt;br /&gt;
  then show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case (Neg e)&lt;br /&gt;
  then show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case (And e1 e2)&lt;br /&gt;
  then show ?case by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración automática de valor_if_bool2if›&lt;br /&gt;
lemma valor_if_bool2if_A: &lt;br /&gt;
  &amp;quot;valor_if (bool2if e) ent = valor e ent&amp;quot;&lt;br /&gt;
  by (induct e) simp_all&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración declarativa detallada de valor_if_bool2if›&lt;br /&gt;
lemma valor_if_bool2if:&lt;br /&gt;
  &amp;quot;valor_if (bool2if e) ent = valor e ent&amp;quot;&lt;br /&gt;
proof (induct e)&lt;br /&gt;
  fix b&lt;br /&gt;
  have &amp;quot;valor_if (bool2if (Const b)) ent = valor_if (CIF b) ent&amp;quot;&lt;br /&gt;
    by (simp only: bool2if.simps(1))&lt;br /&gt;
  also have &amp;quot;… = b&amp;quot;&lt;br /&gt;
    by (simp only: valor_if.simps(1))&lt;br /&gt;
  also have &amp;quot;… = valor (Const b) ent&amp;quot;&lt;br /&gt;
    by (simp only: valor.simps(1))&lt;br /&gt;
  finally show &amp;quot;valor_if (bool2if (Const b)) ent = valor (Const b) ent&amp;quot; &lt;br /&gt;
    by this&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  have &amp;quot;valor_if (bool2if (Var n)) ent = valor_if (VIF n) ent&amp;quot;&lt;br /&gt;
    by (simp only: bool2if.simps(2))&lt;br /&gt;
  also have &amp;quot;… = ent n&amp;quot;&lt;br /&gt;
    by (simp only: valor_if.simps(2))&lt;br /&gt;
  also have &amp;quot;… = valor (Var n) ent&amp;quot;&lt;br /&gt;
    by (simp only: valor.simps(2))&lt;br /&gt;
  finally show &amp;quot;valor_if (bool2if (Var n)) ent = valor (Var n) ent&amp;quot; &lt;br /&gt;
    by this&lt;br /&gt;
next&lt;br /&gt;
  fix e&lt;br /&gt;
  assume HI: &amp;quot;valor_if (bool2if e) ent = valor e ent&amp;quot;&lt;br /&gt;
  have &amp;quot;valor_if (bool2if (Neg e)) ent = &lt;br /&gt;
        valor_if (IF (bool2if e) (CIF False) (CIF True)) ent&amp;quot;&lt;br /&gt;
    by (simp only: bool2if.simps(3))&lt;br /&gt;
  also have &amp;quot;… = (if valor_if (bool2if e) ent &lt;br /&gt;
                   then valor_if (CIF False) ent&lt;br /&gt;
                   else valor_if (CIF True) ent)&amp;quot;&lt;br /&gt;
    by (simp only: valor_if.simps(3))&lt;br /&gt;
  also have &amp;quot;… = (if valor e ent &lt;br /&gt;
                   then False&lt;br /&gt;
                   else True)&amp;quot;&lt;br /&gt;
    by (simp only: HI valor_if.simps(1))&lt;br /&gt;
    also have &amp;quot;… = (¬ valor e ent)&amp;quot; &lt;br /&gt;
    by (rule SMT.z3_rule(52))&lt;br /&gt;
  also have &amp;quot;… = valor (Neg e) ent&amp;quot;&lt;br /&gt;
    by (simp only: valor.simps(3))&lt;br /&gt;
  finally show &amp;quot;valor_if (bool2if (Neg e)) ent = valor (Neg e) ent&amp;quot;&lt;br /&gt;
    by this&lt;br /&gt;
next&lt;br /&gt;
  fix e1 e2&lt;br /&gt;
  assume HI1: &amp;quot;valor_if (bool2if e1) ent = valor e1 ent&amp;quot; and&lt;br /&gt;
         HI2: &amp;quot;valor_if (bool2if e2) ent = valor e2 ent&amp;quot;&lt;br /&gt;
  have &amp;quot;valor_if (bool2if (And e1 e2)) ent = &lt;br /&gt;
        valor_if (IF (bool2if e1) (bool2if e2) (CIF False)) ent&amp;quot;&lt;br /&gt;
    by (simp only: bool2if.simps(4))&lt;br /&gt;
  also have &amp;quot;… = (if valor_if (bool2if e1) ent &lt;br /&gt;
                   then valor_if (bool2if e2) ent&lt;br /&gt;
                   else valor_if (CIF False) ent)&amp;quot;&lt;br /&gt;
    by (simp only: valor_if.simps(3))&lt;br /&gt;
  also have &amp;quot;… = (if valor e1 ent &lt;br /&gt;
                   then valor e2 ent&lt;br /&gt;
                   else False)&amp;quot;&lt;br /&gt;
    by (simp only: HI1 HI2 valor_if.simps(1))&lt;br /&gt;
  also have &amp;quot;… = ((valor e1 ent ∧ valor e2 ent) ∨&lt;br /&gt;
                   (¬(valor e1 ent) ∧ False))&amp;quot;&lt;br /&gt;
    by (rule if_bool_eq_disj)&lt;br /&gt;
    also have &amp;quot;… = ((valor e1 ent ∧ valor e2 ent) ∨ False)&amp;quot;&lt;br /&gt;
    by (simp only: simp_thms(23))&lt;br /&gt;
  also have &amp;quot;… = (valor e1 ent ∧ valor e2 ent)&amp;quot;&lt;br /&gt;
    by (simp only: simp_thms(31))&lt;br /&gt;
  also have &amp;quot;… = valor (And e1 e2) ent&amp;quot;&lt;br /&gt;
    by (simp only: valor.simps(4))&lt;br /&gt;
  finally show &amp;quot;valor_if (bool2if (And e1 e2)) ent = &lt;br /&gt;
                valor (And e1 e2) ent&amp;quot;&lt;br /&gt;
    by this&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración aplicativa detallada de valor_if_bool2if›&lt;br /&gt;
lemma valor_if_bool2if_aplicativa:&lt;br /&gt;
  &amp;quot;valor_if (bool2if e) ent = valor e ent&amp;quot;&lt;br /&gt;
  apply(induct e)&lt;br /&gt;
  apply(simp only: bool2if.simps&lt;br /&gt;
                   valor_if.simps&lt;br /&gt;
                   valor.simps)&lt;br /&gt;
  apply(simp only: bool2if.simps&lt;br /&gt;
                   valor_if.simps&lt;br /&gt;
                   valor.simps)&lt;br /&gt;
  apply(simp only: bool2if.simps)&lt;br /&gt;
  apply(simp only: valor_if.simps)&lt;br /&gt;
  apply(simp only: valor.simps)&lt;br /&gt;
  apply(split if_split)&lt;br /&gt;
  apply(rule conjI)&lt;br /&gt;
  apply(rule impI)&lt;br /&gt;
  apply(rule iffI)&lt;br /&gt;
  apply(rule ccontr, assumption)&lt;br /&gt;
  apply(erule notE, assumption)&lt;br /&gt;
  apply(rule impI)&lt;br /&gt;
  apply(rule iffI, assumption)&lt;br /&gt;
  apply(simp only: TrueI)&lt;br /&gt;
  apply(simp only: bool2if.simps)&lt;br /&gt;
  apply(simp only: valor_if.simps)&lt;br /&gt;
  apply(simp only: valor.simps)&lt;br /&gt;
  apply(split if_split)&lt;br /&gt;
  apply(rule conjI)&lt;br /&gt;
  apply(rule impI)&lt;br /&gt;
  apply(rule iffI)&lt;br /&gt;
  apply(erule conjI, assumption)&lt;br /&gt;
  apply(erule conjunct2)&lt;br /&gt;
  apply(rule impI)&lt;br /&gt;
  apply(rule iffI)&lt;br /&gt;
  apply (rule FalseE, assumption)&lt;br /&gt;
  apply(erule notE)&lt;br /&gt;
  apply(erule conjunct1)&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
section ‹Formas normales›&lt;br /&gt;
&lt;br /&gt;
subsection ‹Definición de es_normal›&lt;br /&gt;
&lt;br /&gt;
text ‹------------------------------------------------------------------ &lt;br /&gt;
  Ejercicio 6. Un expresión if, e, está en forma normal si para cada&lt;br /&gt;
  subexpresión de e de la forma (if c e1 e2) se tiene que c es una&lt;br /&gt;
  constante o una variable.&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     es_normal :: exp_if ⇒ bool&lt;br /&gt;
  tal que (es_normal e) se verifica si e está en forma normal.&lt;br /&gt;
  ---------------------------------------------------------------------›&lt;br /&gt;
&lt;br /&gt;
fun es_normal :: &amp;quot;exp_if ⇒ bool&amp;quot; where&lt;br /&gt;
   &amp;quot;es_normal (CIF _)            = True&amp;quot;&lt;br /&gt;
 | &amp;quot;es_normal (VIF _)            = True&amp;quot;&lt;br /&gt;
 | &amp;quot;es_normal (IF (CIF _) e1 e2) = (es_normal e1 ∧ es_normal e2)&amp;quot;&lt;br /&gt;
 | &amp;quot;es_normal (IF (VIF _) e1 e2) = (es_normal e1 ∧ es_normal e2)&amp;quot;&lt;br /&gt;
 | &amp;quot;es_normal _                  = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
subsection ‹Definición de normal›&lt;br /&gt;
&lt;br /&gt;
text ‹------------------------------------------------------------------ &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     normal :: exp_if ⇒ exp_if&lt;br /&gt;
  tal que (normal e) es una expresión if en forma normal equivalente a&lt;br /&gt;
  la expresión e.&lt;br /&gt;
  --------------------------------------------------------------------- ›&lt;br /&gt;
&lt;br /&gt;
fun normalAux :: &amp;quot;exp_if ⇒ exp_if ⇒ exp_if ⇒ exp_if&amp;quot; where&lt;br /&gt;
   &amp;quot;normalAux (CIF b) e1 e2 = IF (CIF b) e1 e2&amp;quot;&lt;br /&gt;
 | &amp;quot;normalAux (VIF n) e1 e2 = IF (VIF n) e1 e2&amp;quot;&lt;br /&gt;
 | &amp;quot;normalAux (IF a a1 a2) e1 e2 = &lt;br /&gt;
      normalAux a (normalAux a1 e1 e2) (normalAux a2 e1 e2)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun normal :: &amp;quot;exp_if ⇒ exp_if&amp;quot; where&lt;br /&gt;
   &amp;quot;normal (CIF b)      = CIF b&amp;quot;&lt;br /&gt;
 | &amp;quot;normal (VIF n)      = VIF n&amp;quot;&lt;br /&gt;
 | &amp;quot;normal (IF e e1 e2) = normalAux e (normal e1) (normal e2)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
section ‹Corrección de la normalización›&lt;br /&gt;
&lt;br /&gt;
text ‹------------------------------------------------------------------&lt;br /&gt;
  Ejercicio 8. Demostrar que la forma normal de una expresión if es&lt;br /&gt;
  equivalente a la expresión; es decir,  &lt;br /&gt;
     valor_if (normal e) i = valor_if e i&lt;br /&gt;
  ---------------------------------------------------------------------›&lt;br /&gt;
&lt;br /&gt;
subsection ‹Lema auxiliar valor_if_normalAux›&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración estructurada de valor_if_normalAux›&lt;br /&gt;
lemma valor_if_normalAux_E:&lt;br /&gt;
  &amp;quot;valor_if (normalAux e e1 e2) ent = valor_if (IF e e1 e2) ent&amp;quot;&lt;br /&gt;
proof (induct e arbitrary: e1 e2)&lt;br /&gt;
  case (CIF x)&lt;br /&gt;
  then show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case (VIF x)&lt;br /&gt;
  then show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case (IF e1 e2 e3)&lt;br /&gt;
  then show ?case by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración automática de valor_if_normalAux›&lt;br /&gt;
lemma valor_if_normalAux_A: &lt;br /&gt;
  &amp;quot;valor_if (normalAux e e1 e2) ent = valor_if (IF e e1 e2) ent&amp;quot;&lt;br /&gt;
  by (induct e arbitrary: e1 e2) simp_all&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración declarativa detallada de valor_if_normalAux›&lt;br /&gt;
&lt;br /&gt;
lemma if_if:&lt;br /&gt;
  fixes A and A1 and A2 and C1 and C2 :: bool&lt;br /&gt;
  shows&lt;br /&gt;
  &amp;quot;(if A&lt;br /&gt;
    then (if A1 then C1 else C2)&lt;br /&gt;
    else (if A2 then C1 else C2)) =&lt;br /&gt;
   (if (if A then A1 else A2)&lt;br /&gt;
    then C1&lt;br /&gt;
    else C2)&amp;quot;  &lt;br /&gt;
  by (cases A; cases A1; cases A2) &lt;br /&gt;
     (simp_all only: if_True if_False)&lt;br /&gt;
&lt;br /&gt;
lemma valor_if_IF:&lt;br /&gt;
  &amp;quot;valor_if (IF a (IF a1 c1 c2) (IF a2 c1 c2)) ent =&lt;br /&gt;
   valor_if (IF (IF a a1 a2) c1 c2) ent&amp;quot;&lt;br /&gt;
  by (simp only: valor_if.simps(3) if_if)&lt;br /&gt;
&lt;br /&gt;
lemma valor_if_normalAux: &lt;br /&gt;
  &amp;quot;valor_if (normalAux e e1 e2) ent = valor_if (IF e e1 e2) ent&amp;quot;&lt;br /&gt;
proof (induct e arbitrary: e1 e2)&lt;br /&gt;
  fix b e1 e2&lt;br /&gt;
  show &amp;quot;valor_if (normalAux (CIF b) e1 e2) ent = &lt;br /&gt;
        valor_if (IF (CIF b) e1 e2) ent&amp;quot;  &lt;br /&gt;
    by (simp only: normalAux.simps(1)) &lt;br /&gt;
next&lt;br /&gt;
  fix n e1 e2&lt;br /&gt;
  show &amp;quot;valor_if (normalAux (VIF n) e1 e2) ent = &lt;br /&gt;
        valor_if (IF (VIF n) e1 e2) ent&amp;quot; &lt;br /&gt;
    by (simp only: normalAux.simps(2)) &lt;br /&gt;
next&lt;br /&gt;
  fix a a1 a2 c1 c2&lt;br /&gt;
  assume HI:  &amp;quot;⋀e1 e2. valor_if (normalAux a e1 e2) ent = &lt;br /&gt;
                        valor_if (IF a e1 e2) ent&amp;quot; and&lt;br /&gt;
         HI1: &amp;quot;⋀e1 e2. valor_if (normalAux a1 e1 e2) ent = &lt;br /&gt;
                        valor_if (IF a1 e1 e2) ent&amp;quot; and&lt;br /&gt;
         HI2: &amp;quot;⋀e1 e2. valor_if (normalAux a2 e1 e2) ent = &lt;br /&gt;
                        valor_if (IF a2 e1 e2) ent&amp;quot;&lt;br /&gt;
  show &amp;quot;valor_if (normalAux (IF a a1 a2) c1 c2) ent =&lt;br /&gt;
        valor_if (IF (IF a a1 a2) c1 c2) ent&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;valor_if (normalAux (IF a a1 a2) c1 c2) ent =&lt;br /&gt;
          valor_if (normalAux a &lt;br /&gt;
                              (normalAux a1 c1 c2) &lt;br /&gt;
                              (normalAux a2 c1 c2)) ent&amp;quot; &lt;br /&gt;
      by (simp only: normalAux.simps(3))&lt;br /&gt;
    also have &amp;quot;… = valor_if (IF a &lt;br /&gt;
                                 (normalAux a1 c1 c2) &lt;br /&gt;
                                 (normalAux a2 c1 c2)) ent&amp;quot; &lt;br /&gt;
      by (simp only: HI)&lt;br /&gt;
    also have &amp;quot;… = (if valor_if a ent &lt;br /&gt;
                     then valor_if (normalAux a1 c1 c2) ent&lt;br /&gt;
                     else valor_if (normalAux a2 c1 c2) ent)&amp;quot; &lt;br /&gt;
      by (simp only: valor_if.simps(3))&lt;br /&gt;
    also have &amp;quot;… = (if valor_if a ent&lt;br /&gt;
                     then valor_if (IF a1 c1 c2) ent&lt;br /&gt;
                     else valor_if (IF a2 c1 c2) ent)&amp;quot; &lt;br /&gt;
      by (simp only: HI1 HI2)&lt;br /&gt;
    also have &amp;quot;… = valor_if (IF a (IF a1 c1 c2) (IF a2 c1 c2)) ent&amp;quot;&lt;br /&gt;
      by (simp only: valor_if.simps(3))&lt;br /&gt;
    also have &amp;quot;… = valor_if (IF (IF a a1 a2) c1 c2) ent&amp;quot; &lt;br /&gt;
      by (simp only: valor_if_IF)    &lt;br /&gt;
    finally show ?thesis &lt;br /&gt;
      by this&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración aplicativa detallada de valor_if_normalAux›  &lt;br /&gt;
  lemma valor_if_normalAux_aplicativo:&lt;br /&gt;
  &amp;quot;∀e1 e2. valor_if (normalAux e e1 e2) ent = valor_if (IF e e1 e2) ent&amp;quot;&lt;br /&gt;
  apply (induct e)&lt;br /&gt;
    apply (rule allI)+&lt;br /&gt;
    apply (simp only: normalAux.simps(1))&lt;br /&gt;
   apply (rule allI)+&lt;br /&gt;
   apply (simp only: normalAux.simps(2))&lt;br /&gt;
  apply (rule allI)+&lt;br /&gt;
  apply (simp only: normalAux.simps(3))&lt;br /&gt;
  apply (simp only: valor_if.simps(3))&lt;br /&gt;
  apply (case_tac &amp;quot;valor_if e1 ent&amp;quot;)&lt;br /&gt;
   apply (simp only: if_True)&lt;br /&gt;
  apply (simp only: if_False)&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
subsection ‹Demostraciones del teorema valor_if_normal›&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración estructurada del teorema valor_if_normal›&lt;br /&gt;
theorem valor_if_normal_E:&lt;br /&gt;
  &amp;quot;valor_if (normal b) ent = valor_if b ent&amp;quot;&lt;br /&gt;
proof (induct b)&lt;br /&gt;
  case (CIF x)&lt;br /&gt;
  then show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case (VIF x)&lt;br /&gt;
  then show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case (IF b1 b2 b3)&lt;br /&gt;
  then show ?case by (simp add: valor_if_normalAux)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración automática del teorema valor_if_normal›&lt;br /&gt;
theorem valor_if_normal_A:&lt;br /&gt;
  &amp;quot;valor_if (normal b) ent = valor_if b ent&amp;quot;&lt;br /&gt;
  by (induct b) (simp_all add: valor_if_normalAux)&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración declarativa detallada del teorema valor_if_normal›&lt;br /&gt;
theorem valor_if_normal: &lt;br /&gt;
  &amp;quot;valor_if (normal b) ent = valor_if b ent&amp;quot;&lt;br /&gt;
proof (induct b)&lt;br /&gt;
  fix b&lt;br /&gt;
  show &amp;quot;valor_if (normal (CIF b)) ent = valor_if (CIF b) ent&amp;quot;&lt;br /&gt;
    by (simp only: normal.simps(1) valor_if.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  show &amp;quot;valor_if (normal (VIF n)) ent = valor_if (VIF n) ent&amp;quot; &lt;br /&gt;
    by (simp only: normal.simps(2) valor_if.simps(2))&lt;br /&gt;
next&lt;br /&gt;
  fix e e1 e2&lt;br /&gt;
  assume HI:  &amp;quot;valor_if (normal e) ent = valor_if e ent&amp;quot; and&lt;br /&gt;
         HI1: &amp;quot;valor_if (normal e1) ent = valor_if e1 ent&amp;quot; and&lt;br /&gt;
         HI2: &amp;quot;valor_if (normal e2) ent = valor_if e2 ent&amp;quot;&lt;br /&gt;
  show &amp;quot;valor_if (normal (IF e e1 e2)) ent = &lt;br /&gt;
        valor_if (IF e e1 e2) ent&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;valor_if (normal (IF e e1 e2)) ent = &lt;br /&gt;
          valor_if (normalAux e (normal e1) (normal e2)) ent&amp;quot; &lt;br /&gt;
      by (simp only: normal.simps(3))&lt;br /&gt;
    also have &amp;quot;… = valor_if (IF e (normal e1) (normal e2)) ent&amp;quot; &lt;br /&gt;
      by (simp only: valor_if_normalAux)&lt;br /&gt;
    also have &amp;quot;… = (if (valor_if e ent) &lt;br /&gt;
                     then (valor_if (normal e1) ent) &lt;br /&gt;
                     else (valor_if (normal e2) ent))&amp;quot; &lt;br /&gt;
      by (simp only: valor_if.simps(3))&lt;br /&gt;
    also have &amp;quot;… = (if (valor_if e ent) &lt;br /&gt;
                     then (valor_if e1 ent) &lt;br /&gt;
                     else (valor_if e2 ent))&amp;quot; &lt;br /&gt;
      by (simp only: HI1 HI2)&lt;br /&gt;
    also have &amp;quot;… = valor_if (IF e e1 e2) ent&amp;quot; &lt;br /&gt;
      by (simp only: valor_if.simps(3))&lt;br /&gt;
    finally show ?thesis &lt;br /&gt;
      by this&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración aplicativa detallada del teorema valor_if_normal›&lt;br /&gt;
&lt;br /&gt;
lemma valor_if_normal_aplicativo:&lt;br /&gt;
  &amp;quot;valor_if (normal b) ent = valor_if b ent&amp;quot;&lt;br /&gt;
  apply (induct b)&lt;br /&gt;
  apply (simp only: normal.simps(1))&lt;br /&gt;
   apply (simp only: normal.simps(2))&lt;br /&gt;
  apply (simp only: normal.simps(3))&lt;br /&gt;
  apply (simp only: valor_if_normalAux_aplicativo)&lt;br /&gt;
  apply (simp only: valor_if.simps(3))&lt;br /&gt;
  done &lt;br /&gt;
&lt;br /&gt;
text ‹------------------------------------------------------------------ &lt;br /&gt;
  Ejercicio 9. Demostrar que para toda expresión if e, (normal e) está&lt;br /&gt;
  en forma normal.&lt;br /&gt;
  ---------------------------------------------------------------------›&lt;br /&gt;
&lt;br /&gt;
subsection ‹Lema auxiliar es_normal_normalAux›&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración estructurada de es_normal_normalAux›&lt;br /&gt;
lemma es_normal_normalAux_E:&lt;br /&gt;
  &amp;quot;es_normal (normalAux e e1 e2) = (es_normal e1 ∧ es_normal e2)&amp;quot;&lt;br /&gt;
proof (induct e arbitrary: e1 e2)&lt;br /&gt;
  case (CIF x)&lt;br /&gt;
  then show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case (VIF x)&lt;br /&gt;
  then show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case (IF e1 e2 e3)&lt;br /&gt;
  then show ?case by simp&lt;br /&gt;
qed &lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración automática de es_normal_normalAux›&lt;br /&gt;
lemma es_normal_normalAux_A:&lt;br /&gt;
  &amp;quot;es_normal (normalAux e e1 e2) = (es_normal e1 ∧ es_normal e2)&amp;quot;&lt;br /&gt;
  by (induct e arbitrary: e1 e2) simp_all&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración declarativa detallada de es_normal_normalAux›&lt;br /&gt;
lemma es_normal_normalAux:&lt;br /&gt;
  &amp;quot;es_normal (normalAux e e1 e2) = (es_normal e1 ∧ es_normal e2)&amp;quot;&lt;br /&gt;
proof (induct e arbitrary: e1 e2)&lt;br /&gt;
  fix b e1 e2&lt;br /&gt;
  have &amp;quot;es_normal (normalAux (CIF b) e1 e2) = &lt;br /&gt;
        es_normal (IF (CIF b) e1 e2)&amp;quot;&lt;br /&gt;
    by (simp only: normalAux.simps(1))&lt;br /&gt;
  also have &amp;quot;… =  (es_normal e1 ∧ es_normal e2)&amp;quot;&lt;br /&gt;
    by (simp only: es_normal.simps(3))&lt;br /&gt;
  finally show &amp;quot;es_normal (normalAux (CIF b) e1 e2) =&lt;br /&gt;
                (es_normal e1 ∧ es_normal e2)&amp;quot;&lt;br /&gt;
    by this &lt;br /&gt;
next&lt;br /&gt;
  fix n e1 e2&lt;br /&gt;
  have &amp;quot;es_normal (normalAux (VIF n) e1 e2) = &lt;br /&gt;
        es_normal (IF (VIF n) e1 e2)&amp;quot;&lt;br /&gt;
    by (simp only: normalAux.simps(2))&lt;br /&gt;
  also have &amp;quot;… =  (es_normal e1 ∧ es_normal e2)&amp;quot;&lt;br /&gt;
    by (simp only: es_normal.simps(4))&lt;br /&gt;
  finally show &amp;quot;es_normal (normalAux (VIF n) e1 e2) =&lt;br /&gt;
                (es_normal e1 ∧ es_normal e2)&amp;quot;&lt;br /&gt;
    by this &lt;br /&gt;
next&lt;br /&gt;
  fix a a1 a2 e1 e2&lt;br /&gt;
  assume &lt;br /&gt;
    HI:  &amp;quot;⋀e1 e2. es_normal (normalAux a e1 e2) = &lt;br /&gt;
                  (es_normal e1 ∧ es_normal e2)&amp;quot; and&lt;br /&gt;
    HI1: &amp;quot;⋀e1 e2. es_normal (normalAux a1 e1 e2) = &lt;br /&gt;
                  (es_normal e1 ∧ es_normal e2)&amp;quot; and&lt;br /&gt;
    HI2: &amp;quot;⋀e1 e2. es_normal (normalAux a2 e1 e2) = &lt;br /&gt;
                  (es_normal e1 ∧ es_normal e2)&amp;quot;&lt;br /&gt;
  have &amp;quot;es_normal (normalAux (IF a a1 a2) e1 e2) = &lt;br /&gt;
        es_normal (normalAux a &lt;br /&gt;
                             (normalAux a1 e1 e2)&lt;br /&gt;
                             (normalAux a2 e1 e2))&amp;quot; &lt;br /&gt;
    by (simp only: normalAux.simps(3))&lt;br /&gt;
  also have &amp;quot;… = (es_normal (normalAux a1 e1 e2) ∧&lt;br /&gt;
                   es_normal (normalAux a2 e1 e2))&amp;quot;&lt;br /&gt;
    by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;… = ((es_normal e1 ∧ es_normal e2) ∧&lt;br /&gt;
                   (es_normal e1 ∧ es_normal e2))&amp;quot;&lt;br /&gt;
    by (simp only: HI1 HI2)&lt;br /&gt;
  also have &amp;quot;… = (es_normal e1 ∧ es_normal e2)&amp;quot;&lt;br /&gt;
    by (simp only: conj_absorb)&lt;br /&gt;
  finally show &amp;quot;es_normal (normalAux (IF a a1 a2) e1 e2) = &lt;br /&gt;
               (es_normal e1 ∧ es_normal e2)&amp;quot; &lt;br /&gt;
    by this&lt;br /&gt;
    qed&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración aplicativa detallada de es_normal_normalAux›&lt;br /&gt;
lemma es_normal_normalAux_aplicativa:&lt;br /&gt;
  &amp;quot;es_normal (normalAux e e1 e2) = (es_normal e1 ∧ es_normal e2)&amp;quot;    &lt;br /&gt;
  apply(induct e arbitrary: e1 e2)&lt;br /&gt;
  apply(simp only: normalAux.simps&lt;br /&gt;
                   es_normal.simps)+&lt;br /&gt;
  apply(rule iffI)&lt;br /&gt;
  apply(erule conjunct2)&lt;br /&gt;
  apply(rule conjI)&lt;br /&gt;
  apply assumption+&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
subsection ‹Demostraciones del teorema es_normal_normal›&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración estructurada del teorema es_normal_normal›&lt;br /&gt;
theorem es_normal_normal_E: &lt;br /&gt;
  &amp;quot;es_normal (normal b)&amp;quot;&lt;br /&gt;
proof (induct b)&lt;br /&gt;
  case (CIF x)&lt;br /&gt;
  then show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case (VIF x)&lt;br /&gt;
  then show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case (IF b1 b2 b3)&lt;br /&gt;
  then show ?case by (simp add: es_normal_normalAux)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración automática del teorema es_normal_normal›&lt;br /&gt;
theorem es_normal_normal_A:&lt;br /&gt;
  &amp;quot;es_normal (normal b)&amp;quot;&lt;br /&gt;
  by (induct b) (simp_all add: es_normal_normalAux)&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración declarativa detallada del teorema &lt;br /&gt;
  es_normal_normal›&lt;br /&gt;
theorem es_normal_normal:&lt;br /&gt;
  &amp;quot;es_normal (normal b)&amp;quot;&lt;br /&gt;
proof (induct b)&lt;br /&gt;
  fix b&lt;br /&gt;
  show &amp;quot;es_normal (normal (CIF b))&amp;quot;&lt;br /&gt;
    by (simp only: normal.simps(1) es_normal.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  show &amp;quot;es_normal (normal (VIF n))&amp;quot; &lt;br /&gt;
    by (simp only: normal.simps(2) es_normal.simps(2))&lt;br /&gt;
next&lt;br /&gt;
  fix e e1 e2&lt;br /&gt;
  assume &amp;quot;es_normal (normal e)&amp;quot;&lt;br /&gt;
         &amp;quot;es_normal (normal e1)&amp;quot;&lt;br /&gt;
         &amp;quot;es_normal (normal e2)&amp;quot;&lt;br /&gt;
  then show &amp;quot;es_normal (normal (IF e e1 e2))&amp;quot; &lt;br /&gt;
    by (simp only: normal.simps(3) es_normal_normalAux)&lt;br /&gt;
    qed&lt;br /&gt;
&lt;br /&gt;
subsubsection ‹Demostración aplicativa detallada del teorema &lt;br /&gt;
  es_normal_normal›&lt;br /&gt;
lemma es_normal_normal_aplicativa: &lt;br /&gt;
  &amp;quot;es_normal (normal b)&amp;quot;&lt;br /&gt;
  apply(induct b)&lt;br /&gt;
  apply(simp only: normal.simps(1))&lt;br /&gt;
  apply(simp only: es_normal.simps(1))&lt;br /&gt;
  apply(simp only: normal.simps(2))&lt;br /&gt;
  apply(simp only: es_normal.simps(2))&lt;br /&gt;
  apply(simp only: normal.simps)&lt;br /&gt;
  apply(simp only: es_normal_normalAux_aplicativa)&lt;br /&gt;
  done&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
section ‹Definición de bool2ifN›&lt;br /&gt;
&lt;br /&gt;
text ‹------------------------------------------------------------------ &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     bool2ifN :: exp_booleana ⇒ exp_if&lt;br /&gt;
  tal que (bool2ifN e) es una expresión if en forma normal equivalente a&lt;br /&gt;
  la expresión Booleana e.&lt;br /&gt;
  ---------------------------------------------------------------------›&lt;br /&gt;
&lt;br /&gt;
definition bool2ifN :: &amp;quot;exp_booleana ⇒ exp_if&amp;quot; where&lt;br /&gt;
  &amp;quot;bool2ifN e ≡ normal (bool2if e)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
section ‹Lema es_normal_bool2ifN›&lt;br /&gt;
&lt;br /&gt;
text ‹------------------------------------------------------------------ &lt;br /&gt;
  Ejercicio 11. Demostrar que para toda expresión booleana e, &lt;br /&gt;
  (bool2ifN e) está en forma normal.&lt;br /&gt;
  ---------------------------------------------------------------------›&lt;br /&gt;
&lt;br /&gt;
subsection ‹Demostración automática de es_normal_bool2ifN›&lt;br /&gt;
theorem es_normal_bool2ifN_A: &lt;br /&gt;
  &amp;quot;es_normal (bool2ifN e)&amp;quot;&lt;br /&gt;
   by (simp only:bool2ifN_def es_normal_normal) &lt;br /&gt;
&lt;br /&gt;
subsection ‹Demostración declarativa detallada de es_normal_bool2ifN›&lt;br /&gt;
&lt;br /&gt;
lemma es_normal_bool2ifN: &lt;br /&gt;
  &amp;quot;es_normal (bool2ifN e)&amp;quot;&lt;br /&gt;
  proof-&lt;br /&gt;
  have &amp;quot;bool2ifN e = normal (bool2if e)&amp;quot; by (simp only:bool2ifN_def)&lt;br /&gt;
  then show &amp;quot;es_normal (bool2ifN e)&amp;quot; by &lt;br /&gt;
   (simp only:es_normal_normal) &lt;br /&gt;
  qed  &lt;br /&gt;
&lt;br /&gt;
subsection ‹Demostración aplicativa detallada de es_normal_bool2ifN›&lt;br /&gt;
&lt;br /&gt;
lemma es_normal_bool2ifN_aplicativa: &lt;br /&gt;
  &amp;quot;es_normal (bool2ifN e)&amp;quot;  &lt;br /&gt;
  apply (simp only:bool2ifN_def)&lt;br /&gt;
  apply  (simp only:es_normal_normal) &lt;br /&gt;
  done&lt;br /&gt;
  &lt;br /&gt;
section ‹Lema valor_if_bool2ifN›&lt;br /&gt;
&lt;br /&gt;
text ‹------------------------------------------------------------------ &lt;br /&gt;
  Ejercicio 12. Demostrar que para toda expresión booleana e, &lt;br /&gt;
  (bool2ifN e) es equivalente a e.&lt;br /&gt;
  ---------------------------------------------------------------------›&lt;br /&gt;
&lt;br /&gt;
subsection ‹Demostración automática de valor_if_bool2ifN›&lt;br /&gt;
theorem valor_if_bool2ifN_A: &lt;br /&gt;
  &amp;quot;valor_if (bool2ifN e) ent = valor e ent&amp;quot;&lt;br /&gt;
    by (simp only: bool2ifN_def valor_if_bool2if valor_if_normal)&lt;br /&gt;
&lt;br /&gt;
subsection ‹Demostración declarativa detallada de valor_if_bool2ifN›&lt;br /&gt;
&lt;br /&gt;
lemma valor_if_bool2ifN:&lt;br /&gt;
  &amp;quot;valor_if (bool2ifN e) ent = valor e ent&amp;quot;&lt;br /&gt;
   proof-&lt;br /&gt;
   have &amp;quot;bool2ifN e ≡ normal (bool2if e)&amp;quot; by (simp only:bool2ifN_def)&lt;br /&gt;
   then have &amp;quot;valor_if (bool2ifN e) ent = &lt;br /&gt;
              valor_if (normal (bool2if e)) ent&amp;quot; by (simp only:)&lt;br /&gt;
    also have &amp;quot;… = valor_if (bool2if e) ent&amp;quot; &lt;br /&gt;
    by (simp only: valor_if_normal)&lt;br /&gt;
    also have &amp;quot;… = valor e ent&amp;quot; by (simp only:valor_if_bool2if)&lt;br /&gt;
    finally show  &amp;quot;valor_if (bool2ifN e) ent = valor e ent&amp;quot; by this&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
subsection ‹Demostración aplicativa detallada de valor_if_bool2ifN›&lt;br /&gt;
&lt;br /&gt;
lemma valor_if_bool2ifN_aplicativa:&lt;br /&gt;
 &amp;quot;valor_if (bool2ifN e) ent = valor e ent&amp;quot;&lt;br /&gt;
 apply (simp only:bool2ifN_def)&lt;br /&gt;
 apply (simp only: valor_if_normal)&lt;br /&gt;
 apply  (simp only:valor_if_bool2if)&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mjoseh</name></author>
		
	</entry>
</feed>