<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/RA2013/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Diecabmen1</id>
	<title>Razonamiento automático (2013-14) - Contribuciones del usuario [es]</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/RA2013/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Diecabmen1"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php/Especial:Contribuciones/Diecabmen1"/>
	<updated>2026-07-18T04:07:51Z</updated>
	<subtitle>Contribuciones del usuario</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=538</id>
		<title>Relación 12</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=538"/>
		<updated>2014-02-11T01:42:32Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R12: Representación de fórmulas proposicionales mediante&lt;br /&gt;
  polinomios *}&lt;br /&gt;
&lt;br /&gt;
theory R12&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El objetivo de esta relación es definir un procedimiento para&lt;br /&gt;
  transformar fórmulas proposicionales (construidas con ⊤, ∧ y ⊕) en&lt;br /&gt;
  polinomios de la forma&lt;br /&gt;
     (p₁ ∧ … ∧ pₙ) ⊕ … ⊕ (q₁ ∧ … ∧ qₘ)&lt;br /&gt;
  y demostrar que, para cualquier interpretación I, el valor de las&lt;br /&gt;
  fórmulas coincide con la de su correspondiente polinomio. *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Las fórmulas proposicionales pueden definirse mediante&lt;br /&gt;
  las siguientes reglas:&lt;br /&gt;
  · ⊤ es una fórmula proposicional&lt;br /&gt;
  · Las variables proposicionales p_1, p_2, … son fórmulas&lt;br /&gt;
    proposicionales,&lt;br /&gt;
  · Si F y G son fórmulas proposicionales, entonces (F ∧ G) y (F ⊕ G)&lt;br /&gt;
    también lo son. &lt;br /&gt;
  donde ⊤ es una fórmula que siempre es verdadera, ∧ es la conjunción y&lt;br /&gt;
  ⊕ es la disyunción exclusiva. &lt;br /&gt;
&lt;br /&gt;
  Definir el tipo de datos form para representar las fórmulas&lt;br /&gt;
  proposicionales usando &lt;br /&gt;
  · T en lugar de ⊤,&lt;br /&gt;
  · (Var i) en lugar de p_i,&lt;br /&gt;
  · (And F G) en lugar de (F ∧ G) y&lt;br /&gt;
  · (Xor F G) en lugar de (F ⊕ G).&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
datatype form = T | Var nat | And form form | Xor form form&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Los siguientes ejemplos de fórmulas&lt;br /&gt;
     form1 = p0 ⊕ ⊤&lt;br /&gt;
     form2 = (p0 ⊕ p1) ⊕ (p0 ∧ p1)&lt;br /&gt;
  es usará en lo que sigue.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation form1 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form1 ≡ Xor (Var 0) T&amp;quot;&lt;br /&gt;
abbreviation form2 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form2 ≡ Xor (Xor (Var 0) (Var 1)) (And (Var 0) (Var 1))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     xor :: bool ⇒ bool ⇒ bool&lt;br /&gt;
  tal que (xor p q) es el valor de la disyunción exclusiva de p y q. Por&lt;br /&gt;
  ejemplo,&lt;br /&gt;
     xor False True = True&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
definition xor :: &amp;quot;bool ⇒ bool ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;xor x y ≡ (x∧¬y)∨(¬x∧y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Una interpretación es una aplicación de los naturales en&lt;br /&gt;
  los booleanos. Definir las siguientes interpretaciones&lt;br /&gt;
          | p0 | p1 | p2 | p3 | ...&lt;br /&gt;
     int1 | F  | F  | F  | F  | ...&lt;br /&gt;
     int2 | F  | V  | F  | F  | ...&lt;br /&gt;
     int3 | V  | F  | F  | F  | ...&lt;br /&gt;
     int3 | V  | V  | F  | F  | ...&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation int1 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int1 x ≡ False&amp;quot;&lt;br /&gt;
abbreviation int2 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int2 ≡ int1 (1 := True)&amp;quot;&lt;br /&gt;
abbreviation int3 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int3 ≡ int1 (0 := True)&amp;quot;&lt;br /&gt;
abbreviation int4 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int4 ≡ int1 (0 := True, 1 := True)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Dada una interpretación I, el valor de de una fórmula F&lt;br /&gt;
  repecto de I, I(F), se define por&lt;br /&gt;
  · T, si F es ⊤;&lt;br /&gt;
  · I(n), si F es p_n;&lt;br /&gt;
  · I(G) ∧ I(H), si F es (G ∧ H);&lt;br /&gt;
  · I(G) ⊕ I(H), si F es (G ⊕ H).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     valorF :: (nat ⇒ bool) ⇒ form ⇒ bool&lt;br /&gt;
  tal que (valorF i f) es el valor de la fórmula f respecto de la&lt;br /&gt;
  interpretación i. Por ejemplo, &lt;br /&gt;
     valorF int1 form1 = True&lt;br /&gt;
     valorF int3 form1 = False&lt;br /&gt;
     valorF int1 form2 = False&lt;br /&gt;
     valorF int2 form2 = True&lt;br /&gt;
     valorF int3 form2 = True&lt;br /&gt;
     valorF int4 form2 = True&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorF :: &amp;quot;(nat ⇒ bool) ⇒ form ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorF i T = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Var n) = i n&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (And G H) = ((valorF i G) ∧ (valorF i H))&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Xor G H) = xor (valorF i G) (valorF i H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un monomio es una lista de números naturales y se puede&lt;br /&gt;
  interpretar como la conjunción de variables proposionales cuyos&lt;br /&gt;
  índices son los números de la lista. Por ejemplo, el monomio [0,2,1]&lt;br /&gt;
  se interpreta como la fórmula (p0 ∧ p2 ∧ p1).  &lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formM :: nat list ⇒ form&lt;br /&gt;
  tal que (formM m) es la fórmula correspondiente al monomio. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     formM [0,2,1] = And (Var 0) (And (Var 2) (And (Var 1) T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun formM :: &amp;quot;nat list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formM [] = T&amp;quot;&lt;br /&gt;
| &amp;quot;formM (x#xs) = And (Var x) (formM xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;formM [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir, por recursión, la función&lt;br /&gt;
     valorM :: (nat ⇒ bool) ⇒ nat list ⇒ bool&lt;br /&gt;
  tal que (valorM i m) es el valor de la fórmula representada por el&lt;br /&gt;
  monomio m en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorM int1 [0,2,1]                            = False&lt;br /&gt;
     valorM (int1(0:=True,1:=True,2:=True)) [0,2,1] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo monomio m, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i m = valorF i (formM m)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorM :: &amp;quot;(nat ⇒ bool) ⇒ nat list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorM i [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorM i (x#xs) = ((valorF i (Var x)) ∧ (valorM i xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;valorM int1 [0,2,1]&amp;quot;&lt;br /&gt;
value &amp;quot;valorM (int1(0:=True,1:=True,2:=True)) [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorM:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot;&lt;br /&gt;
by (induct m) auto&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma correccion_valorM2:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot; (is &amp;quot;?P i m&amp;quot;)&lt;br /&gt;
proof (induct m)&lt;br /&gt;
  show &amp;quot;?P i []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a m&lt;br /&gt;
  assume HI: &amp;quot;?P i m&amp;quot;&lt;br /&gt;
  then show &amp;quot;?P i (a#m)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Un polinomio es una lista de monomios y se puede&lt;br /&gt;
  interpretar como la disyunción exclusiva de los monomios. Por ejemplo, &lt;br /&gt;
  el polinomio [[0,2,1],[1,3]] se interpreta como la fórmula&lt;br /&gt;
  (p0 ∧ p2 ∧ p1) ⊕ (p1 ∧ p3).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formP :: nat list list ⇒ form&lt;br /&gt;
  tal que (formP p) es la fórmula correspondiente al polinomio p. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     formP [[1,2],[3]]&lt;br /&gt;
     = Xor (And (Var 1) (And (Var 2) T)) (Xor (And (Var 3) T) (Xor T T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun formP :: &amp;quot;nat list list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formP [] = Xor T T&amp;quot;&lt;br /&gt;
| &amp;quot;formP (x#xs) = Xor (formM x) (formP xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;formP [[1,2],[3]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     valorP :: (nat ⇒ bool) ⇒ nat list list ⇒ bool&lt;br /&gt;
  tal que (valorP i p) es el valor de la fórmula representada por el&lt;br /&gt;
  polinomio p en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorP (int1(1:=True,3:=True)) [[0,2,1],[1,3]] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo polinomio p, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i p = valorF i (formP p)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorP :: &amp;quot;(nat ⇒ bool) ⇒ nat list list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorP i [] = xor True True&amp;quot;&lt;br /&gt;
| &amp;quot;valorP i (x#xs) = xor (valorM i x) (valorP i xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;valorP (int1(1:=True,3:=True)) [[0,2,1],[1,3]]&amp;quot;&lt;br /&gt;
lemma correccion_valorP:&lt;br /&gt;
  &amp;quot;valorP i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
by (induct p) (auto simp add:correccion_valorM)&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     productoM :: nat list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (productoM m p) es el producto del monomio p por el polinomio&lt;br /&gt;
  p. Por  ejemplo, &lt;br /&gt;
     productoM [1,3] [[1,2,4],[7],[4,1]] &lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun productoM :: &amp;quot;nat list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;productoM m [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;productoM m (x#xs) = [m@x] @ (productoM m xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;productoM [1,3] [[1,2,4],[7],[4,1]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos monomios es la conjunción de sus valores.&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma valorM_conc: &lt;br /&gt;
  &amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;  (is &amp;quot;?P i xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P i [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P i xs ys&amp;quot;&lt;br /&gt;
  then show &amp;quot;?P i (a#xs) ys&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de un monomio por un polinomio es la conjunción de sus&lt;br /&gt;
  valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_productoM: &lt;br /&gt;
  &amp;quot;valorP i (productoM m p) = (valorM i m ∧ valorP i p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Definir la función&lt;br /&gt;
     producto :: nat list list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (producto p q) es el producto de los polinomios p y q. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     producto [[1,3],[2]] [[1,2,4],[7],[4,1]]&lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1],[2,1,2,4],[2,7],[2,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun producto :: &amp;quot;nat list list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;producto p q = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos polinomios es la disyunción exclusiva de &lt;br /&gt;
  sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorP_conc: &lt;br /&gt;
  &amp;quot;valorP i (xs @ ys) = (xor (valorP i xs) (valorP i ys))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de dos polinomios es la conjunción de sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_producto: &lt;br /&gt;
  &amp;quot;valorP i (producto p q) = (valorP i p ∧ valorP i q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Definir la función&lt;br /&gt;
     polinomio :: form ⇒ nat list list&lt;br /&gt;
  tal que (polinomio f) es el polinomio que representa la fórmula f. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     polinomio (Xor (Var 1) (Var 2))               = [[1],[2]]&lt;br /&gt;
     polinomio (And (Var 1) (Var 2))               = [[1,2]]&lt;br /&gt;
     polinomio (Xor (Var 1) T)                     = [[1],[]]&lt;br /&gt;
     polinomio (And (Var 1) T)                     = [[1]]]&lt;br /&gt;
     polinomio (And (Xor (Var 1) (Var 2)) (Var 3)) = [[1,3],[2,3]]&lt;br /&gt;
     polinomio (Xor (And (Var 1) (Var 2)) (Var 3)) = [[1,2],[3]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun polinomio :: &amp;quot;form ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;polinomio f = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de f es igual que el de su polinomio. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
theorem correccion_polinomio: &lt;br /&gt;
  &amp;quot;valorF i f = valorP i (polinomio f)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=537</id>
		<title>Relación 12</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=537"/>
		<updated>2014-02-10T00:45:12Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R12: Representación de fórmulas proposicionales mediante&lt;br /&gt;
  polinomios *}&lt;br /&gt;
&lt;br /&gt;
theory R12&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El objetivo de esta relación es definir un procedimiento para&lt;br /&gt;
  transformar fórmulas proposicionales (construidas con ⊤, ∧ y ⊕) en&lt;br /&gt;
  polinomios de la forma&lt;br /&gt;
     (p₁ ∧ … ∧ pₙ) ⊕ … ⊕ (q₁ ∧ … ∧ qₘ)&lt;br /&gt;
  y demostrar que, para cualquier interpretación I, el valor de las&lt;br /&gt;
  fórmulas coincide con la de su correspondiente polinomio. *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Las fórmulas proposicionales pueden definirse mediante&lt;br /&gt;
  las siguientes reglas:&lt;br /&gt;
  · ⊤ es una fórmula proposicional&lt;br /&gt;
  · Las variables proposicionales p_1, p_2, … son fórmulas&lt;br /&gt;
    proposicionales,&lt;br /&gt;
  · Si F y G son fórmulas proposicionales, entonces (F ∧ G) y (F ⊕ G)&lt;br /&gt;
    también lo son. &lt;br /&gt;
  donde ⊤ es una fórmula que siempre es verdadera, ∧ es la conjunción y&lt;br /&gt;
  ⊕ es la disyunción exclusiva. &lt;br /&gt;
&lt;br /&gt;
  Definir el tipo de datos form para representar las fórmulas&lt;br /&gt;
  proposicionales usando &lt;br /&gt;
  · T en lugar de ⊤,&lt;br /&gt;
  · (Var i) en lugar de p_i,&lt;br /&gt;
  · (And F G) en lugar de (F ∧ G) y&lt;br /&gt;
  · (Xor F G) en lugar de (F ⊕ G).&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
datatype form = T | Var nat | And form form | Xor form form&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Los siguientes ejemplos de fórmulas&lt;br /&gt;
     form1 = p0 ⊕ ⊤&lt;br /&gt;
     form2 = (p0 ⊕ p1) ⊕ (p0 ∧ p1)&lt;br /&gt;
  es usará en lo que sigue.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation form1 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form1 ≡ Xor (Var 0) T&amp;quot;&lt;br /&gt;
abbreviation form2 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form2 ≡ Xor (Xor (Var 0) (Var 1)) (And (Var 0) (Var 1))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     xor :: bool ⇒ bool ⇒ bool&lt;br /&gt;
  tal que (xor p q) es el valor de la disyunción exclusiva de p y q. Por&lt;br /&gt;
  ejemplo,&lt;br /&gt;
     xor False True = True&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
definition xor :: &amp;quot;bool ⇒ bool ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;xor x y ≡ (x∧¬y)∨(¬x∧y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Una interpretación es una aplicación de los naturales en&lt;br /&gt;
  los booleanos. Definir las siguientes interpretaciones&lt;br /&gt;
          | p0 | p1 | p2 | p3 | ...&lt;br /&gt;
     int1 | F  | F  | F  | F  | ...&lt;br /&gt;
     int2 | F  | V  | F  | F  | ...&lt;br /&gt;
     int3 | V  | F  | F  | F  | ...&lt;br /&gt;
     int3 | V  | V  | F  | F  | ...&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation int1 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int1 x ≡ False&amp;quot;&lt;br /&gt;
abbreviation int2 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int2 ≡ int1 (1 := True)&amp;quot;&lt;br /&gt;
abbreviation int3 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int3 ≡ int1 (0 := True)&amp;quot;&lt;br /&gt;
abbreviation int4 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int4 ≡ int1 (0 := True, 1 := True)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Dada una interpretación I, el valor de de una fórmula F&lt;br /&gt;
  repecto de I, I(F), se define por&lt;br /&gt;
  · T, si F es ⊤;&lt;br /&gt;
  · I(n), si F es p_n;&lt;br /&gt;
  · I(G) ∧ I(H), si F es (G ∧ H);&lt;br /&gt;
  · I(G) ⊕ I(H), si F es (G ⊕ H).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     valorF :: (nat ⇒ bool) ⇒ form ⇒ bool&lt;br /&gt;
  tal que (valorF i f) es el valor de la fórmula f respecto de la&lt;br /&gt;
  interpretación i. Por ejemplo, &lt;br /&gt;
     valorF int1 form1 = True&lt;br /&gt;
     valorF int3 form1 = False&lt;br /&gt;
     valorF int1 form2 = False&lt;br /&gt;
     valorF int2 form2 = True&lt;br /&gt;
     valorF int3 form2 = True&lt;br /&gt;
     valorF int4 form2 = True&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorF :: &amp;quot;(nat ⇒ bool) ⇒ form ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorF i T = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Var n) = i n&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (And G H) = ((valorF i G) ∧ (valorF i H))&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Xor G H) = xor (valorF i G) (valorF i H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un monomio es una lista de números naturales y se puede&lt;br /&gt;
  interpretar como la conjunción de variables proposionales cuyos&lt;br /&gt;
  índices son los números de la lista. Por ejemplo, el monomio [0,2,1]&lt;br /&gt;
  se interpreta como la fórmula (p0 ∧ p2 ∧ p1).  &lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formM :: nat list ⇒ form&lt;br /&gt;
  tal que (formM m) es la fórmula correspondiente al monomio. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     formM [0,2,1] = And (Var 0) (And (Var 2) (And (Var 1) T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun formM :: &amp;quot;nat list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formM [] = T&amp;quot;&lt;br /&gt;
| &amp;quot;formM (x#xs) = And (Var x) (formM xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;formM [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir, por recursión, la función&lt;br /&gt;
     valorM :: (nat ⇒ bool) ⇒ nat list ⇒ bool&lt;br /&gt;
  tal que (valorM i m) es el valor de la fórmula representada por el&lt;br /&gt;
  monomio m en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorM int1 [0,2,1]                            = False&lt;br /&gt;
     valorM (int1(0:=True,1:=True,2:=True)) [0,2,1] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo monomio m, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i m = valorF i (formM m)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorM :: &amp;quot;(nat ⇒ bool) ⇒ nat list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorM i [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorM i (x#xs) = ((valorF i (Var x)) ∧ (valorM i xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;valorM int1 [0,2,1]&amp;quot;&lt;br /&gt;
value &amp;quot;valorM (int1(0:=True,1:=True,2:=True)) [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorM:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot;&lt;br /&gt;
by (induct m) auto&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma correccion_valorM2:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot; (is &amp;quot;?P i m&amp;quot;)&lt;br /&gt;
proof (induct m)&lt;br /&gt;
  show &amp;quot;?P i []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a m&lt;br /&gt;
  assume HI: &amp;quot;?P i m&amp;quot;&lt;br /&gt;
  then show &amp;quot;?P i (a#m)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Un polinomio es una lista de monomios y se puede&lt;br /&gt;
  interpretar como la disyunción exclusiva de los monomios. Por ejemplo, &lt;br /&gt;
  el polinomio [[0,2,1],[1,3]] se interpreta como la fórmula&lt;br /&gt;
  (p0 ∧ p2 ∧ p1) ⊕ (p1 ∧ p3).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formP :: nat list list ⇒ form&lt;br /&gt;
  tal que (formP p) es la fórmula correspondiente al polinomio p. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     formP [[1,2],[3]]&lt;br /&gt;
     = Xor (And (Var 1) (And (Var 2) T)) (Xor (And (Var 3) T) (Xor T T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun formP :: &amp;quot;nat list list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formP [] = Xor T T&amp;quot;&lt;br /&gt;
| &amp;quot;formP (x#xs) = Xor (formM x) (formP xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;formP [[1,2],[3]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     valorP :: (nat ⇒ bool) ⇒ nat list list ⇒ bool&lt;br /&gt;
  tal que (valorP i p) es el valor de la fórmula representada por el&lt;br /&gt;
  polinomio p en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorP (int1(1:=True,3:=True)) [[0,2,1],[1,3]] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo polinomio p, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i p = valorF i (formP p)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorP :: &amp;quot;(nat ⇒ bool) ⇒ nat list list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorP i [] = xor True True&amp;quot;&lt;br /&gt;
| &amp;quot;valorP i (x#xs) = xor (valorM i x) (valorP i xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;valorP (int1(1:=True,3:=True)) [[0,2,1],[1,3]]&amp;quot;&lt;br /&gt;
lemma correccion_valorP:&lt;br /&gt;
  &amp;quot;valorP i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
by (induct p) (auto simp add:correccion_valorM)&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     productoM :: nat list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (productoM m p) es el producto del monomio p por el polinomio&lt;br /&gt;
  p. Por  ejemplo, &lt;br /&gt;
     productoM [1,3] [[1,2,4],[7],[4,1]] &lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun productoM :: &amp;quot;nat list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;productoM m [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;productoM m (x#xs) = [m@x] @ (productoM m xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;productoM [1,3] [[1,2,4],[7],[4,1]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos monomios es la conjunción de sus valores.&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorM_conc: &lt;br /&gt;
  &amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de un monomio por un polinomio es la conjunción de sus&lt;br /&gt;
  valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_productoM: &lt;br /&gt;
  &amp;quot;valorP i (productoM m p) = (valorM i m ∧ valorP i p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Definir la función&lt;br /&gt;
     producto :: nat list list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (producto p q) es el producto de los polinomios p y q. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     producto [[1,3],[2]] [[1,2,4],[7],[4,1]]&lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1],[2,1,2,4],[2,7],[2,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun producto :: &amp;quot;nat list list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;producto p q = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos polinomios es la disyunción exclusiva de &lt;br /&gt;
  sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorP_conc: &lt;br /&gt;
  &amp;quot;valorP i (xs @ ys) = (xor (valorP i xs) (valorP i ys))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de dos polinomios es la conjunción de sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_producto: &lt;br /&gt;
  &amp;quot;valorP i (producto p q) = (valorP i p ∧ valorP i q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Definir la función&lt;br /&gt;
     polinomio :: form ⇒ nat list list&lt;br /&gt;
  tal que (polinomio f) es el polinomio que representa la fórmula f. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     polinomio (Xor (Var 1) (Var 2))               = [[1],[2]]&lt;br /&gt;
     polinomio (And (Var 1) (Var 2))               = [[1,2]]&lt;br /&gt;
     polinomio (Xor (Var 1) T)                     = [[1],[]]&lt;br /&gt;
     polinomio (And (Var 1) T)                     = [[1]]]&lt;br /&gt;
     polinomio (And (Xor (Var 1) (Var 2)) (Var 3)) = [[1,3],[2,3]]&lt;br /&gt;
     polinomio (Xor (And (Var 1) (Var 2)) (Var 3)) = [[1,2],[3]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun polinomio :: &amp;quot;form ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;polinomio f = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de f es igual que el de su polinomio. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
theorem correccion_polinomio: &lt;br /&gt;
  &amp;quot;valorF i f = valorP i (polinomio f)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=536</id>
		<title>Relación 12</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=536"/>
		<updated>2014-02-10T00:31:24Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R12: Representación de fórmulas proposicionales mediante&lt;br /&gt;
  polinomios *}&lt;br /&gt;
&lt;br /&gt;
theory R12&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El objetivo de esta relación es definir un procedimiento para&lt;br /&gt;
  transformar fórmulas proposicionales (construidas con ⊤, ∧ y ⊕) en&lt;br /&gt;
  polinomios de la forma&lt;br /&gt;
     (p₁ ∧ … ∧ pₙ) ⊕ … ⊕ (q₁ ∧ … ∧ qₘ)&lt;br /&gt;
  y demostrar que, para cualquier interpretación I, el valor de las&lt;br /&gt;
  fórmulas coincide con la de su correspondiente polinomio. *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Las fórmulas proposicionales pueden definirse mediante&lt;br /&gt;
  las siguientes reglas:&lt;br /&gt;
  · ⊤ es una fórmula proposicional&lt;br /&gt;
  · Las variables proposicionales p_1, p_2, … son fórmulas&lt;br /&gt;
    proposicionales,&lt;br /&gt;
  · Si F y G son fórmulas proposicionales, entonces (F ∧ G) y (F ⊕ G)&lt;br /&gt;
    también lo son. &lt;br /&gt;
  donde ⊤ es una fórmula que siempre es verdadera, ∧ es la conjunción y&lt;br /&gt;
  ⊕ es la disyunción exclusiva. &lt;br /&gt;
&lt;br /&gt;
  Definir el tipo de datos form para representar las fórmulas&lt;br /&gt;
  proposicionales usando &lt;br /&gt;
  · T en lugar de ⊤,&lt;br /&gt;
  · (Var i) en lugar de p_i,&lt;br /&gt;
  · (And F G) en lugar de (F ∧ G) y&lt;br /&gt;
  · (Xor F G) en lugar de (F ⊕ G).&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
datatype form = T | Var nat | And form form | Xor form form&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Los siguientes ejemplos de fórmulas&lt;br /&gt;
     form1 = p0 ⊕ ⊤&lt;br /&gt;
     form2 = (p0 ⊕ p1) ⊕ (p0 ∧ p1)&lt;br /&gt;
  es usará en lo que sigue.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation form1 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form1 ≡ Xor (Var 0) T&amp;quot;&lt;br /&gt;
abbreviation form2 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form2 ≡ Xor (Xor (Var 0) (Var 1)) (And (Var 0) (Var 1))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     xor :: bool ⇒ bool ⇒ bool&lt;br /&gt;
  tal que (xor p q) es el valor de la disyunción exclusiva de p y q. Por&lt;br /&gt;
  ejemplo,&lt;br /&gt;
     xor False True = True&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
definition xor :: &amp;quot;bool ⇒ bool ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;xor x y ≡ (x∧¬y)∨(¬x∧y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Una interpretación es una aplicación de los naturales en&lt;br /&gt;
  los booleanos. Definir las siguientes interpretaciones&lt;br /&gt;
          | p0 | p1 | p2 | p3 | ...&lt;br /&gt;
     int1 | F  | F  | F  | F  | ...&lt;br /&gt;
     int2 | F  | V  | F  | F  | ...&lt;br /&gt;
     int3 | V  | F  | F  | F  | ...&lt;br /&gt;
     int3 | V  | V  | F  | F  | ...&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation int1 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int1 x ≡ False&amp;quot;&lt;br /&gt;
abbreviation int2 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int2 ≡ int1 (1 := True)&amp;quot;&lt;br /&gt;
abbreviation int3 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int3 ≡ int1 (0 := True)&amp;quot;&lt;br /&gt;
abbreviation int4 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int4 ≡ int1 (0 := True, 1 := True)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Dada una interpretación I, el valor de de una fórmula F&lt;br /&gt;
  repecto de I, I(F), se define por&lt;br /&gt;
  · T, si F es ⊤;&lt;br /&gt;
  · I(n), si F es p_n;&lt;br /&gt;
  · I(G) ∧ I(H), si F es (G ∧ H);&lt;br /&gt;
  · I(G) ⊕ I(H), si F es (G ⊕ H).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     valorF :: (nat ⇒ bool) ⇒ form ⇒ bool&lt;br /&gt;
  tal que (valorF i f) es el valor de la fórmula f respecto de la&lt;br /&gt;
  interpretación i. Por ejemplo, &lt;br /&gt;
     valorF int1 form1 = True&lt;br /&gt;
     valorF int3 form1 = False&lt;br /&gt;
     valorF int1 form2 = False&lt;br /&gt;
     valorF int2 form2 = True&lt;br /&gt;
     valorF int3 form2 = True&lt;br /&gt;
     valorF int4 form2 = True&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorF :: &amp;quot;(nat ⇒ bool) ⇒ form ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorF i T = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Var n) = i n&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (And G H) = ((valorF i G) ∧ (valorF i H))&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Xor G H) = xor (valorF i G) (valorF i H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un monomio es una lista de números naturales y se puede&lt;br /&gt;
  interpretar como la conjunción de variables proposionales cuyos&lt;br /&gt;
  índices son los números de la lista. Por ejemplo, el monomio [0,2,1]&lt;br /&gt;
  se interpreta como la fórmula (p0 ∧ p2 ∧ p1).  &lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formM :: nat list ⇒ form&lt;br /&gt;
  tal que (formM m) es la fórmula correspondiente al monomio. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     formM [0,2,1] = And (Var 0) (And (Var 2) (And (Var 1) T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun formM :: &amp;quot;nat list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formM [] = T&amp;quot;&lt;br /&gt;
| &amp;quot;formM (x#xs) = And (Var x) (formM xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;formM [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir, por recursión, la función&lt;br /&gt;
     valorM :: (nat ⇒ bool) ⇒ nat list ⇒ bool&lt;br /&gt;
  tal que (valorM i m) es el valor de la fórmula representada por el&lt;br /&gt;
  monomio m en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorM int1 [0,2,1]                            = False&lt;br /&gt;
     valorM (int1(0:=True,1:=True,2:=True)) [0,2,1] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo monomio m, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i m = valorF i (formM m)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorM :: &amp;quot;(nat ⇒ bool) ⇒ nat list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorM i [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorM i (x#xs) = ((valorF i (Var x)) ∧ (valorM i xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;valorM int1 [0,2,1]&amp;quot;&lt;br /&gt;
value &amp;quot;valorM (int1(0:=True,1:=True,2:=True)) [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorM:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot;&lt;br /&gt;
by (induct m) auto&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma correccion_valorM2:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot; (is &amp;quot;?P i m&amp;quot;)&lt;br /&gt;
proof (induct m)&lt;br /&gt;
  show &amp;quot;?P i []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a m&lt;br /&gt;
  assume HI: &amp;quot;?P i m&amp;quot;&lt;br /&gt;
  then show &amp;quot;?P i (a#m)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Un polinomio es una lista de monomios y se puede&lt;br /&gt;
  interpretar como la disyunción exclusiva de los monomios. Por ejemplo, &lt;br /&gt;
  el polinomio [[0,2,1],[1,3]] se interpreta como la fórmula&lt;br /&gt;
  (p0 ∧ p2 ∧ p1) ⊕ (p1 ∧ p3).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formP :: nat list list ⇒ form&lt;br /&gt;
  tal que (formP p) es la fórmula correspondiente al polinomio p. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     formP [[1,2],[3]]&lt;br /&gt;
     = Xor (And (Var 1) (And (Var 2) T)) (Xor (And (Var 3) T) (Xor T T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun formP :: &amp;quot;nat list list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formP [] = Xor T T&amp;quot;&lt;br /&gt;
| &amp;quot;formP (x#xs) = Xor (formM x) (formP xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;formP [[1,2],[3]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     valorP :: (nat ⇒ bool) ⇒ nat list list ⇒ bool&lt;br /&gt;
  tal que (valorP i p) es el valor de la fórmula representada por el&lt;br /&gt;
  polinomio p en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorP (int1(1:=True,3:=True)) [[0,2,1],[1,3]] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo polinomio p, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i p = valorF i (formP p)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorP :: &amp;quot;(nat ⇒ bool) ⇒ nat list list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorP i [] = xor True True&amp;quot;&lt;br /&gt;
| &amp;quot;valorP i (x#xs) = xor (valorM i x) (valorP i xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;valorP (int1(1:=True,3:=True)) [[0,2,1],[1,3]]&amp;quot;&lt;br /&gt;
lemma correccion_valorP:&lt;br /&gt;
  &amp;quot;valorP i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
by (induct p) (auto simp add:correccion_valorM)&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     productoM :: nat list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (productoM m p) es el producto del monomio p por el polinomio&lt;br /&gt;
  p. Por  ejemplo, &lt;br /&gt;
     productoM [1,3] [[1,2,4],[7],[4,1]] &lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun productoM :: &amp;quot;nat list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;productoM m ns = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos monomios es la conjunción de sus valores.&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorM_conc: &lt;br /&gt;
  &amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de un monomio por un polinomio es la conjunción de sus&lt;br /&gt;
  valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_productoM: &lt;br /&gt;
  &amp;quot;valorP i (productoM m p) = (valorM i m ∧ valorP i p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Definir la función&lt;br /&gt;
     producto :: nat list list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (producto p q) es el producto de los polinomios p y q. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     producto [[1,3],[2]] [[1,2,4],[7],[4,1]]&lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1],[2,1,2,4],[2,7],[2,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun producto :: &amp;quot;nat list list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;producto p q = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos polinomios es la disyunción exclusiva de &lt;br /&gt;
  sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorP_conc: &lt;br /&gt;
  &amp;quot;valorP i (xs @ ys) = (xor (valorP i xs) (valorP i ys))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de dos polinomios es la conjunción de sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_producto: &lt;br /&gt;
  &amp;quot;valorP i (producto p q) = (valorP i p ∧ valorP i q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Definir la función&lt;br /&gt;
     polinomio :: form ⇒ nat list list&lt;br /&gt;
  tal que (polinomio f) es el polinomio que representa la fórmula f. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     polinomio (Xor (Var 1) (Var 2))               = [[1],[2]]&lt;br /&gt;
     polinomio (And (Var 1) (Var 2))               = [[1,2]]&lt;br /&gt;
     polinomio (Xor (Var 1) T)                     = [[1],[]]&lt;br /&gt;
     polinomio (And (Var 1) T)                     = [[1]]]&lt;br /&gt;
     polinomio (And (Xor (Var 1) (Var 2)) (Var 3)) = [[1,3],[2,3]]&lt;br /&gt;
     polinomio (Xor (And (Var 1) (Var 2)) (Var 3)) = [[1,2],[3]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun polinomio :: &amp;quot;form ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;polinomio f = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de f es igual que el de su polinomio. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
theorem correccion_polinomio: &lt;br /&gt;
  &amp;quot;valorF i f = valorP i (polinomio f)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=535</id>
		<title>Relación 12</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=535"/>
		<updated>2014-02-09T23:15:13Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R12: Representación de fórmulas proposicionales mediante&lt;br /&gt;
  polinomios *}&lt;br /&gt;
&lt;br /&gt;
theory R12&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El objetivo de esta relación es definir un procedimiento para&lt;br /&gt;
  transformar fórmulas proposicionales (construidas con ⊤, ∧ y ⊕) en&lt;br /&gt;
  polinomios de la forma&lt;br /&gt;
     (p₁ ∧ … ∧ pₙ) ⊕ … ⊕ (q₁ ∧ … ∧ qₘ)&lt;br /&gt;
  y demostrar que, para cualquier interpretación I, el valor de las&lt;br /&gt;
  fórmulas coincide con la de su correspondiente polinomio. *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Las fórmulas proposicionales pueden definirse mediante&lt;br /&gt;
  las siguientes reglas:&lt;br /&gt;
  · ⊤ es una fórmula proposicional&lt;br /&gt;
  · Las variables proposicionales p_1, p_2, … son fórmulas&lt;br /&gt;
    proposicionales,&lt;br /&gt;
  · Si F y G son fórmulas proposicionales, entonces (F ∧ G) y (F ⊕ G)&lt;br /&gt;
    también lo son. &lt;br /&gt;
  donde ⊤ es una fórmula que siempre es verdadera, ∧ es la conjunción y&lt;br /&gt;
  ⊕ es la disyunción exclusiva. &lt;br /&gt;
&lt;br /&gt;
  Definir el tipo de datos form para representar las fórmulas&lt;br /&gt;
  proposicionales usando &lt;br /&gt;
  · T en lugar de ⊤,&lt;br /&gt;
  · (Var i) en lugar de p_i,&lt;br /&gt;
  · (And F G) en lugar de (F ∧ G) y&lt;br /&gt;
  · (Xor F G) en lugar de (F ⊕ G).&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
datatype form = T | Var nat | And form form | Xor form form&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Los siguientes ejemplos de fórmulas&lt;br /&gt;
     form1 = p0 ⊕ ⊤&lt;br /&gt;
     form2 = (p0 ⊕ p1) ⊕ (p0 ∧ p1)&lt;br /&gt;
  es usará en lo que sigue.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation form1 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form1 ≡ Xor (Var 0) T&amp;quot;&lt;br /&gt;
abbreviation form2 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form2 ≡ Xor (Xor (Var 0) (Var 1)) (And (Var 0) (Var 1))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     xor :: bool ⇒ bool ⇒ bool&lt;br /&gt;
  tal que (xor p q) es el valor de la disyunción exclusiva de p y q. Por&lt;br /&gt;
  ejemplo,&lt;br /&gt;
     xor False True = True&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
definition xor :: &amp;quot;bool ⇒ bool ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;xor x y ≡ (x∧¬y)∨(¬x∧y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Una interpretación es una aplicación de los naturales en&lt;br /&gt;
  los booleanos. Definir las siguientes interpretaciones&lt;br /&gt;
          | p0 | p1 | p2 | p3 | ...&lt;br /&gt;
     int1 | F  | F  | F  | F  | ...&lt;br /&gt;
     int2 | F  | V  | F  | F  | ...&lt;br /&gt;
     int3 | V  | F  | F  | F  | ...&lt;br /&gt;
     int3 | V  | V  | F  | F  | ...&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation int1 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int1 x ≡ False&amp;quot;&lt;br /&gt;
abbreviation int2 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int2 ≡ int1 (1 := True)&amp;quot;&lt;br /&gt;
abbreviation int3 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int3 ≡ int1 (0 := True)&amp;quot;&lt;br /&gt;
abbreviation int4 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int4 ≡ int1 (0 := True, 1 := True)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Dada una interpretación I, el valor de de una fórmula F&lt;br /&gt;
  repecto de I, I(F), se define por&lt;br /&gt;
  · T, si F es ⊤;&lt;br /&gt;
  · I(n), si F es p_n;&lt;br /&gt;
  · I(G) ∧ I(H), si F es (G ∧ H);&lt;br /&gt;
  · I(G) ⊕ I(H), si F es (G ⊕ H).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     valorF :: (nat ⇒ bool) ⇒ form ⇒ bool&lt;br /&gt;
  tal que (valorF i f) es el valor de la fórmula f respecto de la&lt;br /&gt;
  interpretación i. Por ejemplo, &lt;br /&gt;
     valorF int1 form1 = True&lt;br /&gt;
     valorF int3 form1 = False&lt;br /&gt;
     valorF int1 form2 = False&lt;br /&gt;
     valorF int2 form2 = True&lt;br /&gt;
     valorF int3 form2 = True&lt;br /&gt;
     valorF int4 form2 = True&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorF :: &amp;quot;(nat ⇒ bool) ⇒ form ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorF i T = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Var n) = i n&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (And G H) = ((valorF i G) ∧ (valorF i H))&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Xor G H) = xor (valorF i G) (valorF i H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un monomio es una lista de números naturales y se puede&lt;br /&gt;
  interpretar como la conjunción de variables proposionales cuyos&lt;br /&gt;
  índices son los números de la lista. Por ejemplo, el monomio [0,2,1]&lt;br /&gt;
  se interpreta como la fórmula (p0 ∧ p2 ∧ p1).  &lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formM :: nat list ⇒ form&lt;br /&gt;
  tal que (formM m) es la fórmula correspondiente al monomio. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     formM [0,2,1] = And (Var 0) (And (Var 2) (And (Var 1) T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun formM :: &amp;quot;nat list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formM [] = T&amp;quot;&lt;br /&gt;
| &amp;quot;formM (x#xs) = And (Var x) (formM xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;formM [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir, por recursión, la función&lt;br /&gt;
     valorM :: (nat ⇒ bool) ⇒ nat list ⇒ bool&lt;br /&gt;
  tal que (valorM i m) es el valor de la fórmula representada por el&lt;br /&gt;
  monomio m en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorM int1 [0,2,1]                            = False&lt;br /&gt;
     valorM (int1(0:=True,1:=True,2:=True)) [0,2,1] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo monomio m, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i m = valorF i (formM m)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorM :: &amp;quot;(nat ⇒ bool) ⇒ nat list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorM i [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorM i (x#xs) = ((valorF i (Var x)) ∧ (valorM i xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;valorM int1 [0,2,1]&amp;quot;&lt;br /&gt;
value &amp;quot;valorM (int1(0:=True,1:=True,2:=True)) [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorM:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot;&lt;br /&gt;
by (induct m) auto&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma correccion_valorM2:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot; (is &amp;quot;?P i m&amp;quot;)&lt;br /&gt;
proof (induct m)&lt;br /&gt;
  show &amp;quot;?P i []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a m&lt;br /&gt;
  assume HI: &amp;quot;?P i m&amp;quot;&lt;br /&gt;
  then show &amp;quot;?P i (a#m)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Un polinomio es una lista de monomios y se puede&lt;br /&gt;
  interpretar como la disyunción exclusiva de los monomios. Por ejemplo, &lt;br /&gt;
  el polinomio [[0,2,1],[1,3]] se interpreta como la fórmula&lt;br /&gt;
  (p0 ∧ p2 ∧ p1) ⊕ (p1 ∧ p3).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formP :: nat list list ⇒ form&lt;br /&gt;
  tal que (formP p) es la fórmula correspondiente al polinomio p. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     formP [[1,2],[3]]&lt;br /&gt;
     = Xor (And (Var 1) (And (Var 2) T)) (Xor (And (Var 3) T) (Xor T T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun formP :: &amp;quot;nat list list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formP [] = Xor T T&amp;quot;&lt;br /&gt;
| &amp;quot;formP (x#xs) = Xor (formM x) (formP xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;formP [[1,2],[3]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     valorP :: (nat ⇒ bool) ⇒ nat list list ⇒ bool&lt;br /&gt;
  tal que (valorP i p) es el valor de la fórmula representada por el&lt;br /&gt;
  polinomio p en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorP (int1(1:=True,3:=True)) [[0,2,1],[1,3]] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo polinomio p, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i p = valorF i (formP p)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun valorP :: &amp;quot;(nat ⇒ bool) ⇒ nat list list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorP i ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorP:&lt;br /&gt;
  &amp;quot;valorP i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     productoM :: nat list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (productoM m p) es el producto del monomio p por el polinomio&lt;br /&gt;
  p. Por  ejemplo, &lt;br /&gt;
     productoM [1,3] [[1,2,4],[7],[4,1]] &lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun productoM :: &amp;quot;nat list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;productoM m ns = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos monomios es la conjunción de sus valores.&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorM_conc: &lt;br /&gt;
  &amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de un monomio por un polinomio es la conjunción de sus&lt;br /&gt;
  valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_productoM: &lt;br /&gt;
  &amp;quot;valorP i (productoM m p) = (valorM i m ∧ valorP i p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Definir la función&lt;br /&gt;
     producto :: nat list list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (producto p q) es el producto de los polinomios p y q. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     producto [[1,3],[2]] [[1,2,4],[7],[4,1]]&lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1],[2,1,2,4],[2,7],[2,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun producto :: &amp;quot;nat list list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;producto p q = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos polinomios es la disyunción exclusiva de &lt;br /&gt;
  sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorP_conc: &lt;br /&gt;
  &amp;quot;valorP i (xs @ ys) = (xor (valorP i xs) (valorP i ys))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de dos polinomios es la conjunción de sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_producto: &lt;br /&gt;
  &amp;quot;valorP i (producto p q) = (valorP i p ∧ valorP i q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Definir la función&lt;br /&gt;
     polinomio :: form ⇒ nat list list&lt;br /&gt;
  tal que (polinomio f) es el polinomio que representa la fórmula f. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     polinomio (Xor (Var 1) (Var 2))               = [[1],[2]]&lt;br /&gt;
     polinomio (And (Var 1) (Var 2))               = [[1,2]]&lt;br /&gt;
     polinomio (Xor (Var 1) T)                     = [[1],[]]&lt;br /&gt;
     polinomio (And (Var 1) T)                     = [[1]]]&lt;br /&gt;
     polinomio (And (Xor (Var 1) (Var 2)) (Var 3)) = [[1,3],[2,3]]&lt;br /&gt;
     polinomio (Xor (And (Var 1) (Var 2)) (Var 3)) = [[1,2],[3]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun polinomio :: &amp;quot;form ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;polinomio f = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de f es igual que el de su polinomio. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
theorem correccion_polinomio: &lt;br /&gt;
  &amp;quot;valorF i f = valorP i (polinomio f)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=531</id>
		<title>Relación 12</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=531"/>
		<updated>2014-02-09T15:45:52Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R12: Representación de fórmulas proposicionales mediante&lt;br /&gt;
  polinomios *}&lt;br /&gt;
&lt;br /&gt;
theory R12&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El objetivo de esta relación es definir un procedimiento para&lt;br /&gt;
  transformar fórmulas proposicionales (construidas con ⊤, ∧ y ⊕) en&lt;br /&gt;
  polinomios de la forma&lt;br /&gt;
     (p₁ ∧ … ∧ pₙ) ⊕ … ⊕ (q₁ ∧ … ∧ qₘ)&lt;br /&gt;
  y demostrar que, para cualquier interpretación I, el valor de las&lt;br /&gt;
  fórmulas coincide con la de su correspondiente polinomio. *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Las fórmulas proposicionales pueden definirse mediante&lt;br /&gt;
  las siguientes reglas:&lt;br /&gt;
  · ⊤ es una fórmula proposicional&lt;br /&gt;
  · Las variables proposicionales p_1, p_2, … son fórmulas&lt;br /&gt;
    proposicionales,&lt;br /&gt;
  · Si F y G son fórmulas proposicionales, entonces (F ∧ G) y (F ⊕ G)&lt;br /&gt;
    también lo son. &lt;br /&gt;
  donde ⊤ es una fórmula que siempre es verdadera, ∧ es la conjunción y&lt;br /&gt;
  ⊕ es la disyunción exclusiva. &lt;br /&gt;
&lt;br /&gt;
  Definir el tipo de datos form para representar las fórmulas&lt;br /&gt;
  proposicionales usando &lt;br /&gt;
  · T en lugar de ⊤,&lt;br /&gt;
  · (Var i) en lugar de p_i,&lt;br /&gt;
  · (And F G) en lugar de (F ∧ G) y&lt;br /&gt;
  · (Xor F G) en lugar de (F ⊕ G).&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
datatype form = T | Var nat | And form form | Xor form form&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Los siguientes ejemplos de fórmulas&lt;br /&gt;
     form1 = p0 ⊕ ⊤&lt;br /&gt;
     form2 = (p0 ⊕ p1) ⊕ (p0 ∧ p1)&lt;br /&gt;
  es usará en lo que sigue.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation form1 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form1 ≡ Xor (Var 0) T&amp;quot;&lt;br /&gt;
abbreviation form2 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form2 ≡ Xor (Xor (Var 0) (Var 1)) (And (Var 0) (Var 1))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     xor :: bool ⇒ bool ⇒ bool&lt;br /&gt;
  tal que (xor p q) es el valor de la disyunción exclusiva de p y q. Por&lt;br /&gt;
  ejemplo,&lt;br /&gt;
     xor False True = True&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
definition xor :: &amp;quot;bool ⇒ bool ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;xor x y ≡ (x∧¬y)∨(¬x∧y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Una interpretación es una aplicación de los naturales en&lt;br /&gt;
  los booleanos. Definir las siguientes interpretaciones&lt;br /&gt;
          | p0 | p1 | p2 | p3 | ...&lt;br /&gt;
     int1 | F  | F  | F  | F  | ...&lt;br /&gt;
     int2 | F  | V  | F  | F  | ...&lt;br /&gt;
     int3 | V  | F  | F  | F  | ...&lt;br /&gt;
     int3 | V  | V  | F  | F  | ...&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation int1 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int1 x ≡ False&amp;quot;&lt;br /&gt;
abbreviation int2 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int2 ≡ int1 (1 := True)&amp;quot;&lt;br /&gt;
abbreviation int3 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int3 ≡ int1 (0 := True)&amp;quot;&lt;br /&gt;
abbreviation int4 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int4 ≡ int1 (0 := True, 1 := True)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Dada una interpretación I, el valor de de una fórmula F&lt;br /&gt;
  repecto de I, I(F), se define por&lt;br /&gt;
  · T, si F es ⊤;&lt;br /&gt;
  · I(n), si F es p_n;&lt;br /&gt;
  · I(G) ∧ I(H), si F es (G ∧ H);&lt;br /&gt;
  · I(G) ⊕ I(H), si F es (G ⊕ H).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     valorF :: (nat ⇒ bool) ⇒ form ⇒ bool&lt;br /&gt;
  tal que (valorF i f) es el valor de la fórmula f respecto de la&lt;br /&gt;
  interpretación i. Por ejemplo, &lt;br /&gt;
     valorF int1 form1 = True&lt;br /&gt;
     valorF int3 form1 = False&lt;br /&gt;
     valorF int1 form2 = False&lt;br /&gt;
     valorF int2 form2 = True&lt;br /&gt;
     valorF int3 form2 = True&lt;br /&gt;
     valorF int4 form2 = True&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorF :: &amp;quot;(nat ⇒ bool) ⇒ form ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorF i T = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Var n) = i n&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (And G H) = ((valorF i G) ∧ (valorF i H))&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Xor G H) = xor (valorF i G) (valorF i H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un monomio es una lista de números naturales y se puede&lt;br /&gt;
  interpretar como la conjunción de variables proposionales cuyos&lt;br /&gt;
  índices son los números de la lista. Por ejemplo, el monomio [0,2,1]&lt;br /&gt;
  se interpreta como la fórmula (p0 ∧ p2 ∧ p1).  &lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formM :: nat list ⇒ form&lt;br /&gt;
  tal que (formM m) es la fórmula correspondiente al monomio. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     formM [0,2,1] = And (Var 0) (And (Var 2) (And (Var 1) T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun formM :: &amp;quot;nat list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formM [] = T&amp;quot;&lt;br /&gt;
| &amp;quot;formM (x#xs) = And (Var x) (formM xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;formM [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir, por recursión, la función&lt;br /&gt;
     valorM :: (nat ⇒ bool) ⇒ nat list ⇒ bool&lt;br /&gt;
  tal que (valorM i m) es el valor de la fórmula representada por el&lt;br /&gt;
  monomio m en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorM int1 [0,2,1]                            = False&lt;br /&gt;
     valorM (int1(0:=True,1:=True,2:=True)) [0,2,1] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo monomio m, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i m = valorF i (formM m)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorM :: &amp;quot;(nat ⇒ bool) ⇒ nat list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorM i [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorM i (x#xs) = ((valorF i (Var x)) ∧ (valorM i xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;valorM int1 [0,2,1]&amp;quot;&lt;br /&gt;
value &amp;quot;valorM (int1(0:=True,1:=True,2:=True)) [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorM:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot;&lt;br /&gt;
by (induct m) auto&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma correccion_valorM2:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot; (is &amp;quot;?P i m&amp;quot;)&lt;br /&gt;
proof (induct m)&lt;br /&gt;
  show &amp;quot;?P i []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a m&lt;br /&gt;
  assume HI: &amp;quot;?P i m&amp;quot;&lt;br /&gt;
  then show &amp;quot;?P i (a#m)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Un polinomio es una lista de monomios y se puede&lt;br /&gt;
  interpretar como la disyunción exclusiva de los monomios. Por ejemplo, &lt;br /&gt;
  el polinomio [[0,2,1],[1,3]] se interpreta como la fórmula&lt;br /&gt;
  (p0 ∧ p2 ∧ p1) ⊕ (p1 ∧ p3).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formP :: nat list list ⇒ form&lt;br /&gt;
  tal que (formP p) es la fórmula correspondiente al polinomio p. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     formP [[1,2],[3]]&lt;br /&gt;
     = Xor (And (Var 1) (And (Var 2) T)) (Xor (And (Var 3) T) (Xor T T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun formP :: &amp;quot;nat list list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formP ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     valorP :: (nat ⇒ bool) ⇒ nat list list ⇒ bool&lt;br /&gt;
  tal que (valorP i p) es el valor de la fórmula representada por el&lt;br /&gt;
  polinomio p en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorP (int1(1:=True,3:=True)) [[0,2,1],[1,3]] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo polinomio p, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i p = valorF i (formP p)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun valorP :: &amp;quot;(nat ⇒ bool) ⇒ nat list list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorP i ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorP:&lt;br /&gt;
  &amp;quot;valorP i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     productoM :: nat list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (productoM m p) es el producto del monomio p por el polinomio&lt;br /&gt;
  p. Por  ejemplo, &lt;br /&gt;
     productoM [1,3] [[1,2,4],[7],[4,1]] &lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun productoM :: &amp;quot;nat list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;productoM m ns = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos monomios es la conjunción de sus valores.&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorM_conc: &lt;br /&gt;
  &amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de un monomio por un polinomio es la conjunción de sus&lt;br /&gt;
  valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_productoM: &lt;br /&gt;
  &amp;quot;valorP i (productoM m p) = (valorM i m ∧ valorP i p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Definir la función&lt;br /&gt;
     producto :: nat list list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (producto p q) es el producto de los polinomios p y q. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     producto [[1,3],[2]] [[1,2,4],[7],[4,1]]&lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1],[2,1,2,4],[2,7],[2,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun producto :: &amp;quot;nat list list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;producto p q = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos polinomios es la disyunción exclusiva de &lt;br /&gt;
  sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorP_conc: &lt;br /&gt;
  &amp;quot;valorP i (xs @ ys) = (xor (valorP i xs) (valorP i ys))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de dos polinomios es la conjunción de sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_producto: &lt;br /&gt;
  &amp;quot;valorP i (producto p q) = (valorP i p ∧ valorP i q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Definir la función&lt;br /&gt;
     polinomio :: form ⇒ nat list list&lt;br /&gt;
  tal que (polinomio f) es el polinomio que representa la fórmula f. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     polinomio (Xor (Var 1) (Var 2))               = [[1],[2]]&lt;br /&gt;
     polinomio (And (Var 1) (Var 2))               = [[1,2]]&lt;br /&gt;
     polinomio (Xor (Var 1) T)                     = [[1],[]]&lt;br /&gt;
     polinomio (And (Var 1) T)                     = [[1]]]&lt;br /&gt;
     polinomio (And (Xor (Var 1) (Var 2)) (Var 3)) = [[1,3],[2,3]]&lt;br /&gt;
     polinomio (Xor (And (Var 1) (Var 2)) (Var 3)) = [[1,2],[3]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun polinomio :: &amp;quot;form ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;polinomio f = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de f es igual que el de su polinomio. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
theorem correccion_polinomio: &lt;br /&gt;
  &amp;quot;valorF i f = valorP i (polinomio f)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=530</id>
		<title>Relación 12</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=530"/>
		<updated>2014-02-09T04:14:10Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R12: Representación de fórmulas proposicionales mediante&lt;br /&gt;
  polinomios *}&lt;br /&gt;
&lt;br /&gt;
theory R12&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El objetivo de esta relación es definir un procedimiento para&lt;br /&gt;
  transformar fórmulas proposicionales (construidas con ⊤, ∧ y ⊕) en&lt;br /&gt;
  polinomios de la forma&lt;br /&gt;
     (p₁ ∧ … ∧ pₙ) ⊕ … ⊕ (q₁ ∧ … ∧ qₘ)&lt;br /&gt;
  y demostrar que, para cualquier interpretación I, el valor de las&lt;br /&gt;
  fórmulas coincide con la de su correspondiente polinomio. *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Las fórmulas proposicionales pueden definirse mediante&lt;br /&gt;
  las siguientes reglas:&lt;br /&gt;
  · ⊤ es una fórmula proposicional&lt;br /&gt;
  · Las variables proposicionales p_1, p_2, … son fórmulas&lt;br /&gt;
    proposicionales,&lt;br /&gt;
  · Si F y G son fórmulas proposicionales, entonces (F ∧ G) y (F ⊕ G)&lt;br /&gt;
    también lo son. &lt;br /&gt;
  donde ⊤ es una fórmula que siempre es verdadera, ∧ es la conjunción y&lt;br /&gt;
  ⊕ es la disyunción exclusiva. &lt;br /&gt;
&lt;br /&gt;
  Definir el tipo de datos form para representar las fórmulas&lt;br /&gt;
  proposicionales usando &lt;br /&gt;
  · T en lugar de ⊤,&lt;br /&gt;
  · (Var i) en lugar de p_i,&lt;br /&gt;
  · (And F G) en lugar de (F ∧ G) y&lt;br /&gt;
  · (Xor F G) en lugar de (F ⊕ G).&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
datatype form = T | Var nat | And form form | Xor form form&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Los siguientes ejemplos de fórmulas&lt;br /&gt;
     form1 = p0 ⊕ ⊤&lt;br /&gt;
     form2 = (p0 ⊕ p1) ⊕ (p0 ∧ p1)&lt;br /&gt;
  es usará en lo que sigue.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation form1 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form1 ≡ Xor (Var 0) T&amp;quot;&lt;br /&gt;
abbreviation form2 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form2 ≡ Xor (Xor (Var 0) (Var 1)) (And (Var 0) (Var 1))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     xor :: bool ⇒ bool ⇒ bool&lt;br /&gt;
  tal que (xor p q) es el valor de la disyunción exclusiva de p y q. Por&lt;br /&gt;
  ejemplo,&lt;br /&gt;
     xor False True = True&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
definition xor :: &amp;quot;bool ⇒ bool ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;xor x y ≡ (x∧¬y)∨(¬x∧y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Una interpretación es una aplicación de los naturales en&lt;br /&gt;
  los booleanos. Definir las siguientes interpretaciones&lt;br /&gt;
          | p0 | p1 | p2 | p3 | ...&lt;br /&gt;
     int1 | F  | F  | F  | F  | ...&lt;br /&gt;
     int2 | F  | V  | F  | F  | ...&lt;br /&gt;
     int3 | V  | F  | F  | F  | ...&lt;br /&gt;
     int3 | V  | V  | F  | F  | ...&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation int1 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int1 x ≡ False&amp;quot;&lt;br /&gt;
abbreviation int2 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int2 ≡ int1 (1 := True)&amp;quot;&lt;br /&gt;
abbreviation int3 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int3 ≡ int1 (0 := True)&amp;quot;&lt;br /&gt;
abbreviation int4 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int4 ≡ int1 (0 := True, 1 := True)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Dada una interpretación I, el valor de de una fórmula F&lt;br /&gt;
  repecto de I, I(F), se define por&lt;br /&gt;
  · T, si F es ⊤;&lt;br /&gt;
  · I(n), si F es p_n;&lt;br /&gt;
  · I(G) ∧ I(H), si F es (G ∧ H);&lt;br /&gt;
  · I(G) ⊕ I(H), si F es (G ⊕ H).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     valorF :: (nat ⇒ bool) ⇒ form ⇒ bool&lt;br /&gt;
  tal que (valorF i f) es el valor de la fórmula f respecto de la&lt;br /&gt;
  interpretación i. Por ejemplo, &lt;br /&gt;
     valorF int1 form1 = True&lt;br /&gt;
     valorF int3 form1 = False&lt;br /&gt;
     valorF int1 form2 = False&lt;br /&gt;
     valorF int2 form2 = True&lt;br /&gt;
     valorF int3 form2 = True&lt;br /&gt;
     valorF int4 form2 = True&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorF :: &amp;quot;(nat ⇒ bool) ⇒ form ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorF i T = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Var n) = i n&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (And G H) = ((valorF i G) ∧ (valorF i H))&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Xor G H) = xor (valorF i G) (valorF i H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un monomio es una lista de números naturales y se puede&lt;br /&gt;
  interpretar como la conjunción de variables proposionales cuyos&lt;br /&gt;
  índices son los números de la lista. Por ejemplo, el monomio [0,2,1]&lt;br /&gt;
  se interpreta como la fórmula (p0 ∧ p2 ∧ p1).  &lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formM :: nat list ⇒ form&lt;br /&gt;
  tal que (formM m) es la fórmula correspondiente al monomio. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     formM [0,2,1] = And (Var 0) (And (Var 2) (And (Var 1) T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun formM :: &amp;quot;nat list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formM [] = T&amp;quot;&lt;br /&gt;
| &amp;quot;formM (x#xs) = And (Var x) (formM xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;formM [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir, por recursión, la función&lt;br /&gt;
     valorM :: (nat ⇒ bool) ⇒ nat list ⇒ bool&lt;br /&gt;
  tal que (valorM i m) es el valor de la fórmula representada por el&lt;br /&gt;
  monomio m en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorM int1 [0,2,1]                            = False&lt;br /&gt;
     valorM (int1(0:=True,1:=True,2:=True)) [0,2,1] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo monomio m, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i m = valorF i (formM m)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorM :: &amp;quot;(nat ⇒ bool) ⇒ nat list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorM i [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorM i (x#xs) = ((valorF i (Var x)) ∧ (valorM i xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;valorM int1 [0,2,1]&amp;quot;&lt;br /&gt;
value &amp;quot;valorM (int1(0:=True,1:=True,2:=True)) [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorM:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot;&lt;br /&gt;
by (induct m) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Un polinomio es una lista de monomios y se puede&lt;br /&gt;
  interpretar como la disyunción exclusiva de los monomios. Por ejemplo, &lt;br /&gt;
  el polinomio [[0,2,1],[1,3]] se interpreta como la fórmula&lt;br /&gt;
  (p0 ∧ p2 ∧ p1) ⊕ (p1 ∧ p3).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formP :: nat list list ⇒ form&lt;br /&gt;
  tal que (formP p) es la fórmula correspondiente al polinomio p. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     formP [[1,2],[3]]&lt;br /&gt;
     = Xor (And (Var 1) (And (Var 2) T)) (Xor (And (Var 3) T) (Xor T T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun formP :: &amp;quot;nat list list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formP ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     valorP :: (nat ⇒ bool) ⇒ nat list list ⇒ bool&lt;br /&gt;
  tal que (valorP i p) es el valor de la fórmula representada por el&lt;br /&gt;
  polinomio p en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorP (int1(1:=True,3:=True)) [[0,2,1],[1,3]] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo polinomio p, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i p = valorF i (formP p)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun valorP :: &amp;quot;(nat ⇒ bool) ⇒ nat list list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorP i ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorP:&lt;br /&gt;
  &amp;quot;valorP i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     productoM :: nat list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (productoM m p) es el producto del monomio p por el polinomio&lt;br /&gt;
  p. Por  ejemplo, &lt;br /&gt;
     productoM [1,3] [[1,2,4],[7],[4,1]] &lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun productoM :: &amp;quot;nat list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;productoM m ns = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos monomios es la conjunción de sus valores.&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorM_conc: &lt;br /&gt;
  &amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de un monomio por un polinomio es la conjunción de sus&lt;br /&gt;
  valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_productoM: &lt;br /&gt;
  &amp;quot;valorP i (productoM m p) = (valorM i m ∧ valorP i p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Definir la función&lt;br /&gt;
     producto :: nat list list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (producto p q) es el producto de los polinomios p y q. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     producto [[1,3],[2]] [[1,2,4],[7],[4,1]]&lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1],[2,1,2,4],[2,7],[2,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun producto :: &amp;quot;nat list list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;producto p q = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos polinomios es la disyunción exclusiva de &lt;br /&gt;
  sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorP_conc: &lt;br /&gt;
  &amp;quot;valorP i (xs @ ys) = (xor (valorP i xs) (valorP i ys))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de dos polinomios es la conjunción de sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_producto: &lt;br /&gt;
  &amp;quot;valorP i (producto p q) = (valorP i p ∧ valorP i q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Definir la función&lt;br /&gt;
     polinomio :: form ⇒ nat list list&lt;br /&gt;
  tal que (polinomio f) es el polinomio que representa la fórmula f. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     polinomio (Xor (Var 1) (Var 2))               = [[1],[2]]&lt;br /&gt;
     polinomio (And (Var 1) (Var 2))               = [[1,2]]&lt;br /&gt;
     polinomio (Xor (Var 1) T)                     = [[1],[]]&lt;br /&gt;
     polinomio (And (Var 1) T)                     = [[1]]]&lt;br /&gt;
     polinomio (And (Xor (Var 1) (Var 2)) (Var 3)) = [[1,3],[2,3]]&lt;br /&gt;
     polinomio (Xor (And (Var 1) (Var 2)) (Var 3)) = [[1,2],[3]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun polinomio :: &amp;quot;form ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;polinomio f = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de f es igual que el de su polinomio. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
theorem correccion_polinomio: &lt;br /&gt;
  &amp;quot;valorF i f = valorP i (polinomio f)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=529</id>
		<title>Relación 12</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=529"/>
		<updated>2014-02-09T04:13:20Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R12: Representación de fórmulas proposicionales mediante&lt;br /&gt;
  polinomios *}&lt;br /&gt;
&lt;br /&gt;
theory R12&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El objetivo de esta relación es definir un procedimiento para&lt;br /&gt;
  transformar fórmulas proposicionales (construidas con ⊤, ∧ y ⊕) en&lt;br /&gt;
  polinomios de la forma&lt;br /&gt;
     (p₁ ∧ … ∧ pₙ) ⊕ … ⊕ (q₁ ∧ … ∧ qₘ)&lt;br /&gt;
  y demostrar que, para cualquier interpretación I, el valor de las&lt;br /&gt;
  fórmulas coincide con la de su correspondiente polinomio. *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Las fórmulas proposicionales pueden definirse mediante&lt;br /&gt;
  las siguientes reglas:&lt;br /&gt;
  · ⊤ es una fórmula proposicional&lt;br /&gt;
  · Las variables proposicionales p_1, p_2, … son fórmulas&lt;br /&gt;
    proposicionales,&lt;br /&gt;
  · Si F y G son fórmulas proposicionales, entonces (F ∧ G) y (F ⊕ G)&lt;br /&gt;
    también lo son. &lt;br /&gt;
  donde ⊤ es una fórmula que siempre es verdadera, ∧ es la conjunción y&lt;br /&gt;
  ⊕ es la disyunción exclusiva. &lt;br /&gt;
&lt;br /&gt;
  Definir el tipo de datos form para representar las fórmulas&lt;br /&gt;
  proposicionales usando &lt;br /&gt;
  · T en lugar de ⊤,&lt;br /&gt;
  · (Var i) en lugar de p_i,&lt;br /&gt;
  · (And F G) en lugar de (F ∧ G) y&lt;br /&gt;
  · (Xor F G) en lugar de (F ⊕ G).&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
datatype form = T | Var nat | And form form | Xor form form&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Los siguientes ejemplos de fórmulas&lt;br /&gt;
     form1 = p0 ⊕ ⊤&lt;br /&gt;
     form2 = (p0 ⊕ p1) ⊕ (p0 ∧ p1)&lt;br /&gt;
  es usará en lo que sigue.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation form1 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form1 ≡ Xor (Var 0) T&amp;quot;&lt;br /&gt;
abbreviation form2 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form2 ≡ Xor (Xor (Var 0) (Var 1)) (And (Var 0) (Var 1))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     xor :: bool ⇒ bool ⇒ bool&lt;br /&gt;
  tal que (xor p q) es el valor de la disyunción exclusiva de p y q. Por&lt;br /&gt;
  ejemplo,&lt;br /&gt;
     xor False True = True&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
definition xor :: &amp;quot;bool ⇒ bool ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;xor x y ≡ (x∧¬y)∨(¬x∧y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Una interpretación es una aplicación de los naturales en&lt;br /&gt;
  los booleanos. Definir las siguientes interpretaciones&lt;br /&gt;
          | p0 | p1 | p2 | p3 | ...&lt;br /&gt;
     int1 | F  | F  | F  | F  | ...&lt;br /&gt;
     int2 | F  | V  | F  | F  | ...&lt;br /&gt;
     int3 | V  | F  | F  | F  | ...&lt;br /&gt;
     int3 | V  | V  | F  | F  | ...&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation int1 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int1 x ≡ False&amp;quot;&lt;br /&gt;
abbreviation int2 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int2 ≡ int1 (1 := True)&amp;quot;&lt;br /&gt;
abbreviation int3 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int3 ≡ int1 (0 := True)&amp;quot;&lt;br /&gt;
abbreviation int4 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int4 ≡ int1 (0 := True, 1 := True)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Dada una interpretación I, el valor de de una fórmula F&lt;br /&gt;
  repecto de I, I(F), se define por&lt;br /&gt;
  · T, si F es ⊤;&lt;br /&gt;
  · I(n), si F es p_n;&lt;br /&gt;
  · I(G) ∧ I(H), si F es (G ∧ H);&lt;br /&gt;
  · I(G) ⊕ I(H), si F es (G ⊕ H).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     valorF :: (nat ⇒ bool) ⇒ form ⇒ bool&lt;br /&gt;
  tal que (valorF i f) es el valor de la fórmula f respecto de la&lt;br /&gt;
  interpretación i. Por ejemplo, &lt;br /&gt;
     valorF int1 form1 = True&lt;br /&gt;
     valorF int3 form1 = False&lt;br /&gt;
     valorF int1 form2 = False&lt;br /&gt;
     valorF int2 form2 = True&lt;br /&gt;
     valorF int3 form2 = True&lt;br /&gt;
     valorF int4 form2 = True&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorF :: &amp;quot;(nat ⇒ bool) ⇒ form ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorF i T = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Var n) = i n&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (And G H) = ((valorF i G) ∧ (valorF i H))&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Xor G H) = xor (valorF i G) (valorF i H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un monomio es una lista de números naturales y se puede&lt;br /&gt;
  interpretar como la conjunción de variables proposionales cuyos&lt;br /&gt;
  índices son los números de la lista. Por ejemplo, el monomio [0,2,1]&lt;br /&gt;
  se interpreta como la fórmula (p0 ∧ p2 ∧ p1).  &lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formM :: nat list ⇒ form&lt;br /&gt;
  tal que (formM m) es la fórmula correspondiente al monomio. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     formM [0,2,1] = And (Var 0) (And (Var 2) (And (Var 1) T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun formM :: &amp;quot;nat list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formM [] = T&amp;quot;&lt;br /&gt;
| &amp;quot;formM (x#xs) = And (Var x) (formM xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;formM [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir, por recursión, la función&lt;br /&gt;
     valorM :: (nat ⇒ bool) ⇒ nat list ⇒ bool&lt;br /&gt;
  tal que (valorM i m) es el valor de la fórmula representada por el&lt;br /&gt;
  monomio m en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorM int1 [0,2,1]                            = False&lt;br /&gt;
     valorM (int1(0:=True,1:=True,2:=True)) [0,2,1] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo monomio m, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i m = valorF i (formM m)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorM :: &amp;quot;(nat ⇒ bool) ⇒ nat list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorM i [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorM i (x#xs) = ((valorF i (Var x)) ∧ (valorM i xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;valorM int1 [0,2,1]&amp;quot;&lt;br /&gt;
value &amp;quot;valorM (int1(0:=True,1:=True,2:=True)) [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorM:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Un polinomio es una lista de monomios y se puede&lt;br /&gt;
  interpretar como la disyunción exclusiva de los monomios. Por ejemplo, &lt;br /&gt;
  el polinomio [[0,2,1],[1,3]] se interpreta como la fórmula&lt;br /&gt;
  (p0 ∧ p2 ∧ p1) ⊕ (p1 ∧ p3).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formP :: nat list list ⇒ form&lt;br /&gt;
  tal que (formP p) es la fórmula correspondiente al polinomio p. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     formP [[1,2],[3]]&lt;br /&gt;
     = Xor (And (Var 1) (And (Var 2) T)) (Xor (And (Var 3) T) (Xor T T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun formP :: &amp;quot;nat list list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formP ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     valorP :: (nat ⇒ bool) ⇒ nat list list ⇒ bool&lt;br /&gt;
  tal que (valorP i p) es el valor de la fórmula representada por el&lt;br /&gt;
  polinomio p en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorP (int1(1:=True,3:=True)) [[0,2,1],[1,3]] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo polinomio p, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i p = valorF i (formP p)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun valorP :: &amp;quot;(nat ⇒ bool) ⇒ nat list list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorP i ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorP:&lt;br /&gt;
  &amp;quot;valorP i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     productoM :: nat list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (productoM m p) es el producto del monomio p por el polinomio&lt;br /&gt;
  p. Por  ejemplo, &lt;br /&gt;
     productoM [1,3] [[1,2,4],[7],[4,1]] &lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun productoM :: &amp;quot;nat list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;productoM m ns = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos monomios es la conjunción de sus valores.&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorM_conc: &lt;br /&gt;
  &amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de un monomio por un polinomio es la conjunción de sus&lt;br /&gt;
  valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_productoM: &lt;br /&gt;
  &amp;quot;valorP i (productoM m p) = (valorM i m ∧ valorP i p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Definir la función&lt;br /&gt;
     producto :: nat list list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (producto p q) es el producto de los polinomios p y q. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     producto [[1,3],[2]] [[1,2,4],[7],[4,1]]&lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1],[2,1,2,4],[2,7],[2,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun producto :: &amp;quot;nat list list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;producto p q = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos polinomios es la disyunción exclusiva de &lt;br /&gt;
  sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorP_conc: &lt;br /&gt;
  &amp;quot;valorP i (xs @ ys) = (xor (valorP i xs) (valorP i ys))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de dos polinomios es la conjunción de sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_producto: &lt;br /&gt;
  &amp;quot;valorP i (producto p q) = (valorP i p ∧ valorP i q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Definir la función&lt;br /&gt;
     polinomio :: form ⇒ nat list list&lt;br /&gt;
  tal que (polinomio f) es el polinomio que representa la fórmula f. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     polinomio (Xor (Var 1) (Var 2))               = [[1],[2]]&lt;br /&gt;
     polinomio (And (Var 1) (Var 2))               = [[1,2]]&lt;br /&gt;
     polinomio (Xor (Var 1) T)                     = [[1],[]]&lt;br /&gt;
     polinomio (And (Var 1) T)                     = [[1]]]&lt;br /&gt;
     polinomio (And (Xor (Var 1) (Var 2)) (Var 3)) = [[1,3],[2,3]]&lt;br /&gt;
     polinomio (Xor (And (Var 1) (Var 2)) (Var 3)) = [[1,2],[3]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun polinomio :: &amp;quot;form ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;polinomio f = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de f es igual que el de su polinomio. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
theorem correccion_polinomio: &lt;br /&gt;
  &amp;quot;valorF i f = valorP i (polinomio f)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=528</id>
		<title>Relación 12</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=528"/>
		<updated>2014-02-09T04:12:29Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R12: Representación de fórmulas proposicionales mediante&lt;br /&gt;
  polinomios *}&lt;br /&gt;
&lt;br /&gt;
theory R12&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El objetivo de esta relación es definir un procedimiento para&lt;br /&gt;
  transformar fórmulas proposicionales (construidas con ⊤, ∧ y ⊕) en&lt;br /&gt;
  polinomios de la forma&lt;br /&gt;
     (p₁ ∧ … ∧ pₙ) ⊕ … ⊕ (q₁ ∧ … ∧ qₘ)&lt;br /&gt;
  y demostrar que, para cualquier interpretación I, el valor de las&lt;br /&gt;
  fórmulas coincide con la de su correspondiente polinomio. *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Las fórmulas proposicionales pueden definirse mediante&lt;br /&gt;
  las siguientes reglas:&lt;br /&gt;
  · ⊤ es una fórmula proposicional&lt;br /&gt;
  · Las variables proposicionales p_1, p_2, … son fórmulas&lt;br /&gt;
    proposicionales,&lt;br /&gt;
  · Si F y G son fórmulas proposicionales, entonces (F ∧ G) y (F ⊕ G)&lt;br /&gt;
    también lo son. &lt;br /&gt;
  donde ⊤ es una fórmula que siempre es verdadera, ∧ es la conjunción y&lt;br /&gt;
  ⊕ es la disyunción exclusiva. &lt;br /&gt;
&lt;br /&gt;
  Definir el tipo de datos form para representar las fórmulas&lt;br /&gt;
  proposicionales usando &lt;br /&gt;
  · T en lugar de ⊤,&lt;br /&gt;
  · (Var i) en lugar de p_i,&lt;br /&gt;
  · (And F G) en lugar de (F ∧ G) y&lt;br /&gt;
  · (Xor F G) en lugar de (F ⊕ G).&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
datatype form = T | Var nat | And form form | Xor form form&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Los siguientes ejemplos de fórmulas&lt;br /&gt;
     form1 = p0 ⊕ ⊤&lt;br /&gt;
     form2 = (p0 ⊕ p1) ⊕ (p0 ∧ p1)&lt;br /&gt;
  es usará en lo que sigue.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation form1 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form1 ≡ Xor (Var 0) T&amp;quot;&lt;br /&gt;
abbreviation form2 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form2 ≡ Xor (Xor (Var 0) (Var 1)) (And (Var 0) (Var 1))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     xor :: bool ⇒ bool ⇒ bool&lt;br /&gt;
  tal que (xor p q) es el valor de la disyunción exclusiva de p y q. Por&lt;br /&gt;
  ejemplo,&lt;br /&gt;
     xor False True = True&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
definition xor :: &amp;quot;bool ⇒ bool ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;xor x y ≡ (x∧¬y)∨(¬x∧y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Una interpretación es una aplicación de los naturales en&lt;br /&gt;
  los booleanos. Definir las siguientes interpretaciones&lt;br /&gt;
          | p0 | p1 | p2 | p3 | ...&lt;br /&gt;
     int1 | F  | F  | F  | F  | ...&lt;br /&gt;
     int2 | F  | V  | F  | F  | ...&lt;br /&gt;
     int3 | V  | F  | F  | F  | ...&lt;br /&gt;
     int3 | V  | V  | F  | F  | ...&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation int1 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int1 x ≡ False&amp;quot;&lt;br /&gt;
abbreviation int2 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int2 ≡ int1 (1 := True)&amp;quot;&lt;br /&gt;
abbreviation int3 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int3 ≡ int1 (0 := True)&amp;quot;&lt;br /&gt;
abbreviation int4 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int4 ≡ int1 (0 := True, 1 := True)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Dada una interpretación I, el valor de de una fórmula F&lt;br /&gt;
  repecto de I, I(F), se define por&lt;br /&gt;
  · T, si F es ⊤;&lt;br /&gt;
  · I(n), si F es p_n;&lt;br /&gt;
  · I(G) ∧ I(H), si F es (G ∧ H);&lt;br /&gt;
  · I(G) ⊕ I(H), si F es (G ⊕ H).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     valorF :: (nat ⇒ bool) ⇒ form ⇒ bool&lt;br /&gt;
  tal que (valorF i f) es el valor de la fórmula f respecto de la&lt;br /&gt;
  interpretación i. Por ejemplo, &lt;br /&gt;
     valorF int1 form1 = True&lt;br /&gt;
     valorF int3 form1 = False&lt;br /&gt;
     valorF int1 form2 = False&lt;br /&gt;
     valorF int2 form2 = True&lt;br /&gt;
     valorF int3 form2 = True&lt;br /&gt;
     valorF int4 form2 = True&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorF :: &amp;quot;(nat ⇒ bool) ⇒ form ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorF i T = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Var n) = i n&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (And G H) = ((valorF i G) ∧ (valorF i H))&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Xor G H) = xor (valorF i G) (valorF i H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un monomio es una lista de números naturales y se puede&lt;br /&gt;
  interpretar como la conjunción de variables proposionales cuyos&lt;br /&gt;
  índices son los números de la lista. Por ejemplo, el monomio [0,2,1]&lt;br /&gt;
  se interpreta como la fórmula (p0 ∧ p2 ∧ p1).  &lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formM :: nat list ⇒ form&lt;br /&gt;
  tal que (formM m) es la fórmula correspondiente al monomio. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     formM [0,2,1] = And (Var 0) (And (Var 2) (And (Var 1) T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun formM :: &amp;quot;nat list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formM [] = T&amp;quot;&lt;br /&gt;
| &amp;quot;formM (x#xs) = And (Var x) (formM xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;formM [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir, por recursión, la función&lt;br /&gt;
     valorM :: (nat ⇒ bool) ⇒ nat list ⇒ bool&lt;br /&gt;
  tal que (valorM i m) es el valor de la fórmula representada por el&lt;br /&gt;
  monomio m en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorM int1 [0,2,1]                            = False&lt;br /&gt;
     valorM (int1(0:=True,1:=True,2:=True)) [0,2,1] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo monomio m, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i m = valorF i (formM m)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorM :: &amp;quot;(nat ⇒ bool) ⇒ nat list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorM i [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorM i (x#xs) = ((valorF i (Var x)) ∧ (valorM i xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;valorM int1 [0,2,1]&amp;quot;&lt;br /&gt;
value &amp;quot;valorM (int1(0:=True,1:=True,2:=True)) [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorM:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Un polinomio es una lista de monomios y se puede&lt;br /&gt;
  interpretar como la disyunción exclusiva de los monomios. Por ejemplo, &lt;br /&gt;
  el polinomio [[0,2,1],[1,3]] se interpreta como la fórmula&lt;br /&gt;
  (p0 ∧ p2 ∧ p1) ⊕ (p1 ∧ p3).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formP :: nat list list ⇒ form&lt;br /&gt;
  tal que (formP p) es la fórmula correspondiente al polinomio p. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     formP [[1,2],[3]]&lt;br /&gt;
     = Xor (And (Var 1) (And (Var 2) T)) (Xor (And (Var 3) T) (Xor T T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun formP :: &amp;quot;nat list list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formP ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     valorP :: (nat ⇒ bool) ⇒ nat list list ⇒ bool&lt;br /&gt;
  tal que (valorP i p) es el valor de la fórmula representada por el&lt;br /&gt;
  polinomio p en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorP (int1(1:=True,3:=True)) [[0,2,1],[1,3]] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo polinomio p, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i p = valorF i (formP p)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun valorP :: &amp;quot;(nat ⇒ bool) ⇒ nat list list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorP i ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorP:&lt;br /&gt;
  &amp;quot;valorP i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     productoM :: nat list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (productoM m p) es el producto del monomio p por el polinomio&lt;br /&gt;
  p. Por  ejemplo, &lt;br /&gt;
     productoM [1,3] [[1,2,4],[7],[4,1]] &lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun productoM :: &amp;quot;nat list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;productoM m ns = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos monomios es la conjunción de sus valores.&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorM_conc: &lt;br /&gt;
  &amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de un monomio por un polinomio es la conjunción de sus&lt;br /&gt;
  valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_productoM: &lt;br /&gt;
  &amp;quot;valorP i (productoM m p) = (valorM i m ∧ valorP i p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Definir la función&lt;br /&gt;
     producto :: nat list list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (producto p q) es el producto de los polinomios p y q. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     producto [[1,3],[2]] [[1,2,4],[7],[4,1]]&lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1],[2,1,2,4],[2,7],[2,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun producto :: &amp;quot;nat list list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;producto p q = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos polinomios es la disyunción exclusiva de &lt;br /&gt;
  sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorP_conc: &lt;br /&gt;
  &amp;quot;valorP i (xs @ ys) = (xor (valorP i xs) (valorP i ys))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de dos polinomios es la conjunción de sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_producto: &lt;br /&gt;
  &amp;quot;valorP i (producto p q) = (valorP i p ∧ valorP i q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Definir la función&lt;br /&gt;
     polinomio :: form ⇒ nat list list&lt;br /&gt;
  tal que (polinomio f) es el polinomio que representa la fórmula f. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     polinomio (Xor (Var 1) (Var 2))               = [[1],[2]]&lt;br /&gt;
     polinomio (And (Var 1) (Var 2))               = [[1,2]]&lt;br /&gt;
     polinomio (Xor (Var 1) T)                     = [[1],[]]&lt;br /&gt;
     polinomio (And (Var 1) T)                     = [[1]]]&lt;br /&gt;
     polinomio (And (Xor (Var 1) (Var 2)) (Var 3)) = [[1,3],[2,3]]&lt;br /&gt;
     polinomio (Xor (And (Var 1) (Var 2)) (Var 3)) = [[1,2],[3]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun polinomio :: &amp;quot;form ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;polinomio f = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de f es igual que el de su polinomio. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
theorem correccion_polinomio: &lt;br /&gt;
  &amp;quot;valorF i f = valorP i (polinomio f)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=527</id>
		<title>Relación 12</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=527"/>
		<updated>2014-02-09T04:02:16Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R12: Representación de fórmulas proposicionales mediante&lt;br /&gt;
  polinomios *}&lt;br /&gt;
&lt;br /&gt;
theory R12&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El objetivo de esta relación es definir un procedimiento para&lt;br /&gt;
  transformar fórmulas proposicionales (construidas con ⊤, ∧ y ⊕) en&lt;br /&gt;
  polinomios de la forma&lt;br /&gt;
     (p₁ ∧ … ∧ pₙ) ⊕ … ⊕ (q₁ ∧ … ∧ qₘ)&lt;br /&gt;
  y demostrar que, para cualquier interpretación I, el valor de las&lt;br /&gt;
  fórmulas coincide con la de su correspondiente polinomio. *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Las fórmulas proposicionales pueden definirse mediante&lt;br /&gt;
  las siguientes reglas:&lt;br /&gt;
  · ⊤ es una fórmula proposicional&lt;br /&gt;
  · Las variables proposicionales p_1, p_2, … son fórmulas&lt;br /&gt;
    proposicionales,&lt;br /&gt;
  · Si F y G son fórmulas proposicionales, entonces (F ∧ G) y (F ⊕ G)&lt;br /&gt;
    también lo son. &lt;br /&gt;
  donde ⊤ es una fórmula que siempre es verdadera, ∧ es la conjunción y&lt;br /&gt;
  ⊕ es la disyunción exclusiva. &lt;br /&gt;
&lt;br /&gt;
  Definir el tipo de datos form para representar las fórmulas&lt;br /&gt;
  proposicionales usando &lt;br /&gt;
  · T en lugar de ⊤,&lt;br /&gt;
  · (Var i) en lugar de p_i,&lt;br /&gt;
  · (And F G) en lugar de (F ∧ G) y&lt;br /&gt;
  · (Xor F G) en lugar de (F ⊕ G).&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
datatype form = T | Var nat | And form form | Xor form form&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Los siguientes ejemplos de fórmulas&lt;br /&gt;
     form1 = p0 ⊕ ⊤&lt;br /&gt;
     form2 = (p0 ⊕ p1) ⊕ (p0 ∧ p1)&lt;br /&gt;
  es usará en lo que sigue.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation form1 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form1 ≡ Xor (Var 0) T&amp;quot;&lt;br /&gt;
abbreviation form2 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form2 ≡ Xor (Xor (Var 0) (Var 1)) (And (Var 0) (Var 1))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     xor :: bool ⇒ bool ⇒ bool&lt;br /&gt;
  tal que (xor p q) es el valor de la disyunción exclusiva de p y q. Por&lt;br /&gt;
  ejemplo,&lt;br /&gt;
     xor False True = True&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
definition xor :: &amp;quot;bool ⇒ bool ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;xor x y ≡ (x∧¬y)∨(¬x∧y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Una interpretación es una aplicación de los naturales en&lt;br /&gt;
  los booleanos. Definir las siguientes interpretaciones&lt;br /&gt;
          | p0 | p1 | p2 | p3 | ...&lt;br /&gt;
     int1 | F  | F  | F  | F  | ...&lt;br /&gt;
     int2 | F  | V  | F  | F  | ...&lt;br /&gt;
     int3 | V  | F  | F  | F  | ...&lt;br /&gt;
     int3 | V  | V  | F  | F  | ...&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation int1 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int1 x ≡ False&amp;quot;&lt;br /&gt;
abbreviation int2 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int2 ≡ int1 (1 := True)&amp;quot;&lt;br /&gt;
abbreviation int3 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int3 ≡ int1 (0 := True)&amp;quot;&lt;br /&gt;
abbreviation int4 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int4 ≡ int1 (0 := True, 1 := True)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Dada una interpretación I, el valor de de una fórmula F&lt;br /&gt;
  repecto de I, I(F), se define por&lt;br /&gt;
  · T, si F es ⊤;&lt;br /&gt;
  · I(n), si F es p_n;&lt;br /&gt;
  · I(G) ∧ I(H), si F es (G ∧ H);&lt;br /&gt;
  · I(G) ⊕ I(H), si F es (G ⊕ H).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     valorF :: (nat ⇒ bool) ⇒ form ⇒ bool&lt;br /&gt;
  tal que (valorF i f) es el valor de la fórmula f respecto de la&lt;br /&gt;
  interpretación i. Por ejemplo, &lt;br /&gt;
     valorF int1 form1 = True&lt;br /&gt;
     valorF int3 form1 = False&lt;br /&gt;
     valorF int1 form2 = False&lt;br /&gt;
     valorF int2 form2 = True&lt;br /&gt;
     valorF int3 form2 = True&lt;br /&gt;
     valorF int4 form2 = True&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorF :: &amp;quot;(nat ⇒ bool) ⇒ form ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorF i T = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Var n) = i n&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (And G H) = ((valorF i G) ∧ (valorF i H))&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Xor G H) = xor (valorF i G) (valorF i H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un monomio es una lista de números naturales y se puede&lt;br /&gt;
  interpretar como la conjunción de variables proposionales cuyos&lt;br /&gt;
  índices son los números de la lista. Por ejemplo, el monomio [0,2,1]&lt;br /&gt;
  se interpreta como la fórmula (p0 ∧ p2 ∧ p1).  &lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formM :: nat list ⇒ form&lt;br /&gt;
  tal que (formM m) es la fórmula correspondiente al monomio. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     formM [0,2,1] = And (Var 0) (And (Var 2) (And (Var 1) T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun formM :: &amp;quot;nat list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formM [] = T&amp;quot;&lt;br /&gt;
| &amp;quot;formM (x#xs) = And (Var x) (formM xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;formM [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir, por recursión, la función&lt;br /&gt;
     valorM :: (nat ⇒ bool) ⇒ nat list ⇒ bool&lt;br /&gt;
  tal que (valorM i m) es el valor de la fórmula representada por el&lt;br /&gt;
  monomio m en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorM int1 [0,2,1]                            = False&lt;br /&gt;
     valorM (int1(0:=True,1:=True,2:=True)) [0,2,1] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo monomio m, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i m = valorF i (formM m)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorM :: &amp;quot;(nat ⇒ bool) ⇒ nat list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorM i ns = valorF i (formM ns)&amp;quot;&lt;br /&gt;
value &amp;quot;valorM int1 [0,2,1]&amp;quot;&lt;br /&gt;
value &amp;quot;valorM (int1(0:=True,1:=True,2:=True)) [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorM:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Un polinomio es una lista de monomios y se puede&lt;br /&gt;
  interpretar como la disyunción exclusiva de los monomios. Por ejemplo, &lt;br /&gt;
  el polinomio [[0,2,1],[1,3]] se interpreta como la fórmula&lt;br /&gt;
  (p0 ∧ p2 ∧ p1) ⊕ (p1 ∧ p3).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formP :: nat list list ⇒ form&lt;br /&gt;
  tal que (formP p) es la fórmula correspondiente al polinomio p. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     formP [[1,2],[3]]&lt;br /&gt;
     = Xor (And (Var 1) (And (Var 2) T)) (Xor (And (Var 3) T) (Xor T T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun formP :: &amp;quot;nat list list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formP ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     valorP :: (nat ⇒ bool) ⇒ nat list list ⇒ bool&lt;br /&gt;
  tal que (valorP i p) es el valor de la fórmula representada por el&lt;br /&gt;
  polinomio p en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorP (int1(1:=True,3:=True)) [[0,2,1],[1,3]] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo polinomio p, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i p = valorF i (formP p)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun valorP :: &amp;quot;(nat ⇒ bool) ⇒ nat list list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorP i ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorP:&lt;br /&gt;
  &amp;quot;valorP i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     productoM :: nat list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (productoM m p) es el producto del monomio p por el polinomio&lt;br /&gt;
  p. Por  ejemplo, &lt;br /&gt;
     productoM [1,3] [[1,2,4],[7],[4,1]] &lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun productoM :: &amp;quot;nat list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;productoM m ns = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos monomios es la conjunción de sus valores.&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorM_conc: &lt;br /&gt;
  &amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de un monomio por un polinomio es la conjunción de sus&lt;br /&gt;
  valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_productoM: &lt;br /&gt;
  &amp;quot;valorP i (productoM m p) = (valorM i m ∧ valorP i p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Definir la función&lt;br /&gt;
     producto :: nat list list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (producto p q) es el producto de los polinomios p y q. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     producto [[1,3],[2]] [[1,2,4],[7],[4,1]]&lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1],[2,1,2,4],[2,7],[2,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun producto :: &amp;quot;nat list list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;producto p q = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos polinomios es la disyunción exclusiva de &lt;br /&gt;
  sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorP_conc: &lt;br /&gt;
  &amp;quot;valorP i (xs @ ys) = (xor (valorP i xs) (valorP i ys))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de dos polinomios es la conjunción de sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_producto: &lt;br /&gt;
  &amp;quot;valorP i (producto p q) = (valorP i p ∧ valorP i q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Definir la función&lt;br /&gt;
     polinomio :: form ⇒ nat list list&lt;br /&gt;
  tal que (polinomio f) es el polinomio que representa la fórmula f. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     polinomio (Xor (Var 1) (Var 2))               = [[1],[2]]&lt;br /&gt;
     polinomio (And (Var 1) (Var 2))               = [[1,2]]&lt;br /&gt;
     polinomio (Xor (Var 1) T)                     = [[1],[]]&lt;br /&gt;
     polinomio (And (Var 1) T)                     = [[1]]]&lt;br /&gt;
     polinomio (And (Xor (Var 1) (Var 2)) (Var 3)) = [[1,3],[2,3]]&lt;br /&gt;
     polinomio (Xor (And (Var 1) (Var 2)) (Var 3)) = [[1,2],[3]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun polinomio :: &amp;quot;form ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;polinomio f = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de f es igual que el de su polinomio. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
theorem correccion_polinomio: &lt;br /&gt;
  &amp;quot;valorF i f = valorP i (polinomio f)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=526</id>
		<title>Relación 12</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=526"/>
		<updated>2014-02-09T04:01:02Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R12: Representación de fórmulas proposicionales mediante&lt;br /&gt;
  polinomios *}&lt;br /&gt;
&lt;br /&gt;
theory R12&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El objetivo de esta relación es definir un procedimiento para&lt;br /&gt;
  transformar fórmulas proposicionales (construidas con ⊤, ∧ y ⊕) en&lt;br /&gt;
  polinomios de la forma&lt;br /&gt;
     (p₁ ∧ … ∧ pₙ) ⊕ … ⊕ (q₁ ∧ … ∧ qₘ)&lt;br /&gt;
  y demostrar que, para cualquier interpretación I, el valor de las&lt;br /&gt;
  fórmulas coincide con la de su correspondiente polinomio. *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Las fórmulas proposicionales pueden definirse mediante&lt;br /&gt;
  las siguientes reglas:&lt;br /&gt;
  · ⊤ es una fórmula proposicional&lt;br /&gt;
  · Las variables proposicionales p_1, p_2, … son fórmulas&lt;br /&gt;
    proposicionales,&lt;br /&gt;
  · Si F y G son fórmulas proposicionales, entonces (F ∧ G) y (F ⊕ G)&lt;br /&gt;
    también lo son. &lt;br /&gt;
  donde ⊤ es una fórmula que siempre es verdadera, ∧ es la conjunción y&lt;br /&gt;
  ⊕ es la disyunción exclusiva. &lt;br /&gt;
&lt;br /&gt;
  Definir el tipo de datos form para representar las fórmulas&lt;br /&gt;
  proposicionales usando &lt;br /&gt;
  · T en lugar de ⊤,&lt;br /&gt;
  · (Var i) en lugar de p_i,&lt;br /&gt;
  · (And F G) en lugar de (F ∧ G) y&lt;br /&gt;
  · (Xor F G) en lugar de (F ⊕ G).&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
datatype form = T | Var nat | And form form | Xor form form&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Los siguientes ejemplos de fórmulas&lt;br /&gt;
     form1 = p0 ⊕ ⊤&lt;br /&gt;
     form2 = (p0 ⊕ p1) ⊕ (p0 ∧ p1)&lt;br /&gt;
  es usará en lo que sigue.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation form1 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form1 ≡ Xor (Var 0) T&amp;quot;&lt;br /&gt;
abbreviation form2 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form2 ≡ Xor (Xor (Var 0) (Var 1)) (And (Var 0) (Var 1))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     xor :: bool ⇒ bool ⇒ bool&lt;br /&gt;
  tal que (xor p q) es el valor de la disyunción exclusiva de p y q. Por&lt;br /&gt;
  ejemplo,&lt;br /&gt;
     xor False True = True&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
definition xor :: &amp;quot;bool ⇒ bool ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;xor x y ≡ (x∧¬y)∨(¬x∧y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Una interpretación es una aplicación de los naturales en&lt;br /&gt;
  los booleanos. Definir las siguientes interpretaciones&lt;br /&gt;
          | p0 | p1 | p2 | p3 | ...&lt;br /&gt;
     int1 | F  | F  | F  | F  | ...&lt;br /&gt;
     int2 | F  | V  | F  | F  | ...&lt;br /&gt;
     int3 | V  | F  | F  | F  | ...&lt;br /&gt;
     int3 | V  | V  | F  | F  | ...&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation int1 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int1 x ≡ False&amp;quot;&lt;br /&gt;
abbreviation int2 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int2 ≡ int1 (1 := True)&amp;quot;&lt;br /&gt;
abbreviation int3 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int3 ≡ int1 (0 := True)&amp;quot;&lt;br /&gt;
abbreviation int4 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int4 ≡ int1 (0 := True, 1 := True)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Dada una interpretación I, el valor de de una fórmula F&lt;br /&gt;
  repecto de I, I(F), se define por&lt;br /&gt;
  · T, si F es ⊤;&lt;br /&gt;
  · I(n), si F es p_n;&lt;br /&gt;
  · I(G) ∧ I(H), si F es (G ∧ H);&lt;br /&gt;
  · I(G) ⊕ I(H), si F es (G ⊕ H).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     valorF :: (nat ⇒ bool) ⇒ form ⇒ bool&lt;br /&gt;
  tal que (valorF i f) es el valor de la fórmula f respecto de la&lt;br /&gt;
  interpretación i. Por ejemplo, &lt;br /&gt;
     valorF int1 form1 = True&lt;br /&gt;
     valorF int3 form1 = False&lt;br /&gt;
     valorF int1 form2 = False&lt;br /&gt;
     valorF int2 form2 = True&lt;br /&gt;
     valorF int3 form2 = True&lt;br /&gt;
     valorF int4 form2 = True&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorF :: &amp;quot;(nat ⇒ bool) ⇒ form ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorF i T = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Var n) = i n&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (And G H) = ((valorF i G) ∧ (valorF i H))&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Xor G H) = xor (valorF i G) (valorF i H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un monomio es una lista de números naturales y se puede&lt;br /&gt;
  interpretar como la conjunción de variables proposionales cuyos&lt;br /&gt;
  índices son los números de la lista. Por ejemplo, el monomio [0,2,1]&lt;br /&gt;
  se interpreta como la fórmula (p0 ∧ p2 ∧ p1).  &lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formM :: nat list ⇒ form&lt;br /&gt;
  tal que (formM m) es la fórmula correspondiente al monomio. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     formM [0,2,1] = And (Var 0) (And (Var 2) (And (Var 1) T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun formM :: &amp;quot;nat list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formM [] = T&amp;quot;&lt;br /&gt;
| &amp;quot;formM (x#xs) = And (Var x) (formM xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;formM [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir, por recursión, la función&lt;br /&gt;
     valorM :: (nat ⇒ bool) ⇒ nat list ⇒ bool&lt;br /&gt;
  tal que (valorM i m) es el valor de la fórmula representada por el&lt;br /&gt;
  monomio m en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorM int1 [0,2,1]                            = False&lt;br /&gt;
     valorM (int1(0:=True,1:=True,2:=True)) [0,2,1] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo monomio m, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i m = valorF i (formM m)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorM :: &amp;quot;(nat ⇒ bool) ⇒ nat list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorM i ns = valorF i (formM ns)&amp;quot;&lt;br /&gt;
value &amp;quot;valorM int1 [0,2,1]&amp;quot;&lt;br /&gt;
value &amp;quot;valorM (int1(0:=True,1:=True,2:=True)) [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorM:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Un polinomio es una lista de monomios y se puede&lt;br /&gt;
  interpretar como la disyunción exclusiva de los monomios. Por ejemplo, &lt;br /&gt;
  el polinomio [[0,2,1],[1,3]] se interpreta como la fórmula&lt;br /&gt;
  (p0 ∧ p2 ∧ p1) ⊕ (p1 ∧ p3).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formP :: nat list list ⇒ form&lt;br /&gt;
  tal que (formP p) es la fórmula correspondiente al polinomio p. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     formP [[1,2],[3]]&lt;br /&gt;
     = Xor (And (Var 1) (And (Var 2) T)) (Xor (And (Var 3) T) (Xor T T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun formP :: &amp;quot;nat list list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formP ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     valorP :: (nat ⇒ bool) ⇒ nat list list ⇒ bool&lt;br /&gt;
  tal que (valorP i p) es el valor de la fórmula representada por el&lt;br /&gt;
  polinomio p en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorP (int1(1:=True,3:=True)) [[0,2,1],[1,3]] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo polinomio p, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i p = valorF i (formP p)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun valorP :: &amp;quot;(nat ⇒ bool) ⇒ nat list list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorP i ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorP:&lt;br /&gt;
  &amp;quot;valorP i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     productoM :: nat list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (productoM m p) es el producto del monomio p por el polinomio&lt;br /&gt;
  p. Por  ejemplo, &lt;br /&gt;
     productoM [1,3] [[1,2,4],[7],[4,1]] &lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun productoM :: &amp;quot;nat list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;productoM m ns = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos monomios es la conjunción de sus valores.&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorM_conc: &lt;br /&gt;
  &amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de un monomio por un polinomio es la conjunción de sus&lt;br /&gt;
  valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_productoM: &lt;br /&gt;
  &amp;quot;valorP i (productoM m p) = (valorM i m ∧ valorP i p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Definir la función&lt;br /&gt;
     producto :: nat list list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (producto p q) es el producto de los polinomios p y q. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     producto [[1,3],[2]] [[1,2,4],[7],[4,1]]&lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1],[2,1,2,4],[2,7],[2,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun producto :: &amp;quot;nat list list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;producto p q = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos polinomios es la disyunción exclusiva de &lt;br /&gt;
  sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorP_conc: &lt;br /&gt;
  &amp;quot;valorP i (xs @ ys) = (xor (valorP i xs) (valorP i ys))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de dos polinomios es la conjunción de sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_producto: &lt;br /&gt;
  &amp;quot;valorP i (producto p q) = (valorP i p ∧ valorP i q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Definir la función&lt;br /&gt;
     polinomio :: form ⇒ nat list list&lt;br /&gt;
  tal que (polinomio f) es el polinomio que representa la fórmula f. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     polinomio (Xor (Var 1) (Var 2))               = [[1],[2]]&lt;br /&gt;
     polinomio (And (Var 1) (Var 2))               = [[1,2]]&lt;br /&gt;
     polinomio (Xor (Var 1) T)                     = [[1],[]]&lt;br /&gt;
     polinomio (And (Var 1) T)                     = [[1]]]&lt;br /&gt;
     polinomio (And (Xor (Var 1) (Var 2)) (Var 3)) = [[1,3],[2,3]]&lt;br /&gt;
     polinomio (Xor (And (Var 1) (Var 2)) (Var 3)) = [[1,2],[3]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun polinomio :: &amp;quot;form ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;polinomio f = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de f es igual que el de su polinomio. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
theorem correccion_polinomio: &lt;br /&gt;
  &amp;quot;valorF i f = valorP i (polinomio f)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=525</id>
		<title>Relación 12</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=525"/>
		<updated>2014-02-09T03:53:48Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R12: Representación de fórmulas proposicionales mediante&lt;br /&gt;
  polinomios *}&lt;br /&gt;
&lt;br /&gt;
theory R12&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El objetivo de esta relación es definir un procedimiento para&lt;br /&gt;
  transformar fórmulas proposicionales (construidas con ⊤, ∧ y ⊕) en&lt;br /&gt;
  polinomios de la forma&lt;br /&gt;
     (p₁ ∧ … ∧ pₙ) ⊕ … ⊕ (q₁ ∧ … ∧ qₘ)&lt;br /&gt;
  y demostrar que, para cualquier interpretación I, el valor de las&lt;br /&gt;
  fórmulas coincide con la de su correspondiente polinomio. *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Las fórmulas proposicionales pueden definirse mediante&lt;br /&gt;
  las siguientes reglas:&lt;br /&gt;
  · ⊤ es una fórmula proposicional&lt;br /&gt;
  · Las variables proposicionales p_1, p_2, … son fórmulas&lt;br /&gt;
    proposicionales,&lt;br /&gt;
  · Si F y G son fórmulas proposicionales, entonces (F ∧ G) y (F ⊕ G)&lt;br /&gt;
    también lo son. &lt;br /&gt;
  donde ⊤ es una fórmula que siempre es verdadera, ∧ es la conjunción y&lt;br /&gt;
  ⊕ es la disyunción exclusiva. &lt;br /&gt;
&lt;br /&gt;
  Definir el tipo de datos form para representar las fórmulas&lt;br /&gt;
  proposicionales usando &lt;br /&gt;
  · T en lugar de ⊤,&lt;br /&gt;
  · (Var i) en lugar de p_i,&lt;br /&gt;
  · (And F G) en lugar de (F ∧ G) y&lt;br /&gt;
  · (Xor F G) en lugar de (F ⊕ G).&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
datatype form = T | Var nat | And form form | Xor form form&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Los siguientes ejemplos de fórmulas&lt;br /&gt;
     form1 = p0 ⊕ ⊤&lt;br /&gt;
     form2 = (p0 ⊕ p1) ⊕ (p0 ∧ p1)&lt;br /&gt;
  es usará en lo que sigue.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation form1 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form1 ≡ Xor (Var 0) T&amp;quot;&lt;br /&gt;
abbreviation form2 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form2 ≡ Xor (Xor (Var 0) (Var 1)) (And (Var 0) (Var 1))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     xor :: bool ⇒ bool ⇒ bool&lt;br /&gt;
  tal que (xor p q) es el valor de la disyunción exclusiva de p y q. Por&lt;br /&gt;
  ejemplo,&lt;br /&gt;
     xor False True = True&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
definition xor :: &amp;quot;bool ⇒ bool ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;xor x y ≡ (x∧¬y)∨(¬x∧y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Una interpretación es una aplicación de los naturales en&lt;br /&gt;
  los booleanos. Definir las siguientes interpretaciones&lt;br /&gt;
          | p0 | p1 | p2 | p3 | ...&lt;br /&gt;
     int1 | F  | F  | F  | F  | ...&lt;br /&gt;
     int2 | F  | V  | F  | F  | ...&lt;br /&gt;
     int3 | V  | F  | F  | F  | ...&lt;br /&gt;
     int3 | V  | V  | F  | F  | ...&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation int1 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int1 x ≡ False&amp;quot;&lt;br /&gt;
abbreviation int2 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int2 ≡ int1 (1 := True)&amp;quot;&lt;br /&gt;
abbreviation int3 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int3 ≡ int1 (0 := True)&amp;quot;&lt;br /&gt;
abbreviation int4 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int4 ≡ int1 (0 := True, 1 := True)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Dada una interpretación I, el valor de de una fórmula F&lt;br /&gt;
  repecto de I, I(F), se define por&lt;br /&gt;
  · T, si F es ⊤;&lt;br /&gt;
  · I(n), si F es p_n;&lt;br /&gt;
  · I(G) ∧ I(H), si F es (G ∧ H);&lt;br /&gt;
  · I(G) ⊕ I(H), si F es (G ⊕ H).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     valorF :: (nat ⇒ bool) ⇒ form ⇒ bool&lt;br /&gt;
  tal que (valorF i f) es el valor de la fórmula f respecto de la&lt;br /&gt;
  interpretación i. Por ejemplo, &lt;br /&gt;
     valorF int1 form1 = True&lt;br /&gt;
     valorF int3 form1 = False&lt;br /&gt;
     valorF int1 form2 = False&lt;br /&gt;
     valorF int2 form2 = True&lt;br /&gt;
     valorF int3 form2 = True&lt;br /&gt;
     valorF int4 form2 = True&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorF :: &amp;quot;(nat ⇒ bool) ⇒ form ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorF i T = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Var n) = i n&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (And G H) = ((valorF i G) ∧ (valorF i H))&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Xor G H) = xor (valorF i G) (valorF i H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un monomio es una lista de números naturales y se puede&lt;br /&gt;
  interpretar como la conjunción de variables proposionales cuyos&lt;br /&gt;
  índices son los números de la lista. Por ejemplo, el monomio [0,2,1]&lt;br /&gt;
  se interpreta como la fórmula (p0 ∧ p2 ∧ p1).  &lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formM :: nat list ⇒ form&lt;br /&gt;
  tal que (formM m) es la fórmula correspondiente al monomio. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     formM [0,2,1] = And (Var 0) (And (Var 2) (And (Var 1) T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun formM :: &amp;quot;nat list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formM [] = T&amp;quot;&lt;br /&gt;
| &amp;quot;formM (x#xs) = And (Var x) (formM xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;formM [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir, por recursión, la función&lt;br /&gt;
     valorM :: (nat ⇒ bool) ⇒ nat list ⇒ bool&lt;br /&gt;
  tal que (valorM i m) es el valor de la fórmula representada por el&lt;br /&gt;
  monomio m en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorM int1 [0,2,1]                            = False&lt;br /&gt;
     valorM (int1(0:=True,1:=True,2:=True)) [0,2,1] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo monomio m, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i m = valorF i (formM m)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun valorM :: &amp;quot;(nat ⇒ bool) ⇒ nat list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorM i ns = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorM:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Un polinomio es una lista de monomios y se puede&lt;br /&gt;
  interpretar como la disyunción exclusiva de los monomios. Por ejemplo, &lt;br /&gt;
  el polinomio [[0,2,1],[1,3]] se interpreta como la fórmula&lt;br /&gt;
  (p0 ∧ p2 ∧ p1) ⊕ (p1 ∧ p3).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formP :: nat list list ⇒ form&lt;br /&gt;
  tal que (formP p) es la fórmula correspondiente al polinomio p. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     formP [[1,2],[3]]&lt;br /&gt;
     = Xor (And (Var 1) (And (Var 2) T)) (Xor (And (Var 3) T) (Xor T T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun formP :: &amp;quot;nat list list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formP ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     valorP :: (nat ⇒ bool) ⇒ nat list list ⇒ bool&lt;br /&gt;
  tal que (valorP i p) es el valor de la fórmula representada por el&lt;br /&gt;
  polinomio p en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorP (int1(1:=True,3:=True)) [[0,2,1],[1,3]] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo polinomio p, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i p = valorF i (formP p)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun valorP :: &amp;quot;(nat ⇒ bool) ⇒ nat list list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorP i ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorP:&lt;br /&gt;
  &amp;quot;valorP i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     productoM :: nat list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (productoM m p) es el producto del monomio p por el polinomio&lt;br /&gt;
  p. Por  ejemplo, &lt;br /&gt;
     productoM [1,3] [[1,2,4],[7],[4,1]] &lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun productoM :: &amp;quot;nat list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;productoM m ns = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos monomios es la conjunción de sus valores.&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorM_conc: &lt;br /&gt;
  &amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de un monomio por un polinomio es la conjunción de sus&lt;br /&gt;
  valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_productoM: &lt;br /&gt;
  &amp;quot;valorP i (productoM m p) = (valorM i m ∧ valorP i p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Definir la función&lt;br /&gt;
     producto :: nat list list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (producto p q) es el producto de los polinomios p y q. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     producto [[1,3],[2]] [[1,2,4],[7],[4,1]]&lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1],[2,1,2,4],[2,7],[2,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun producto :: &amp;quot;nat list list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;producto p q = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos polinomios es la disyunción exclusiva de &lt;br /&gt;
  sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorP_conc: &lt;br /&gt;
  &amp;quot;valorP i (xs @ ys) = (xor (valorP i xs) (valorP i ys))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de dos polinomios es la conjunción de sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_producto: &lt;br /&gt;
  &amp;quot;valorP i (producto p q) = (valorP i p ∧ valorP i q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Definir la función&lt;br /&gt;
     polinomio :: form ⇒ nat list list&lt;br /&gt;
  tal que (polinomio f) es el polinomio que representa la fórmula f. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     polinomio (Xor (Var 1) (Var 2))               = [[1],[2]]&lt;br /&gt;
     polinomio (And (Var 1) (Var 2))               = [[1,2]]&lt;br /&gt;
     polinomio (Xor (Var 1) T)                     = [[1],[]]&lt;br /&gt;
     polinomio (And (Var 1) T)                     = [[1]]]&lt;br /&gt;
     polinomio (And (Xor (Var 1) (Var 2)) (Var 3)) = [[1,3],[2,3]]&lt;br /&gt;
     polinomio (Xor (And (Var 1) (Var 2)) (Var 3)) = [[1,2],[3]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun polinomio :: &amp;quot;form ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;polinomio f = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de f es igual que el de su polinomio. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
theorem correccion_polinomio: &lt;br /&gt;
  &amp;quot;valorF i f = valorP i (polinomio f)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=524</id>
		<title>Relación 12</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=524"/>
		<updated>2014-02-09T03:48:06Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R12: Representación de fórmulas proposicionales mediante&lt;br /&gt;
  polinomios *}&lt;br /&gt;
&lt;br /&gt;
theory R12&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El objetivo de esta relación es definir un procedimiento para&lt;br /&gt;
  transformar fórmulas proposicionales (construidas con ⊤, ∧ y ⊕) en&lt;br /&gt;
  polinomios de la forma&lt;br /&gt;
     (p₁ ∧ … ∧ pₙ) ⊕ … ⊕ (q₁ ∧ … ∧ qₘ)&lt;br /&gt;
  y demostrar que, para cualquier interpretación I, el valor de las&lt;br /&gt;
  fórmulas coincide con la de su correspondiente polinomio. *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Las fórmulas proposicionales pueden definirse mediante&lt;br /&gt;
  las siguientes reglas:&lt;br /&gt;
  · ⊤ es una fórmula proposicional&lt;br /&gt;
  · Las variables proposicionales p_1, p_2, … son fórmulas&lt;br /&gt;
    proposicionales,&lt;br /&gt;
  · Si F y G son fórmulas proposicionales, entonces (F ∧ G) y (F ⊕ G)&lt;br /&gt;
    también lo son. &lt;br /&gt;
  donde ⊤ es una fórmula que siempre es verdadera, ∧ es la conjunción y&lt;br /&gt;
  ⊕ es la disyunción exclusiva. &lt;br /&gt;
&lt;br /&gt;
  Definir el tipo de datos form para representar las fórmulas&lt;br /&gt;
  proposicionales usando &lt;br /&gt;
  · T en lugar de ⊤,&lt;br /&gt;
  · (Var i) en lugar de p_i,&lt;br /&gt;
  · (And F G) en lugar de (F ∧ G) y&lt;br /&gt;
  · (Xor F G) en lugar de (F ⊕ G).&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
datatype form = T | Var nat | And form form | Xor form form&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Los siguientes ejemplos de fórmulas&lt;br /&gt;
     form1 = p0 ⊕ ⊤&lt;br /&gt;
     form2 = (p0 ⊕ p1) ⊕ (p0 ∧ p1)&lt;br /&gt;
  es usará en lo que sigue.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation form1 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form1 ≡ Xor (Var 0) T&amp;quot;&lt;br /&gt;
abbreviation form2 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form2 ≡ Xor (Xor (Var 0) (Var 1)) (And (Var 0) (Var 1))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     xor :: bool ⇒ bool ⇒ bool&lt;br /&gt;
  tal que (xor p q) es el valor de la disyunción exclusiva de p y q. Por&lt;br /&gt;
  ejemplo,&lt;br /&gt;
     xor False True = True&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
definition xor :: &amp;quot;bool ⇒ bool ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;xor x y ≡ (x∧¬y)∨(¬x∧y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Una interpretación es una aplicación de los naturales en&lt;br /&gt;
  los booleanos. Definir las siguientes interpretaciones&lt;br /&gt;
          | p0 | p1 | p2 | p3 | ...&lt;br /&gt;
     int1 | F  | F  | F  | F  | ...&lt;br /&gt;
     int2 | F  | V  | F  | F  | ...&lt;br /&gt;
     int3 | V  | F  | F  | F  | ...&lt;br /&gt;
     int3 | V  | V  | F  | F  | ...&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation int1 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int1 x ≡ False&amp;quot;&lt;br /&gt;
abbreviation int2 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int2 ≡ int1 (1 := True)&amp;quot;&lt;br /&gt;
abbreviation int3 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int3 ≡ int1 (0 := True)&amp;quot;&lt;br /&gt;
abbreviation int4 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int4 ≡ int1 (0 := True, 1 := True)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Dada una interpretación I, el valor de de una fórmula F&lt;br /&gt;
  repecto de I, I(F), se define por&lt;br /&gt;
  · T, si F es ⊤;&lt;br /&gt;
  · I(n), si F es p_n;&lt;br /&gt;
  · I(G) ∧ I(H), si F es (G ∧ H);&lt;br /&gt;
  · I(G) ⊕ I(H), si F es (G ⊕ H).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     valorF :: (nat ⇒ bool) ⇒ form ⇒ bool&lt;br /&gt;
  tal que (valorF i f) es el valor de la fórmula f respecto de la&lt;br /&gt;
  interpretación i. Por ejemplo, &lt;br /&gt;
     valorF int1 form1 = True&lt;br /&gt;
     valorF int3 form1 = False&lt;br /&gt;
     valorF int1 form2 = False&lt;br /&gt;
     valorF int2 form2 = True&lt;br /&gt;
     valorF int3 form2 = True&lt;br /&gt;
     valorF int4 form2 = True&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun valorF :: &amp;quot;(nat ⇒ bool) ⇒ form ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorF i T = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Var n) = i n&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (And G H) = ((valorF i G) ∧ (valorF i H))&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Xor G H) = xor (valorF i G) (valorF i H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un monomio es una lista de números naturales y se puede&lt;br /&gt;
  interpretar como la conjunción de variables proposionales cuyos&lt;br /&gt;
  índices son los números de la lista. Por ejemplo, el monomio [0,2,1]&lt;br /&gt;
  se interpreta como la fórmula (p0 ∧ p2 ∧ p1).  &lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formM :: nat list ⇒ form&lt;br /&gt;
  tal que (formM m) es la fórmula correspondiente al monomio. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     formM [0,2,1] = And (Var 0) (And (Var 2) (And (Var 1) T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun formM :: &amp;quot;nat list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formM ns = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir, por recursión, la función&lt;br /&gt;
     valorM :: (nat ⇒ bool) ⇒ nat list ⇒ bool&lt;br /&gt;
  tal que (valorM i m) es el valor de la fórmula representada por el&lt;br /&gt;
  monomio m en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorM int1 [0,2,1]                            = False&lt;br /&gt;
     valorM (int1(0:=True,1:=True,2:=True)) [0,2,1] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo monomio m, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i m = valorF i (formM m)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun valorM :: &amp;quot;(nat ⇒ bool) ⇒ nat list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorM i ns = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorM:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Un polinomio es una lista de monomios y se puede&lt;br /&gt;
  interpretar como la disyunción exclusiva de los monomios. Por ejemplo, &lt;br /&gt;
  el polinomio [[0,2,1],[1,3]] se interpreta como la fórmula&lt;br /&gt;
  (p0 ∧ p2 ∧ p1) ⊕ (p1 ∧ p3).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formP :: nat list list ⇒ form&lt;br /&gt;
  tal que (formP p) es la fórmula correspondiente al polinomio p. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     formP [[1,2],[3]]&lt;br /&gt;
     = Xor (And (Var 1) (And (Var 2) T)) (Xor (And (Var 3) T) (Xor T T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun formP :: &amp;quot;nat list list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formP ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     valorP :: (nat ⇒ bool) ⇒ nat list list ⇒ bool&lt;br /&gt;
  tal que (valorP i p) es el valor de la fórmula representada por el&lt;br /&gt;
  polinomio p en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorP (int1(1:=True,3:=True)) [[0,2,1],[1,3]] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo polinomio p, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i p = valorF i (formP p)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun valorP :: &amp;quot;(nat ⇒ bool) ⇒ nat list list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorP i ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorP:&lt;br /&gt;
  &amp;quot;valorP i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     productoM :: nat list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (productoM m p) es el producto del monomio p por el polinomio&lt;br /&gt;
  p. Por  ejemplo, &lt;br /&gt;
     productoM [1,3] [[1,2,4],[7],[4,1]] &lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun productoM :: &amp;quot;nat list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;productoM m ns = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos monomios es la conjunción de sus valores.&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorM_conc: &lt;br /&gt;
  &amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de un monomio por un polinomio es la conjunción de sus&lt;br /&gt;
  valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_productoM: &lt;br /&gt;
  &amp;quot;valorP i (productoM m p) = (valorM i m ∧ valorP i p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Definir la función&lt;br /&gt;
     producto :: nat list list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (producto p q) es el producto de los polinomios p y q. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     producto [[1,3],[2]] [[1,2,4],[7],[4,1]]&lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1],[2,1,2,4],[2,7],[2,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun producto :: &amp;quot;nat list list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;producto p q = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos polinomios es la disyunción exclusiva de &lt;br /&gt;
  sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorP_conc: &lt;br /&gt;
  &amp;quot;valorP i (xs @ ys) = (xor (valorP i xs) (valorP i ys))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de dos polinomios es la conjunción de sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_producto: &lt;br /&gt;
  &amp;quot;valorP i (producto p q) = (valorP i p ∧ valorP i q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Definir la función&lt;br /&gt;
     polinomio :: form ⇒ nat list list&lt;br /&gt;
  tal que (polinomio f) es el polinomio que representa la fórmula f. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     polinomio (Xor (Var 1) (Var 2))               = [[1],[2]]&lt;br /&gt;
     polinomio (And (Var 1) (Var 2))               = [[1,2]]&lt;br /&gt;
     polinomio (Xor (Var 1) T)                     = [[1],[]]&lt;br /&gt;
     polinomio (And (Var 1) T)                     = [[1]]]&lt;br /&gt;
     polinomio (And (Xor (Var 1) (Var 2)) (Var 3)) = [[1,3],[2,3]]&lt;br /&gt;
     polinomio (Xor (And (Var 1) (Var 2)) (Var 3)) = [[1,2],[3]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun polinomio :: &amp;quot;form ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;polinomio f = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de f es igual que el de su polinomio. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
theorem correccion_polinomio: &lt;br /&gt;
  &amp;quot;valorF i f = valorP i (polinomio f)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=523</id>
		<title>Relación 12</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=523"/>
		<updated>2014-02-09T02:58:09Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R12: Representación de fórmulas proposicionales mediante&lt;br /&gt;
  polinomios *}&lt;br /&gt;
&lt;br /&gt;
theory R12&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El objetivo de esta relación es definir un procedimiento para&lt;br /&gt;
  transformar fórmulas proposicionales (construidas con ⊤, ∧ y ⊕) en&lt;br /&gt;
  polinomios de la forma&lt;br /&gt;
     (p₁ ∧ … ∧ pₙ) ⊕ … ⊕ (q₁ ∧ … ∧ qₘ)&lt;br /&gt;
  y demostrar que, para cualquier interpretación I, el valor de las&lt;br /&gt;
  fórmulas coincide con la de su correspondiente polinomio. *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Las fórmulas proposicionales pueden definirse mediante&lt;br /&gt;
  las siguientes reglas:&lt;br /&gt;
  · ⊤ es una fórmula proposicional&lt;br /&gt;
  · Las variables proposicionales p_1, p_2, … son fórmulas&lt;br /&gt;
    proposicionales,&lt;br /&gt;
  · Si F y G son fórmulas proposicionales, entonces (F ∧ G) y (F ⊕ G)&lt;br /&gt;
    también lo son. &lt;br /&gt;
  donde ⊤ es una fórmula que siempre es verdadera, ∧ es la conjunción y&lt;br /&gt;
  ⊕ es la disyunción exclusiva. &lt;br /&gt;
&lt;br /&gt;
  Definir el tipo de datos form para representar las fórmulas&lt;br /&gt;
  proposicionales usando &lt;br /&gt;
  · T en lugar de ⊤,&lt;br /&gt;
  · (Var i) en lugar de p_i,&lt;br /&gt;
  · (And F G) en lugar de (F ∧ G) y&lt;br /&gt;
  · (Xor F G) en lugar de (F ⊕ G).&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
datatype form = T | Var nat | And form form | Xor form form&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Los siguientes ejemplos de fórmulas&lt;br /&gt;
     form1 = p0 ⊕ ⊤&lt;br /&gt;
     form2 = (p0 ⊕ p1) ⊕ (p0 ∧ p1)&lt;br /&gt;
  es usará en lo que sigue.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation form1 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form1 ≡ Xor (Var 0) T&amp;quot;&lt;br /&gt;
abbreviation form2 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form2 ≡ Xor (Xor (Var 0) (Var 1)) (And (Var 0) (Var 1))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     xor :: bool ⇒ bool ⇒ bool&lt;br /&gt;
  tal que (xor p q) es el valor de la disyunción exclusiva de p y q. Por&lt;br /&gt;
  ejemplo,&lt;br /&gt;
     xor False True = True&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
definition xor :: &amp;quot;bool ⇒ bool ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;xor x y ≡ (x∧¬y)∨(¬x∧y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Una interpretación es una aplicación de los naturales en&lt;br /&gt;
  los booleanos. Definir las siguientes interpretaciones&lt;br /&gt;
          | p0 | p1 | p2 | p3 | ...&lt;br /&gt;
     int1 | F  | F  | F  | F  | ...&lt;br /&gt;
     int2 | F  | V  | F  | F  | ...&lt;br /&gt;
     int3 | V  | F  | F  | F  | ...&lt;br /&gt;
     int3 | V  | V  | F  | F  | ...&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation int1 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int1 x ≡ False&amp;quot;&lt;br /&gt;
abbreviation int2 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int2 ≡ int1 (1 := True)&amp;quot;&lt;br /&gt;
abbreviation int3 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int3 ≡ int1 (0 := True)&amp;quot;&lt;br /&gt;
abbreviation int4 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int4 ≡ int1 (0 := True, 1 := True)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Dada una interpretación I, el valor de de una fórmula F&lt;br /&gt;
  repecto de I, I(F), se define por&lt;br /&gt;
  · T, si F es ⊤;&lt;br /&gt;
  · I(n), si F es p_n;&lt;br /&gt;
  · I(G) ∧ I(H), si F es (G ∧ H);&lt;br /&gt;
  · I(G) ⊕ I(H), si F es (G ⊕ H).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     valorF :: (nat ⇒ bool) ⇒ form ⇒ bool&lt;br /&gt;
  tal que (valorF i f) es el valor de la fórmula f respecto de la&lt;br /&gt;
  interpretación i. Por ejemplo, &lt;br /&gt;
     valorF int1 form1 = True&lt;br /&gt;
     valorF int3 form1 = False&lt;br /&gt;
     valorF int1 form2 = False&lt;br /&gt;
     valorF int2 form2 = True&lt;br /&gt;
     valorF int3 form2 = True&lt;br /&gt;
     valorF int4 form2 = True&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun valorF :: &amp;quot;(nat ⇒ bool) ⇒ form ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorF i f = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un monomio es una lista de números naturales y se puede&lt;br /&gt;
  interpretar como la conjunción de variables proposionales cuyos&lt;br /&gt;
  índices son los números de la lista. Por ejemplo, el monomio [0,2,1]&lt;br /&gt;
  se interpreta como la fórmula (p0 ∧ p2 ∧ p1).  &lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formM :: nat list ⇒ form&lt;br /&gt;
  tal que (formM m) es la fórmula correspondiente al monomio. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     formM [0,2,1] = And (Var 0) (And (Var 2) (And (Var 1) T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun formM :: &amp;quot;nat list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formM ns = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir, por recursión, la función&lt;br /&gt;
     valorM :: (nat ⇒ bool) ⇒ nat list ⇒ bool&lt;br /&gt;
  tal que (valorM i m) es el valor de la fórmula representada por el&lt;br /&gt;
  monomio m en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorM int1 [0,2,1]                            = False&lt;br /&gt;
     valorM (int1(0:=True,1:=True,2:=True)) [0,2,1] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo monomio m, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i m = valorF i (formM m)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun valorM :: &amp;quot;(nat ⇒ bool) ⇒ nat list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorM i ns = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorM:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Un polinomio es una lista de monomios y se puede&lt;br /&gt;
  interpretar como la disyunción exclusiva de los monomios. Por ejemplo, &lt;br /&gt;
  el polinomio [[0,2,1],[1,3]] se interpreta como la fórmula&lt;br /&gt;
  (p0 ∧ p2 ∧ p1) ⊕ (p1 ∧ p3).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formP :: nat list list ⇒ form&lt;br /&gt;
  tal que (formP p) es la fórmula correspondiente al polinomio p. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     formP [[1,2],[3]]&lt;br /&gt;
     = Xor (And (Var 1) (And (Var 2) T)) (Xor (And (Var 3) T) (Xor T T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun formP :: &amp;quot;nat list list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formP ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     valorP :: (nat ⇒ bool) ⇒ nat list list ⇒ bool&lt;br /&gt;
  tal que (valorP i p) es el valor de la fórmula representada por el&lt;br /&gt;
  polinomio p en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorP (int1(1:=True,3:=True)) [[0,2,1],[1,3]] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo polinomio p, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i p = valorF i (formP p)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun valorP :: &amp;quot;(nat ⇒ bool) ⇒ nat list list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorP i ms = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorP:&lt;br /&gt;
  &amp;quot;valorP i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     productoM :: nat list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (productoM m p) es el producto del monomio p por el polinomio&lt;br /&gt;
  p. Por  ejemplo, &lt;br /&gt;
     productoM [1,3] [[1,2,4],[7],[4,1]] &lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun productoM :: &amp;quot;nat list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;productoM m ns = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos monomios es la conjunción de sus valores.&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorM_conc: &lt;br /&gt;
  &amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de un monomio por un polinomio es la conjunción de sus&lt;br /&gt;
  valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_productoM: &lt;br /&gt;
  &amp;quot;valorP i (productoM m p) = (valorM i m ∧ valorP i p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Definir la función&lt;br /&gt;
     producto :: nat list list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (producto p q) es el producto de los polinomios p y q. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     producto [[1,3],[2]] [[1,2,4],[7],[4,1]]&lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1],[2,1,2,4],[2,7],[2,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun producto :: &amp;quot;nat list list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;producto p q = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos polinomios es la disyunción exclusiva de &lt;br /&gt;
  sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma valorP_conc: &lt;br /&gt;
  &amp;quot;valorP i (xs @ ys) = (xor (valorP i xs) (valorP i ys))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de dos polinomios es la conjunción de sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma correccion_producto: &lt;br /&gt;
  &amp;quot;valorP i (producto p q) = (valorP i p ∧ valorP i q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Definir la función&lt;br /&gt;
     polinomio :: form ⇒ nat list list&lt;br /&gt;
  tal que (polinomio f) es el polinomio que representa la fórmula f. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     polinomio (Xor (Var 1) (Var 2))               = [[1],[2]]&lt;br /&gt;
     polinomio (And (Var 1) (Var 2))               = [[1,2]]&lt;br /&gt;
     polinomio (Xor (Var 1) T)                     = [[1],[]]&lt;br /&gt;
     polinomio (And (Var 1) T)                     = [[1]]]&lt;br /&gt;
     polinomio (And (Xor (Var 1) (Var 2)) (Var 3)) = [[1,3],[2,3]]&lt;br /&gt;
     polinomio (Xor (And (Var 1) (Var 2)) (Var 3)) = [[1,2],[3]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun polinomio :: &amp;quot;form ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;polinomio f = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de f es igual que el de su polinomio. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
theorem correccion_polinomio: &lt;br /&gt;
  &amp;quot;valorF i f = valorP i (polinomio f)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=482</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=482"/>
		<updated>2014-01-25T17:04:44Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R10: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R10&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Los ejercicios son los de la asignatura de &amp;quot;Lógica informática&amp;quot; que se&lt;br /&gt;
  encuentran en http://goo.gl/yrPLn&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  · excluded_middle: ¬P ∨ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ∨ q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 01:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
      and 2: &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
     {assume &amp;quot;p&amp;quot;  &lt;br /&gt;
        then show &amp;quot;p&amp;quot;.}&lt;br /&gt;
     next&lt;br /&gt;
     {assume &amp;quot;q&amp;quot;&lt;br /&gt;
        with 2 show &amp;quot;p&amp;quot; by (rule notE)}&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1)&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  then show &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  with `¬q` show &amp;quot;p&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 lemma 02:&lt;br /&gt;
   assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
   shows &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
 proof (rule ccontr)&lt;br /&gt;
   assume &amp;quot;¬¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
   then have 1: &amp;quot;(¬p ∨ ¬q)&amp;quot; by (rule notnotD)&lt;br /&gt;
   show &amp;quot;False&amp;quot;&lt;br /&gt;
     using 1&lt;br /&gt;
     proof (rule disjE)&lt;br /&gt;
        {assume I: &amp;quot;¬p&amp;quot;&lt;br /&gt;
         have &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
         with I show &amp;quot;False&amp;quot;..}&lt;br /&gt;
        {assume II: &amp;quot;¬q&amp;quot;&lt;br /&gt;
          have &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      with II show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
     qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 1: &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using assms ..&lt;br /&gt;
    with `¬p` show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using assms ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus  &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with  assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
  with `¬p` show &amp;quot;¬p ∧ ¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
 assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
 show False&lt;br /&gt;
 using `p ∨ q`&lt;br /&gt;
 proof&lt;br /&gt;
   assume &amp;quot;p&amp;quot;&lt;br /&gt;
   have &amp;quot;¬p&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `p` ..&lt;br /&gt;
 next&lt;br /&gt;
   assume &amp;quot;q&amp;quot;&lt;br /&gt;
   have &amp;quot;¬q&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `q` ..&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using `p ∨ q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬p&amp;quot; using assms ..&lt;br /&gt;
    then show False using `p` ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q&amp;quot; using assms ..&lt;br /&gt;
    then show False using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using `¬p ∨ ¬q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬p`show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_6:&lt;br /&gt;
  shows &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
  show &amp;quot;p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    with `(p ⟶ q) ⟶ p` have &amp;quot;¬(p ⟶ q)&amp;quot; by (rule mt)&lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with `¬p` have False ..&lt;br /&gt;
      then have &amp;quot;q&amp;quot; ..}&lt;br /&gt;
    then have &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ⟶ q)` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_7:&lt;br /&gt;
  assumes &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
  shows &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    with assms have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
    then have False using `p` ..}&lt;br /&gt;
  then show &amp;quot;q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_8:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬p ∨ p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..}&lt;br /&gt;
  { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q ∨ q&amp;quot; ..&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      then have &amp;quot;p ∨ q&amp;quot; ..}&lt;br /&gt;
    { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
      with `¬p` have &amp;quot;¬p ∧ ¬q&amp;quot; ..&lt;br /&gt;
      with assms have False ..&lt;br /&gt;
      then have &amp;quot;p ∨ q&amp;quot; ..}&lt;br /&gt;
    with `¬q ∨ q` have &amp;quot;p ∨ q&amp;quot; using `q ⟹ p ∨ q` ..}&lt;br /&gt;
  with `¬p ∨ p` show &amp;quot;p ∨ q&amp;quot; using `p ⟹ p ∨ q` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_9:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    then have &amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then show &amp;quot;p&amp;quot; by (rule ccontr)&lt;br /&gt;
  { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    then have &amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then show &amp;quot;q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_10:&lt;br /&gt;
  assumes &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬p ∨ p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q ∨ q&amp;quot; ..&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      with `p` have &amp;quot;p ∧ q&amp;quot; ..&lt;br /&gt;
      with assms have False ..&lt;br /&gt;
      then have &amp;quot;¬p ∨ ¬q&amp;quot; ..}&lt;br /&gt;
    { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
      then have &amp;quot;¬p ∨ ¬q&amp;quot; ..}&lt;br /&gt;
    with `¬q ∨ q` have &amp;quot;¬p ∨ ¬q&amp;quot; using `q ⟹ ¬ p ∨ ¬ q` ..}&lt;br /&gt;
  { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    then have &amp;quot;¬p ∨ ¬q&amp;quot; ..}&lt;br /&gt;
  with `¬p ∨ p` show &amp;quot;¬p ∨ ¬q&amp;quot; using ` p ⟹ ¬ p ∨ ¬ q` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_11:&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬(p ⟶ q) ∨ (p ⟶ q)&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
    then have &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..}&lt;br /&gt;
  { assume &amp;quot;¬(p ⟶ q)&amp;quot;&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      { assume &amp;quot;p&amp;quot;&lt;br /&gt;
        have &amp;quot;q&amp;quot; using `q` .}&lt;br /&gt;
      then have &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
      with `¬(p ⟶ q)` have False ..&lt;br /&gt;
      then have &amp;quot;p&amp;quot; ..}&lt;br /&gt;
    then have &amp;quot;q ⟶ p&amp;quot; ..&lt;br /&gt;
    then have &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..}&lt;br /&gt;
  with `¬(p ⟶ q) ∨ (p ⟶ q)` show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; using `p ⟶ q ⟹ (p ⟶ q) ∨ (q ⟶ p)` ..&lt;br /&gt;
qed&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=481</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=481"/>
		<updated>2014-01-25T16:46:06Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R10: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R10&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Los ejercicios son los de la asignatura de &amp;quot;Lógica informática&amp;quot; que se&lt;br /&gt;
  encuentran en http://goo.gl/yrPLn&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  · excluded_middle: ¬P ∨ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ∨ q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 01:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
      and 2: &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
     {assume &amp;quot;p&amp;quot;  &lt;br /&gt;
        then show &amp;quot;p&amp;quot;.}&lt;br /&gt;
     next&lt;br /&gt;
     {assume &amp;quot;q&amp;quot;&lt;br /&gt;
        with 2 show &amp;quot;p&amp;quot; by (rule notE)}&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1)&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  then show &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  with `¬q` show &amp;quot;p&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 lemma 02:&lt;br /&gt;
   assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
   shows &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
 proof (rule ccontr)&lt;br /&gt;
   assume &amp;quot;¬¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
   then have 1: &amp;quot;(¬p ∨ ¬q)&amp;quot; by (rule notnotD)&lt;br /&gt;
   show &amp;quot;False&amp;quot;&lt;br /&gt;
     using 1&lt;br /&gt;
     proof (rule disjE)&lt;br /&gt;
        {assume I: &amp;quot;¬p&amp;quot;&lt;br /&gt;
         have &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
         with I show &amp;quot;False&amp;quot;..}&lt;br /&gt;
        {assume II: &amp;quot;¬q&amp;quot;&lt;br /&gt;
          have &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      with II show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
     qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 1: &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using assms ..&lt;br /&gt;
    with `¬p` show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using assms ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus  &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with  assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
  with `¬p` show &amp;quot;¬p ∧ ¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
 assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
 show False&lt;br /&gt;
 using `p ∨ q`&lt;br /&gt;
 proof&lt;br /&gt;
   assume &amp;quot;p&amp;quot;&lt;br /&gt;
   have &amp;quot;¬p&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `p` ..&lt;br /&gt;
 next&lt;br /&gt;
   assume &amp;quot;q&amp;quot;&lt;br /&gt;
   have &amp;quot;¬q&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `q` ..&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using `p ∨ q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬p&amp;quot; using assms ..&lt;br /&gt;
    then show False using `p` ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q&amp;quot; using assms ..&lt;br /&gt;
    then show False using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using `¬p ∨ ¬q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬p`show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_6:&lt;br /&gt;
  shows &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
  show &amp;quot;p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    with `(p ⟶ q) ⟶ p` have &amp;quot;¬(p ⟶ q)&amp;quot; by (rule mt)&lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with `¬p` have False ..&lt;br /&gt;
      then have &amp;quot;q&amp;quot; ..}&lt;br /&gt;
    then have &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ⟶ q)` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_7:&lt;br /&gt;
  assumes &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
  shows &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    with assms have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
    then have False using `p` ..}&lt;br /&gt;
  then show &amp;quot;q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_8:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬p ∨ p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..}&lt;br /&gt;
  { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q ∨ q&amp;quot; ..&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      then have &amp;quot;p ∨ q&amp;quot; ..}&lt;br /&gt;
    { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
      with `¬p` have &amp;quot;¬p ∧ ¬q&amp;quot; ..&lt;br /&gt;
      with assms have False ..&lt;br /&gt;
      then have &amp;quot;p ∨ q&amp;quot; ..}&lt;br /&gt;
    with `¬q ∨ q` have &amp;quot;p ∨ q&amp;quot; using `q ⟹ p ∨ q` ..}&lt;br /&gt;
  with `¬p ∨ p` show &amp;quot;p ∨ q&amp;quot; using `p ⟹ p ∨ q` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_9:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    then have &amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then show &amp;quot;p&amp;quot; by (rule ccontr)&lt;br /&gt;
  { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    then have &amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then show &amp;quot;q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_10:&lt;br /&gt;
  assumes &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬p ∨ p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q ∨ q&amp;quot; ..&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      with `p` have &amp;quot;p ∧ q&amp;quot; ..&lt;br /&gt;
      with assms have False ..&lt;br /&gt;
      then have &amp;quot;¬p ∨ ¬q&amp;quot; ..}&lt;br /&gt;
    { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
      then have &amp;quot;¬p ∨ ¬q&amp;quot; ..}&lt;br /&gt;
    with `¬q ∨ q` have &amp;quot;¬p ∨ ¬q&amp;quot; using `q ⟹ ¬ p ∨ ¬ q` ..}&lt;br /&gt;
  { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    then have &amp;quot;¬p ∨ ¬q&amp;quot; ..}&lt;br /&gt;
  with `¬p ∨ p` show &amp;quot;¬p ∨ ¬q&amp;quot; using ` p ⟹ ¬ p ∨ ¬ q` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=480</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=480"/>
		<updated>2014-01-25T16:28:33Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R10: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R10&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Los ejercicios son los de la asignatura de &amp;quot;Lógica informática&amp;quot; que se&lt;br /&gt;
  encuentran en http://goo.gl/yrPLn&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  · excluded_middle: ¬P ∨ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ∨ q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 01:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
      and 2: &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
     {assume &amp;quot;p&amp;quot;  &lt;br /&gt;
        then show &amp;quot;p&amp;quot;.}&lt;br /&gt;
     next&lt;br /&gt;
     {assume &amp;quot;q&amp;quot;&lt;br /&gt;
        with 2 show &amp;quot;p&amp;quot; by (rule notE)}&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1)&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  then show &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  with `¬q` show &amp;quot;p&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 lemma 02:&lt;br /&gt;
   assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
   shows &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
 proof (rule ccontr)&lt;br /&gt;
   assume &amp;quot;¬¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
   then have 1: &amp;quot;(¬p ∨ ¬q)&amp;quot; by (rule notnotD)&lt;br /&gt;
   show &amp;quot;False&amp;quot;&lt;br /&gt;
     using 1&lt;br /&gt;
     proof (rule disjE)&lt;br /&gt;
        {assume I: &amp;quot;¬p&amp;quot;&lt;br /&gt;
         have &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
         with I show &amp;quot;False&amp;quot;..}&lt;br /&gt;
        {assume II: &amp;quot;¬q&amp;quot;&lt;br /&gt;
          have &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      with II show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
     qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 1: &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using assms ..&lt;br /&gt;
    with `¬p` show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using assms ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus  &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with  assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
  with `¬p` show &amp;quot;¬p ∧ ¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
 assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
 show False&lt;br /&gt;
 using `p ∨ q`&lt;br /&gt;
 proof&lt;br /&gt;
   assume &amp;quot;p&amp;quot;&lt;br /&gt;
   have &amp;quot;¬p&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `p` ..&lt;br /&gt;
 next&lt;br /&gt;
   assume &amp;quot;q&amp;quot;&lt;br /&gt;
   have &amp;quot;¬q&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `q` ..&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using `p ∨ q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬p&amp;quot; using assms ..&lt;br /&gt;
    then show False using `p` ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q&amp;quot; using assms ..&lt;br /&gt;
    then show False using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using `¬p ∨ ¬q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬p`show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_6:&lt;br /&gt;
  shows &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
  show &amp;quot;p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    with `(p ⟶ q) ⟶ p` have &amp;quot;¬(p ⟶ q)&amp;quot; by (rule mt)&lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with `¬p` have False ..&lt;br /&gt;
      then have &amp;quot;q&amp;quot; ..}&lt;br /&gt;
    then have &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ⟶ q)` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_7:&lt;br /&gt;
  assumes &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
  shows &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    with assms have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
    then have False using `p` ..}&lt;br /&gt;
  then show &amp;quot;q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_8:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬p ∨ p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..}&lt;br /&gt;
  { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q ∨ q&amp;quot; ..&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      then have &amp;quot;p ∨ q&amp;quot; ..}&lt;br /&gt;
    { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
      with `¬p` have &amp;quot;¬p ∧ ¬q&amp;quot; ..&lt;br /&gt;
      with assms have False ..&lt;br /&gt;
      then have &amp;quot;p ∨ q&amp;quot; ..}&lt;br /&gt;
    with `¬q ∨ q` have &amp;quot;p ∨ q&amp;quot; using `q ⟹ p ∨ q` ..}&lt;br /&gt;
  with `¬p ∨ p` show &amp;quot;p ∨ q&amp;quot; using `p ⟹ p ∨ q` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_9:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    then have &amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then show &amp;quot;p&amp;quot; by (rule ccontr)&lt;br /&gt;
  { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    then have &amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then show &amp;quot;q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=479</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=479"/>
		<updated>2014-01-25T15:42:48Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R10: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R10&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Los ejercicios son los de la asignatura de &amp;quot;Lógica informática&amp;quot; que se&lt;br /&gt;
  encuentran en http://goo.gl/yrPLn&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  · excluded_middle: ¬P ∨ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ∨ q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 01:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
      and 2: &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
     {assume &amp;quot;p&amp;quot;  &lt;br /&gt;
        then show &amp;quot;p&amp;quot;.}&lt;br /&gt;
     next&lt;br /&gt;
     {assume &amp;quot;q&amp;quot;&lt;br /&gt;
        with 2 show &amp;quot;p&amp;quot; by (rule notE)}&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1)&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  then show &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  with `¬q` show &amp;quot;p&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 lemma 02:&lt;br /&gt;
   assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
   shows &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
 proof (rule ccontr)&lt;br /&gt;
   assume &amp;quot;¬¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
   then have 1: &amp;quot;(¬p ∨ ¬q)&amp;quot; by (rule notnotD)&lt;br /&gt;
   show &amp;quot;False&amp;quot;&lt;br /&gt;
     using 1&lt;br /&gt;
     proof (rule disjE)&lt;br /&gt;
        {assume I: &amp;quot;¬p&amp;quot;&lt;br /&gt;
         have &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
         with I show &amp;quot;False&amp;quot;..}&lt;br /&gt;
        {assume II: &amp;quot;¬q&amp;quot;&lt;br /&gt;
          have &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      with II show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
     qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 1: &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using assms ..&lt;br /&gt;
    with `¬p` show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using assms ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus  &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with  assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
  with `¬p` show &amp;quot;¬p ∧ ¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
 assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
 show False&lt;br /&gt;
 using `p ∨ q`&lt;br /&gt;
 proof&lt;br /&gt;
   assume &amp;quot;p&amp;quot;&lt;br /&gt;
   have &amp;quot;¬p&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `p` ..&lt;br /&gt;
 next&lt;br /&gt;
   assume &amp;quot;q&amp;quot;&lt;br /&gt;
   have &amp;quot;¬q&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `q` ..&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using `p ∨ q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬p&amp;quot; using assms ..&lt;br /&gt;
    then show False using `p` ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q&amp;quot; using assms ..&lt;br /&gt;
    then show False using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using `¬p ∨ ¬q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬p`show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_6:&lt;br /&gt;
  shows &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
  show &amp;quot;p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    with `(p ⟶ q) ⟶ p` have &amp;quot;¬(p ⟶ q)&amp;quot; by (rule mt)&lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with `¬p` have False ..&lt;br /&gt;
      then have &amp;quot;q&amp;quot; ..}&lt;br /&gt;
    then have &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ⟶ q)` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_7:&lt;br /&gt;
  assumes &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
  shows &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    with assms have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
    then have False using `p` ..}&lt;br /&gt;
  then show &amp;quot;q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_8:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬p ∨ p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..}&lt;br /&gt;
  { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q ∨ q&amp;quot; ..&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      then have &amp;quot;p ∨ q&amp;quot; ..}&lt;br /&gt;
    { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
      with `¬p` have &amp;quot;¬p ∧ ¬q&amp;quot; ..&lt;br /&gt;
      with assms have False ..&lt;br /&gt;
      then have &amp;quot;p ∨ q&amp;quot; ..}&lt;br /&gt;
    with `¬q ∨ q` have &amp;quot;p ∨ q&amp;quot; using `q ⟹ p ∨ q` ..}&lt;br /&gt;
  with `¬p ∨ p` show &amp;quot;p ∨ q&amp;quot; using `p ⟹ p ∨ q` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=478</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=478"/>
		<updated>2014-01-25T15:02:10Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R10: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R10&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Los ejercicios son los de la asignatura de &amp;quot;Lógica informática&amp;quot; que se&lt;br /&gt;
  encuentran en http://goo.gl/yrPLn&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  · excluded_middle: ¬P ∨ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ∨ q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 01:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
      and 2: &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
     {assume &amp;quot;p&amp;quot;  &lt;br /&gt;
        then show &amp;quot;p&amp;quot;.}&lt;br /&gt;
     next&lt;br /&gt;
     {assume &amp;quot;q&amp;quot;&lt;br /&gt;
        with 2 show &amp;quot;p&amp;quot; by (rule notE)}&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1)&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  then show &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  with `¬q` show &amp;quot;p&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 lemma 02:&lt;br /&gt;
   assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
   shows &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
 proof (rule ccontr)&lt;br /&gt;
   assume &amp;quot;¬¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
   then have 1: &amp;quot;(¬p ∨ ¬q)&amp;quot; by (rule notnotD)&lt;br /&gt;
   show &amp;quot;False&amp;quot;&lt;br /&gt;
     using 1&lt;br /&gt;
     proof (rule disjE)&lt;br /&gt;
        {assume I: &amp;quot;¬p&amp;quot;&lt;br /&gt;
         have &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
         with I show &amp;quot;False&amp;quot;..}&lt;br /&gt;
        {assume II: &amp;quot;¬q&amp;quot;&lt;br /&gt;
          have &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      with II show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
     qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 1: &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using assms ..&lt;br /&gt;
    with `¬p` show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using assms ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus  &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with  assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
  with `¬p` show &amp;quot;¬p ∧ ¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
 assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
 show False&lt;br /&gt;
 using `p ∨ q`&lt;br /&gt;
 proof&lt;br /&gt;
   assume &amp;quot;p&amp;quot;&lt;br /&gt;
   have &amp;quot;¬p&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `p` ..&lt;br /&gt;
 next&lt;br /&gt;
   assume &amp;quot;q&amp;quot;&lt;br /&gt;
   have &amp;quot;¬q&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `q` ..&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using `p ∨ q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬p&amp;quot; using assms ..&lt;br /&gt;
    then show False using `p` ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q&amp;quot; using assms ..&lt;br /&gt;
    then show False using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using `¬p ∨ ¬q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬p`show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_6:&lt;br /&gt;
  shows &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
  show &amp;quot;p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    with `(p ⟶ q) ⟶ p` have &amp;quot;¬(p ⟶ q)&amp;quot; by (rule mt)&lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with `¬p` have False ..&lt;br /&gt;
      then have &amp;quot;q&amp;quot; ..}&lt;br /&gt;
    then have &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ⟶ q)` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_7:&lt;br /&gt;
  assumes &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
  shows &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    with assms have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
    then have False using `p` ..}&lt;br /&gt;
  then show &amp;quot;q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=477</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=477"/>
		<updated>2014-01-25T02:54:23Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R10: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R10&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Los ejercicios son los de la asignatura de &amp;quot;Lógica informática&amp;quot; que se&lt;br /&gt;
  encuentran en http://goo.gl/yrPLn&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  · excluded_middle: ¬P ∨ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ∨ q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 01:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
      and 2: &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
     {assume &amp;quot;p&amp;quot;  &lt;br /&gt;
        then show &amp;quot;p&amp;quot;.}&lt;br /&gt;
     next&lt;br /&gt;
     {assume &amp;quot;q&amp;quot;&lt;br /&gt;
        with 2 show &amp;quot;p&amp;quot; by (rule notE)}&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1)&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  then show &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  with `¬q` show &amp;quot;p&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 lemma 02:&lt;br /&gt;
   assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
   shows &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
 proof (rule ccontr)&lt;br /&gt;
   assume &amp;quot;¬¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
   then have 1: &amp;quot;(¬p ∨ ¬q)&amp;quot; by (rule notnotD)&lt;br /&gt;
   show &amp;quot;False&amp;quot;&lt;br /&gt;
     using 1&lt;br /&gt;
     proof (rule disjE)&lt;br /&gt;
        {assume I: &amp;quot;¬p&amp;quot;&lt;br /&gt;
         have &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
         with I show &amp;quot;False&amp;quot;..}&lt;br /&gt;
        {assume II: &amp;quot;¬q&amp;quot;&lt;br /&gt;
          have &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      with II show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
     qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 1: &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using assms ..&lt;br /&gt;
    with `¬p` show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using assms ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus  &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with  assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
  with `¬p` show &amp;quot;¬p ∧ ¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
 assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
 show False&lt;br /&gt;
 using `p ∨ q`&lt;br /&gt;
 proof&lt;br /&gt;
   assume &amp;quot;p&amp;quot;&lt;br /&gt;
   have &amp;quot;¬p&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `p` ..&lt;br /&gt;
 next&lt;br /&gt;
   assume &amp;quot;q&amp;quot;&lt;br /&gt;
   have &amp;quot;¬q&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `q` ..&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using `p ∨ q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬p&amp;quot; using assms ..&lt;br /&gt;
    then show False using `p` ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q&amp;quot; using assms ..&lt;br /&gt;
    then show False using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using `¬p ∨ ¬q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬p`show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_6:&lt;br /&gt;
  shows &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
  show &amp;quot;p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    with `(p ⟶ q) ⟶ p` have &amp;quot;¬(p ⟶ q)&amp;quot; by (rule mt)&lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with `¬p` have False ..&lt;br /&gt;
      then have &amp;quot;q&amp;quot; ..}&lt;br /&gt;
    then have &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ⟶ q)` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=476</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=476"/>
		<updated>2014-01-25T02:30:43Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R10: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R10&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Los ejercicios son los de la asignatura de &amp;quot;Lógica informática&amp;quot; que se&lt;br /&gt;
  encuentran en http://goo.gl/yrPLn&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  · excluded_middle: ¬P ∨ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ∨ q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 01:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
      and 2: &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
     {assume &amp;quot;p&amp;quot;  &lt;br /&gt;
        then show &amp;quot;p&amp;quot;.}&lt;br /&gt;
     next&lt;br /&gt;
     {assume &amp;quot;q&amp;quot;&lt;br /&gt;
        with 2 show &amp;quot;p&amp;quot; by (rule notE)}&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1)&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  then show &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  with `¬q` show &amp;quot;p&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 lemma 02:&lt;br /&gt;
   assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
   shows &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
 proof (rule ccontr)&lt;br /&gt;
   assume &amp;quot;¬¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
   then have 1: &amp;quot;(¬p ∨ ¬q)&amp;quot; by (rule notnotD)&lt;br /&gt;
   show &amp;quot;False&amp;quot;&lt;br /&gt;
     using 1&lt;br /&gt;
     proof (rule disjE)&lt;br /&gt;
        {assume I: &amp;quot;¬p&amp;quot;&lt;br /&gt;
         have &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
         with I show &amp;quot;False&amp;quot;..}&lt;br /&gt;
        {assume II: &amp;quot;¬q&amp;quot;&lt;br /&gt;
          have &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      with II show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
     qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 1: &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using assms ..&lt;br /&gt;
    with `¬p` show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using assms ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus  &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with  assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
  with `¬p` show &amp;quot;¬p ∧ ¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
 assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
 show False&lt;br /&gt;
 using `p ∨ q`&lt;br /&gt;
 proof&lt;br /&gt;
   assume &amp;quot;p&amp;quot;&lt;br /&gt;
   have &amp;quot;¬p&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `p` ..&lt;br /&gt;
 next&lt;br /&gt;
   assume &amp;quot;q&amp;quot;&lt;br /&gt;
   have &amp;quot;¬q&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `q` ..&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using `p ∨ q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬p&amp;quot; using assms ..&lt;br /&gt;
    then show False using `p` ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q&amp;quot; using assms ..&lt;br /&gt;
    then show False using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using `¬p ∨ ¬q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬p`show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=475</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=475"/>
		<updated>2014-01-25T02:08:22Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R10: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R10&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Los ejercicios son los de la asignatura de &amp;quot;Lógica informática&amp;quot; que se&lt;br /&gt;
  encuentran en http://goo.gl/yrPLn&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  · excluded_middle: ¬P ∨ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ∨ q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 01:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
      and 2: &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
     {assume &amp;quot;p&amp;quot;  &lt;br /&gt;
        then show &amp;quot;p&amp;quot;.}&lt;br /&gt;
     next&lt;br /&gt;
     {assume &amp;quot;q&amp;quot;&lt;br /&gt;
        with 2 show &amp;quot;p&amp;quot; by (rule notE)}&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1)&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  then show &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  with `¬q` show &amp;quot;p&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 lemma 02:&lt;br /&gt;
   assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
   shows &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
 proof (rule ccontr)&lt;br /&gt;
   assume &amp;quot;¬¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
   then have 1: &amp;quot;(¬p ∨ ¬q)&amp;quot; by (rule notnotD)&lt;br /&gt;
   show &amp;quot;False&amp;quot;&lt;br /&gt;
     using 1&lt;br /&gt;
     proof (rule disjE)&lt;br /&gt;
        {assume I: &amp;quot;¬p&amp;quot;&lt;br /&gt;
         have &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
         with I show &amp;quot;False&amp;quot;..}&lt;br /&gt;
        {assume II: &amp;quot;¬q&amp;quot;&lt;br /&gt;
          have &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      with II show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
     qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 1: &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using assms ..&lt;br /&gt;
    with `¬p` show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using assms ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus  &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with  assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
  with `¬p` show &amp;quot;¬p ∧ ¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
 assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
 show False&lt;br /&gt;
 using `p ∨ q`&lt;br /&gt;
 proof&lt;br /&gt;
   assume &amp;quot;p&amp;quot;&lt;br /&gt;
   have &amp;quot;¬p&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `p` ..&lt;br /&gt;
 next&lt;br /&gt;
   assume &amp;quot;q&amp;quot;&lt;br /&gt;
   have &amp;quot;¬q&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `q` ..&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using `p ∨ q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬p&amp;quot; using assms ..&lt;br /&gt;
    then show False using `p` ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q&amp;quot; using assms ..&lt;br /&gt;
    then show False using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using `¬p ∨ ¬q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬p`show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=474</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=474"/>
		<updated>2014-01-25T01:59:58Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R10: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R10&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Los ejercicios son los de la asignatura de &amp;quot;Lógica informática&amp;quot; que se&lt;br /&gt;
  encuentran en http://goo.gl/yrPLn&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  · excluded_middle: ¬P ∨ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ∨ q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 01:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
      and 2: &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
     {assume &amp;quot;p&amp;quot;  &lt;br /&gt;
        then show &amp;quot;p&amp;quot;.}&lt;br /&gt;
     next&lt;br /&gt;
     {assume &amp;quot;q&amp;quot;&lt;br /&gt;
        with 2 show &amp;quot;p&amp;quot; by (rule notE)}&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1)&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  then show &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  with `¬q` show &amp;quot;p&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 lemma 02:&lt;br /&gt;
   assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
   shows &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
 proof (rule ccontr)&lt;br /&gt;
   assume &amp;quot;¬¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
   then have 1: &amp;quot;(¬p ∨ ¬q)&amp;quot; by (rule notnotD)&lt;br /&gt;
   show &amp;quot;False&amp;quot;&lt;br /&gt;
     using 1&lt;br /&gt;
     proof (rule disjE)&lt;br /&gt;
        {assume I: &amp;quot;¬p&amp;quot;&lt;br /&gt;
         have &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
         with I show &amp;quot;False&amp;quot;..}&lt;br /&gt;
        {assume II: &amp;quot;¬q&amp;quot;&lt;br /&gt;
          have &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      with II show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
     qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 1: &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using assms ..&lt;br /&gt;
    with `¬p` show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using assms ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus  &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with  assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
  with `¬p` show &amp;quot;¬p ∧ ¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
 assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
 show False&lt;br /&gt;
 using `p ∨ q`&lt;br /&gt;
 proof&lt;br /&gt;
   assume &amp;quot;p&amp;quot;&lt;br /&gt;
   have &amp;quot;¬p&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `p` ..&lt;br /&gt;
 next&lt;br /&gt;
   assume &amp;quot;q&amp;quot;&lt;br /&gt;
   have &amp;quot;¬q&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `q` ..&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using `¬p ∨ ¬q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬p`show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=472</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=472"/>
		<updated>2014-01-25T00:57:18Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R10: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R10&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Los ejercicios son los de la asignatura de &amp;quot;Lógica informática&amp;quot; que se&lt;br /&gt;
  encuentran en http://goo.gl/yrPLn&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  · excluded_middle: ¬P ∨ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ∨ q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 01:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
      and 2: &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
     {assume &amp;quot;p&amp;quot;  &lt;br /&gt;
        then show &amp;quot;p&amp;quot;.}&lt;br /&gt;
     next&lt;br /&gt;
     {assume &amp;quot;q&amp;quot;&lt;br /&gt;
        with 2 show &amp;quot;p&amp;quot; by (rule notE)}&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1)&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  then show &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  with `¬q` show &amp;quot;p&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 lemma 02:&lt;br /&gt;
   assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
   shows &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
 proof (rule ccontr)&lt;br /&gt;
   assume &amp;quot;¬¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
   then have 1: &amp;quot;(¬p ∨ ¬q)&amp;quot; by (rule notnotD)&lt;br /&gt;
   show &amp;quot;False&amp;quot;&lt;br /&gt;
     using 1&lt;br /&gt;
     proof (rule disjE)&lt;br /&gt;
        {assume I: &amp;quot;¬p&amp;quot;&lt;br /&gt;
         have &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
         with I show &amp;quot;False&amp;quot;..}&lt;br /&gt;
        {assume II: &amp;quot;¬q&amp;quot;&lt;br /&gt;
          have &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      with II show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
     qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 1: &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using assms ..&lt;br /&gt;
    with `¬p` show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using assms ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=471</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=471"/>
		<updated>2014-01-25T00:34:49Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R10: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R10&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Los ejercicios son los de la asignatura de &amp;quot;Lógica informática&amp;quot; que se&lt;br /&gt;
  encuentran en http://goo.gl/yrPLn&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  · excluded_middle: ¬P ∨ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ∨ q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 01:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
      and 2: &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
     {assume &amp;quot;p&amp;quot;  &lt;br /&gt;
        then show &amp;quot;p&amp;quot;.}&lt;br /&gt;
     next&lt;br /&gt;
     {assume &amp;quot;q&amp;quot;&lt;br /&gt;
        with 2 show &amp;quot;p&amp;quot; by (rule notE)}&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1)&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  then show &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  with `¬q` show &amp;quot;p&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 lemma 02:&lt;br /&gt;
   assumes &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
   shows &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
 proof (rule ccontr)&lt;br /&gt;
   assume &amp;quot;¬¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
   then have 1: &amp;quot;(¬p ∨ ¬q)&amp;quot; by (rule notnotD)&lt;br /&gt;
   show &amp;quot;False&amp;quot;&lt;br /&gt;
     using 1&lt;br /&gt;
     proof (rule disjE)&lt;br /&gt;
        {assume I: &amp;quot;¬p&amp;quot;&lt;br /&gt;
         have &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
         with I show &amp;quot;False&amp;quot;..}&lt;br /&gt;
        {assume II: &amp;quot;¬q&amp;quot;&lt;br /&gt;
          have &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      with II show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
     qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=435</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=435"/>
		<updated>2014-01-20T14:30:50Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R9: Deducción natural proposicional (1) *}&lt;br /&gt;
&lt;br /&gt;
theory R9&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural necesarias son las&lt;br /&gt;
  siguientes: &lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Implicaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej1_auto:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej1:&lt;br /&gt;
  assumes 1:&amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;q&amp;quot;&lt;br /&gt;
    {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 4 2 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;q⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with assms have &amp;quot;q ⟶ r&amp;quot;  ..&lt;br /&gt;
      then have &amp;quot;r&amp;quot; using `q` ..  }&lt;br /&gt;
    then have &amp;quot;p ⟶ r&amp;quot; ..  }&lt;br /&gt;
    then show &amp;quot;q ⟶ (p ⟶ r)&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej2_auto:&lt;br /&gt;
  assumes &amp;quot; p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej2:&lt;br /&gt;
  assumes 1:&amp;quot; p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
 {assume 2:&amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
    {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
      have 5:&amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p ⟶ q)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with  `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using assms `p` ..&lt;br /&gt;
    then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej3_auto:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej3:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
 { assume 1:&amp;quot;(p⟶(q⟶r))&amp;quot;&lt;br /&gt;
     {assume 3:&amp;quot;p⟶q&amp;quot;&lt;br /&gt;
       {assume 4:&amp;quot;p&amp;quot;&lt;br /&gt;
         have 5: &amp;quot;q⟶r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
         have 6:&amp;quot;q&amp;quot; using 3 4 by (rule mp)&lt;br /&gt;
         have &amp;quot;r&amp;quot; using 5 6 by (rule mp)}&lt;br /&gt;
       then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
     then have &amp;quot;(p⟶q)⟶p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p⟶(q⟶r))⟶((p⟶q)⟶p⟶r)&amp;quot; by (rule impI)  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ⟶ q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ p ⟶ r&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with  `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
      have &amp;quot;q ⟶ r&amp;quot; using `p ⟶ q ⟶ r` `p` ..&lt;br /&gt;
      then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej4_auto:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej5_auto:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej5:&lt;br /&gt;
  assumes 1:&amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;p⟶q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
    have 4: &amp;quot;p⟶r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot; using 3 2 by (rule mp)&lt;br /&gt;
    have 6: &amp;quot;r&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;q ∧ r&amp;quot; using 5 6 by (rule conjI)}&lt;br /&gt;
  then show &amp;quot;p ⟶ q ∧ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_5:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  have &amp;quot;(p ⟶ q)&amp;quot; using assms ..&lt;br /&gt;
  then have &amp;quot;q&amp;quot; using `p` ..&lt;br /&gt;
  have &amp;quot;(p ⟶ r)&amp;quot; using assms ..&lt;br /&gt;
  then have &amp;quot;r&amp;quot; using `p` ..&lt;br /&gt;
  with `q` show &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ q ∧ r ⊢ (p ⟶ q) ∧ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej6_auto:&lt;br /&gt;
  assumes  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej6:&lt;br /&gt;
  assumes  1:&amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:&amp;quot;q∧r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;q&amp;quot; using 3 by (rule conjunct1)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶q&amp;quot;  by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;q∧r&amp;quot; using 1 5 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 6 by (rule conjunct2)}&lt;br /&gt;
    then have 5:&amp;quot;p⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶q) ∧ (p ⟶r)&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_6:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  {assume &amp;quot;p&amp;quot;&lt;br /&gt;
  with assms have &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;q&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
  {assume &amp;quot;p&amp;quot;&lt;br /&gt;
  with assms have &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;r&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ⟶ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej7_auto:&lt;br /&gt;
  assumes &amp;quot; p ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej7:&lt;br /&gt;
  assumes 1:&amp;quot; p ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2:&amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3:&amp;quot;q⟶r&amp;quot;  using 1 by (rule conjunct2)&lt;br /&gt;
  {assume 4:&amp;quot;p⟶q&amp;quot;&lt;br /&gt;
    have 5:&amp;quot;q&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 3 5 by (rule mp)}&lt;br /&gt;
  then show &amp;quot;(p⟶q)⟶r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_7:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  have &amp;quot;p&amp;quot; using assms  ..&lt;br /&gt;
  with `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
  have &amp;quot;q ⟶ r&amp;quot; using assms ..&lt;br /&gt;
  then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Disyunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma ej8_auto:&lt;br /&gt;
  assumes &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej8:&lt;br /&gt;
  assumes 1:&amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    moreover&lt;br /&gt;
       {assume &amp;quot;p&amp;quot;&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI1)}&lt;br /&gt;
    moreover&lt;br /&gt;
      {assume 3:&amp;quot;q&amp;quot;&lt;br /&gt;
        have &amp;quot;r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI2)}&lt;br /&gt;
    ultimately have &amp;quot;p ∨ r&amp;quot;  by (rule disjE)}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma ej9_auto:&lt;br /&gt;
  assumes  &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej9:&lt;br /&gt;
  assumes 1:&amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume  &amp;quot;p ∨ q &amp;quot;&lt;br /&gt;
  moreover &lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 3:&amp;quot;(p ⟶ r)&amp;quot; using 1 by (rule conjunct1) &lt;br /&gt;
      have &amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
  moreover&lt;br /&gt;
    {assume 4:&amp;quot;q&amp;quot;&lt;br /&gt;
      have 5:&amp;quot;(q ⟶ r)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
  ultimately have  &amp;quot;r&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma ej10_auto:&lt;br /&gt;
  assumes  &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej10:&lt;br /&gt;
  assumes  1:&amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:&amp;quot;p∨q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶r&amp;quot; by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;p∨q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    have 7:&amp;quot;r&amp;quot; using 1 6 by (rule mp)}&lt;br /&gt;
    then have 8:&amp;quot;q⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶r)∧(q⟶r)&amp;quot; using 4 8 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=434</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=434"/>
		<updated>2014-01-20T02:33:43Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R9: Deducción natural proposicional (1) *}&lt;br /&gt;
&lt;br /&gt;
theory R9&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural necesarias son las&lt;br /&gt;
  siguientes: &lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Implicaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej1_auto:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej1:&lt;br /&gt;
  assumes 1:&amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;q&amp;quot;&lt;br /&gt;
    {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 4 2 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;q⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with assms have &amp;quot;q ⟶ r&amp;quot;  ..&lt;br /&gt;
      then have &amp;quot;r&amp;quot; using `q` ..  }&lt;br /&gt;
    then have &amp;quot;p ⟶ r&amp;quot; ..  }&lt;br /&gt;
    then show &amp;quot;q ⟶ (p ⟶ r)&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej2_auto:&lt;br /&gt;
  assumes &amp;quot; p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej2:&lt;br /&gt;
  assumes 1:&amp;quot; p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
 {assume 2:&amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
    {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
      have 5:&amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p ⟶ q)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with  `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using assms `p` ..&lt;br /&gt;
    then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej3_auto:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej3:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
 { assume 1:&amp;quot;(p⟶(q⟶r))&amp;quot;&lt;br /&gt;
     {assume 3:&amp;quot;p⟶q&amp;quot;&lt;br /&gt;
       {assume 4:&amp;quot;p&amp;quot;&lt;br /&gt;
         have 5: &amp;quot;q⟶r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
         have 6:&amp;quot;q&amp;quot; using 3 4 by (rule mp)&lt;br /&gt;
         have &amp;quot;r&amp;quot; using 5 6 by (rule mp)}&lt;br /&gt;
       then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
     then have &amp;quot;(p⟶q)⟶p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p⟶(q⟶r))⟶((p⟶q)⟶p⟶r)&amp;quot; by (rule impI)  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ⟶ q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ p ⟶ r&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with  `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
      have &amp;quot;q ⟶ r&amp;quot; using `p ⟶ q ⟶ r` `p` ..&lt;br /&gt;
      then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej4_auto:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej5_auto:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej5:&lt;br /&gt;
  assumes 1:&amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;p⟶q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
    have 4: &amp;quot;p⟶r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot; using 3 2 by (rule mp)&lt;br /&gt;
    have 6: &amp;quot;r&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;q ∧ r&amp;quot; using 5 6 by (rule conjI)}&lt;br /&gt;
  then show &amp;quot;p ⟶ q ∧ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_5:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  have &amp;quot;(p ⟶ q)&amp;quot; using assms ..&lt;br /&gt;
  then have &amp;quot;q&amp;quot; using `p` ..&lt;br /&gt;
  have &amp;quot;(p ⟶ r)&amp;quot; using assms ..&lt;br /&gt;
  then have &amp;quot;r&amp;quot; using `p` ..&lt;br /&gt;
  with `q` show &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ q ∧ r ⊢ (p ⟶ q) ∧ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej6_auto:&lt;br /&gt;
  assumes  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej6:&lt;br /&gt;
  assumes  1:&amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:&amp;quot;q∧r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;q&amp;quot; using 3 by (rule conjunct1)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶q&amp;quot;  by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;q∧r&amp;quot; using 1 5 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 6 by (rule conjunct2)}&lt;br /&gt;
    then have 5:&amp;quot;p⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶q) ∧ (p ⟶r)&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_6:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  {assume &amp;quot;p&amp;quot;&lt;br /&gt;
  with assms have &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;q&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
  {assume &amp;quot;p&amp;quot;&lt;br /&gt;
  with assms have &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;r&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ⟶ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej7_auto:&lt;br /&gt;
  assumes &amp;quot; p ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej7:&lt;br /&gt;
  assumes 1:&amp;quot; p ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2:&amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3:&amp;quot;q⟶r&amp;quot;  using 1 by (rule conjunct2)&lt;br /&gt;
  {assume 4:&amp;quot;p⟶q&amp;quot;&lt;br /&gt;
    have 5:&amp;quot;q&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 3 5 by (rule mp)}&lt;br /&gt;
  then show &amp;quot;(p⟶q)⟶r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_7:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  have &amp;quot;p&amp;quot; using assms  ..&lt;br /&gt;
  with `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
  have &amp;quot;q ⟶ r&amp;quot; using assms ..&lt;br /&gt;
  then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Disyunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej8_auto:&lt;br /&gt;
  assumes &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej8:&lt;br /&gt;
  assumes 1:&amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    moreover&lt;br /&gt;
       {assume &amp;quot;p&amp;quot;&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI1)}&lt;br /&gt;
    moreover&lt;br /&gt;
      {assume 3:&amp;quot;q&amp;quot;&lt;br /&gt;
        have &amp;quot;r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI2)}&lt;br /&gt;
    ultimately have &amp;quot;p ∨ r&amp;quot;  by (rule disjE)}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej9_auto:&lt;br /&gt;
  assumes  &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej9:&lt;br /&gt;
  assumes 1:&amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume  &amp;quot;p ∨ q &amp;quot;&lt;br /&gt;
  moreover &lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 3:&amp;quot;(p ⟶ r)&amp;quot; using 1 by (rule conjunct1) &lt;br /&gt;
      have &amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
  moreover&lt;br /&gt;
    {assume 4:&amp;quot;q&amp;quot;&lt;br /&gt;
      have 5:&amp;quot;(q ⟶ r)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
  ultimately have  &amp;quot;r&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej10_auto:&lt;br /&gt;
  assumes  &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej10:&lt;br /&gt;
  assumes  1:&amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:&amp;quot;p∨q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶r&amp;quot; by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;p∨q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    have 7:&amp;quot;r&amp;quot; using 1 6 by (rule mp)}&lt;br /&gt;
    then have 8:&amp;quot;q⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶r)∧(q⟶r)&amp;quot; using 4 8 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=433</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=433"/>
		<updated>2014-01-20T02:04:39Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R9: Deducción natural proposicional (1) *}&lt;br /&gt;
&lt;br /&gt;
theory R9&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural necesarias son las&lt;br /&gt;
  siguientes: &lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Implicaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej1_auto:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej1:&lt;br /&gt;
  assumes 1:&amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;q&amp;quot;&lt;br /&gt;
    {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 4 2 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;q⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with assms have &amp;quot;q ⟶ r&amp;quot;  ..&lt;br /&gt;
      then have &amp;quot;r&amp;quot; using `q` ..  }&lt;br /&gt;
    then have &amp;quot;p ⟶ r&amp;quot; ..  }&lt;br /&gt;
    then show &amp;quot;q ⟶ (p ⟶ r)&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej2_auto:&lt;br /&gt;
  assumes &amp;quot; p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej2:&lt;br /&gt;
  assumes 1:&amp;quot; p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
 {assume 2:&amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
    {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
      have 5:&amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p ⟶ q)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with  `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using assms `p` ..&lt;br /&gt;
    then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej3_auto:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej3:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
 { assume 1:&amp;quot;(p⟶(q⟶r))&amp;quot;&lt;br /&gt;
     {assume 3:&amp;quot;p⟶q&amp;quot;&lt;br /&gt;
       {assume 4:&amp;quot;p&amp;quot;&lt;br /&gt;
         have 5: &amp;quot;q⟶r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
         have 6:&amp;quot;q&amp;quot; using 3 4 by (rule mp)&lt;br /&gt;
         have &amp;quot;r&amp;quot; using 5 6 by (rule mp)}&lt;br /&gt;
       then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
     then have &amp;quot;(p⟶q)⟶p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p⟶(q⟶r))⟶((p⟶q)⟶p⟶r)&amp;quot; by (rule impI)  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ⟶ q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ p ⟶ r&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with  `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
      have &amp;quot;q ⟶ r&amp;quot; using `p ⟶ q ⟶ r` `p` ..&lt;br /&gt;
      then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej4_auto:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej5_auto:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej5:&lt;br /&gt;
  assumes 1:&amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;p⟶q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
    have 4: &amp;quot;p⟶r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot; using 3 2 by (rule mp)&lt;br /&gt;
    have 6: &amp;quot;r&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;q ∧ r&amp;quot; using 5 6 by (rule conjI)}&lt;br /&gt;
  then show &amp;quot;p ⟶ q ∧ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_5:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  have &amp;quot;(p ⟶ q)&amp;quot; using assms ..&lt;br /&gt;
  then have &amp;quot;q&amp;quot; using `p` ..&lt;br /&gt;
  have &amp;quot;(p ⟶ r)&amp;quot; using assms ..&lt;br /&gt;
  then have &amp;quot;r&amp;quot; using `p` ..&lt;br /&gt;
  with `q` show &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ q ∧ r ⊢ (p ⟶ q) ∧ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej6_auto:&lt;br /&gt;
  assumes  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej6:&lt;br /&gt;
  assumes  1:&amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:&amp;quot;q∧r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;q&amp;quot; using 3 by (rule conjunct1)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶q&amp;quot;  by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;q∧r&amp;quot; using 1 5 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 6 by (rule conjunct2)}&lt;br /&gt;
    then have 5:&amp;quot;p⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶q) ∧ (p ⟶r)&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_6:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  {assume &amp;quot;p&amp;quot;&lt;br /&gt;
  with assms have &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;q&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
  {assume &amp;quot;p&amp;quot;&lt;br /&gt;
  with assms have &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;r&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ⟶ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej7_auto:&lt;br /&gt;
  assumes &amp;quot; p ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej7:&lt;br /&gt;
  assumes 1:&amp;quot; p ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2:&amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3:&amp;quot;q⟶r&amp;quot;  using 1 by (rule conjunct2)&lt;br /&gt;
  {assume 4:&amp;quot;p⟶q&amp;quot;&lt;br /&gt;
    have 5:&amp;quot;q&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 3 5 by (rule mp)}&lt;br /&gt;
  then show &amp;quot;(p⟶q)⟶r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
section {* Disyunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej8_auto:&lt;br /&gt;
  assumes &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej8:&lt;br /&gt;
  assumes 1:&amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    moreover&lt;br /&gt;
       {assume &amp;quot;p&amp;quot;&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI1)}&lt;br /&gt;
    moreover&lt;br /&gt;
      {assume 3:&amp;quot;q&amp;quot;&lt;br /&gt;
        have &amp;quot;r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI2)}&lt;br /&gt;
    ultimately have &amp;quot;p ∨ r&amp;quot;  by (rule disjE)}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej9_auto:&lt;br /&gt;
  assumes  &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej9:&lt;br /&gt;
  assumes 1:&amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume  &amp;quot;p ∨ q &amp;quot;&lt;br /&gt;
  moreover &lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 3:&amp;quot;(p ⟶ r)&amp;quot; using 1 by (rule conjunct1) &lt;br /&gt;
      have &amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
  moreover&lt;br /&gt;
    {assume 4:&amp;quot;q&amp;quot;&lt;br /&gt;
      have 5:&amp;quot;(q ⟶ r)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
  ultimately have  &amp;quot;r&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej10_auto:&lt;br /&gt;
  assumes  &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej10:&lt;br /&gt;
  assumes  1:&amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:&amp;quot;p∨q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶r&amp;quot; by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;p∨q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    have 7:&amp;quot;r&amp;quot; using 1 6 by (rule mp)}&lt;br /&gt;
    then have 8:&amp;quot;q⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶r)∧(q⟶r)&amp;quot; using 4 8 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=432</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=432"/>
		<updated>2014-01-20T00:43:14Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R9: Deducción natural proposicional (1) *}&lt;br /&gt;
&lt;br /&gt;
theory R9&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural necesarias son las&lt;br /&gt;
  siguientes: &lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Implicaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej1_auto:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej1:&lt;br /&gt;
  assumes 1:&amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;q&amp;quot;&lt;br /&gt;
    {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 4 2 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;q⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with assms have &amp;quot;q ⟶ r&amp;quot;  ..&lt;br /&gt;
      then have &amp;quot;r&amp;quot; using `q` ..  }&lt;br /&gt;
    then have &amp;quot;p ⟶ r&amp;quot; ..  }&lt;br /&gt;
    then show &amp;quot;q ⟶ (p ⟶ r)&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej2_auto:&lt;br /&gt;
  assumes &amp;quot; p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej2:&lt;br /&gt;
  assumes 1:&amp;quot; p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
 {assume 2:&amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
    {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
      have 5:&amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p ⟶ q)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with  `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using assms `p` ..&lt;br /&gt;
    then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej3_auto:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej3:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
 { assume 1:&amp;quot;(p⟶(q⟶r))&amp;quot;&lt;br /&gt;
     {assume 3:&amp;quot;p⟶q&amp;quot;&lt;br /&gt;
       {assume 4:&amp;quot;p&amp;quot;&lt;br /&gt;
         have 5: &amp;quot;q⟶r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
         have 6:&amp;quot;q&amp;quot; using 3 4 by (rule mp)&lt;br /&gt;
         have &amp;quot;r&amp;quot; using 5 6 by (rule mp)}&lt;br /&gt;
       then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
     then have &amp;quot;(p⟶q)⟶p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p⟶(q⟶r))⟶((p⟶q)⟶p⟶r)&amp;quot; by (rule impI)  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ⟶ q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ p ⟶ r&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with  `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
      have &amp;quot;q ⟶ r&amp;quot; using `p ⟶ q ⟶ r` `p` ..&lt;br /&gt;
      then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej4_auto:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej5_auto:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej5:&lt;br /&gt;
  assumes 1:&amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;p⟶q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
    have 4: &amp;quot;p⟶r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot; using 3 2 by (rule mp)&lt;br /&gt;
    have 6: &amp;quot;r&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;q ∧ r&amp;quot; using 5 6 by (rule conjI)}&lt;br /&gt;
  then show &amp;quot;p ⟶ q ∧ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_5:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  have &amp;quot;(p ⟶ q)&amp;quot; using assms ..&lt;br /&gt;
  then have &amp;quot;q&amp;quot; using `p` ..&lt;br /&gt;
  have &amp;quot;(p ⟶ r)&amp;quot; using assms ..&lt;br /&gt;
  then have &amp;quot;r&amp;quot; using `p` ..&lt;br /&gt;
  with `q` show &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ q ∧ r ⊢ (p ⟶ q) ∧ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej6_auto:&lt;br /&gt;
  assumes  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej6:&lt;br /&gt;
  assumes  1:&amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:&amp;quot;q∧r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;q&amp;quot; using 3 by (rule conjunct1)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶q&amp;quot;  by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;q∧r&amp;quot; using 1 5 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 6 by (rule conjunct2)}&lt;br /&gt;
    then have 5:&amp;quot;p⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶q) ∧ (p ⟶r)&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej7_auto:&lt;br /&gt;
  assumes &amp;quot; p ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej7:&lt;br /&gt;
  assumes 1:&amp;quot; p ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2:&amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3:&amp;quot;q⟶r&amp;quot;  using 1 by (rule conjunct2)&lt;br /&gt;
  {assume 4:&amp;quot;p⟶q&amp;quot;&lt;br /&gt;
    have 5:&amp;quot;q&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 3 5 by (rule mp)}&lt;br /&gt;
  then show &amp;quot;(p⟶q)⟶r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
section {* Disyunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej8_auto:&lt;br /&gt;
  assumes &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej8:&lt;br /&gt;
  assumes 1:&amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    moreover&lt;br /&gt;
       {assume &amp;quot;p&amp;quot;&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI1)}&lt;br /&gt;
    moreover&lt;br /&gt;
      {assume 3:&amp;quot;q&amp;quot;&lt;br /&gt;
        have &amp;quot;r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI2)}&lt;br /&gt;
    ultimately have &amp;quot;p ∨ r&amp;quot;  by (rule disjE)}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej9_auto:&lt;br /&gt;
  assumes  &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej9:&lt;br /&gt;
  assumes 1:&amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume  &amp;quot;p ∨ q &amp;quot;&lt;br /&gt;
  moreover &lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 3:&amp;quot;(p ⟶ r)&amp;quot; using 1 by (rule conjunct1) &lt;br /&gt;
      have &amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
  moreover&lt;br /&gt;
    {assume 4:&amp;quot;q&amp;quot;&lt;br /&gt;
      have 5:&amp;quot;(q ⟶ r)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
  ultimately have  &amp;quot;r&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej10_auto:&lt;br /&gt;
  assumes  &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej10:&lt;br /&gt;
  assumes  1:&amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:&amp;quot;p∨q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶r&amp;quot; by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;p∨q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    have 7:&amp;quot;r&amp;quot; using 1 6 by (rule mp)}&lt;br /&gt;
    then have 8:&amp;quot;q⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶r)∧(q⟶r)&amp;quot; using 4 8 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=431</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=431"/>
		<updated>2014-01-19T22:53:02Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R9: Deducción natural proposicional (1) *}&lt;br /&gt;
&lt;br /&gt;
theory R9&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural necesarias son las&lt;br /&gt;
  siguientes: &lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Implicaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej1_auto:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej1:&lt;br /&gt;
  assumes 1:&amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;q&amp;quot;&lt;br /&gt;
    {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 4 2 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;q⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with assms have &amp;quot;q ⟶ r&amp;quot;  ..&lt;br /&gt;
      then have &amp;quot;r&amp;quot; using `q` ..  }&lt;br /&gt;
    then have &amp;quot;p ⟶ r&amp;quot; ..  }&lt;br /&gt;
    then show &amp;quot;q ⟶ (p ⟶ r)&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej2_auto:&lt;br /&gt;
  assumes &amp;quot; p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej2:&lt;br /&gt;
  assumes 1:&amp;quot; p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
 {assume 2:&amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
    {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
      have 5:&amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p ⟶ q)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with  `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using assms `p` ..&lt;br /&gt;
    then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej3_auto:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej3:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
 { assume 1:&amp;quot;(p⟶(q⟶r))&amp;quot;&lt;br /&gt;
     {assume 3:&amp;quot;p⟶q&amp;quot;&lt;br /&gt;
       {assume 4:&amp;quot;p&amp;quot;&lt;br /&gt;
         have 5: &amp;quot;q⟶r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
         have 6:&amp;quot;q&amp;quot; using 3 4 by (rule mp)&lt;br /&gt;
         have &amp;quot;r&amp;quot; using 5 6 by (rule mp)}&lt;br /&gt;
       then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
     then have &amp;quot;(p⟶q)⟶p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p⟶(q⟶r))⟶((p⟶q)⟶p⟶r)&amp;quot; by (rule impI)  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ⟶ q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ p ⟶ r&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with  `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
      have &amp;quot;q ⟶ r&amp;quot; using `p ⟶ q ⟶ r` `p` ..&lt;br /&gt;
      then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej4_auto:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej5_auto:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej5:&lt;br /&gt;
  assumes 1:&amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;p⟶q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
    have 4: &amp;quot;p⟶r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot; using 3 2 by (rule mp)&lt;br /&gt;
    have 6: &amp;quot;r&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;q ∧ r&amp;quot; using 5 6 by (rule conjI)}&lt;br /&gt;
  then show &amp;quot;p ⟶ q ∧ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ q ∧ r ⊢ (p ⟶ q) ∧ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej6_auto:&lt;br /&gt;
  assumes  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej6:&lt;br /&gt;
  assumes  1:&amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:&amp;quot;q∧r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;q&amp;quot; using 3 by (rule conjunct1)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶q&amp;quot;  by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;q∧r&amp;quot; using 1 5 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 6 by (rule conjunct2)}&lt;br /&gt;
    then have 5:&amp;quot;p⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶q) ∧ (p ⟶r)&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej7_auto:&lt;br /&gt;
  assumes &amp;quot; p ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej7:&lt;br /&gt;
  assumes 1:&amp;quot; p ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2:&amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3:&amp;quot;q⟶r&amp;quot;  using 1 by (rule conjunct2)&lt;br /&gt;
  {assume 4:&amp;quot;p⟶q&amp;quot;&lt;br /&gt;
    have 5:&amp;quot;q&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 3 5 by (rule mp)}&lt;br /&gt;
  then show &amp;quot;(p⟶q)⟶r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
section {* Disyunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej8_auto:&lt;br /&gt;
  assumes &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej8:&lt;br /&gt;
  assumes 1:&amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    moreover&lt;br /&gt;
       {assume &amp;quot;p&amp;quot;&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI1)}&lt;br /&gt;
    moreover&lt;br /&gt;
      {assume 3:&amp;quot;q&amp;quot;&lt;br /&gt;
        have &amp;quot;r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI2)}&lt;br /&gt;
    ultimately have &amp;quot;p ∨ r&amp;quot;  by (rule disjE)}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej9_auto:&lt;br /&gt;
  assumes  &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej9:&lt;br /&gt;
  assumes 1:&amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume  &amp;quot;p ∨ q &amp;quot;&lt;br /&gt;
  moreover &lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 3:&amp;quot;(p ⟶ r)&amp;quot; using 1 by (rule conjunct1) &lt;br /&gt;
      have &amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
  moreover&lt;br /&gt;
    {assume 4:&amp;quot;q&amp;quot;&lt;br /&gt;
      have 5:&amp;quot;(q ⟶ r)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
  ultimately have  &amp;quot;r&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej10_auto:&lt;br /&gt;
  assumes  &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej10:&lt;br /&gt;
  assumes  1:&amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:&amp;quot;p∨q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶r&amp;quot; by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;p∨q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    have 7:&amp;quot;r&amp;quot; using 1 6 by (rule mp)}&lt;br /&gt;
    then have 8:&amp;quot;q⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶r)∧(q⟶r)&amp;quot; using 4 8 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=430</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=430"/>
		<updated>2014-01-19T22:33:42Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R9: Deducción natural proposicional (1) *}&lt;br /&gt;
&lt;br /&gt;
theory R9&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural necesarias son las&lt;br /&gt;
  siguientes: &lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Implicaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej1_auto:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej1:&lt;br /&gt;
  assumes 1:&amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;q&amp;quot;&lt;br /&gt;
    {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 4 2 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;q⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with assms have &amp;quot;q ⟶ r&amp;quot;  ..&lt;br /&gt;
      then have &amp;quot;r&amp;quot; using `q` ..  }&lt;br /&gt;
    then have &amp;quot;p ⟶ r&amp;quot; ..  }&lt;br /&gt;
    then show &amp;quot;q ⟶ (p ⟶ r)&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej2_auto:&lt;br /&gt;
  assumes &amp;quot; p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej2:&lt;br /&gt;
  assumes 1:&amp;quot; p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
 {assume 2:&amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
    {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
      have 5:&amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p ⟶ q)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with  `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using assms `p` ..&lt;br /&gt;
    then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej3_auto:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej3:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
 { assume 1:&amp;quot;(p⟶(q⟶r))&amp;quot;&lt;br /&gt;
     {assume 3:&amp;quot;p⟶q&amp;quot;&lt;br /&gt;
       {assume 4:&amp;quot;p&amp;quot;&lt;br /&gt;
         have 5: &amp;quot;q⟶r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
         have 6:&amp;quot;q&amp;quot; using 3 4 by (rule mp)&lt;br /&gt;
         have &amp;quot;r&amp;quot; using 5 6 by (rule mp)}&lt;br /&gt;
       then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
     then have &amp;quot;(p⟶q)⟶p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p⟶(q⟶r))⟶((p⟶q)⟶p⟶r)&amp;quot; by (rule impI)  &lt;br /&gt;
qed&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej4_auto:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej5_auto:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej5:&lt;br /&gt;
  assumes 1:&amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;p⟶q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
    have 4: &amp;quot;p⟶r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot; using 3 2 by (rule mp)&lt;br /&gt;
    have 6: &amp;quot;r&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;q ∧ r&amp;quot; using 5 6 by (rule conjI)}&lt;br /&gt;
  then show &amp;quot;p ⟶ q ∧ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ q ∧ r ⊢ (p ⟶ q) ∧ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej6_auto:&lt;br /&gt;
  assumes  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej6:&lt;br /&gt;
  assumes  1:&amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:&amp;quot;q∧r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;q&amp;quot; using 3 by (rule conjunct1)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶q&amp;quot;  by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;q∧r&amp;quot; using 1 5 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 6 by (rule conjunct2)}&lt;br /&gt;
    then have 5:&amp;quot;p⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶q) ∧ (p ⟶r)&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej7_auto:&lt;br /&gt;
  assumes &amp;quot; p ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej7:&lt;br /&gt;
  assumes 1:&amp;quot; p ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2:&amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3:&amp;quot;q⟶r&amp;quot;  using 1 by (rule conjunct2)&lt;br /&gt;
  {assume 4:&amp;quot;p⟶q&amp;quot;&lt;br /&gt;
    have 5:&amp;quot;q&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 3 5 by (rule mp)}&lt;br /&gt;
  then show &amp;quot;(p⟶q)⟶r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
section {* Disyunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej8_auto:&lt;br /&gt;
  assumes &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej8:&lt;br /&gt;
  assumes 1:&amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    moreover&lt;br /&gt;
       {assume &amp;quot;p&amp;quot;&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI1)}&lt;br /&gt;
    moreover&lt;br /&gt;
      {assume 3:&amp;quot;q&amp;quot;&lt;br /&gt;
        have &amp;quot;r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI2)}&lt;br /&gt;
    ultimately have &amp;quot;p ∨ r&amp;quot;  by (rule disjE)}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej9_auto:&lt;br /&gt;
  assumes  &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej9:&lt;br /&gt;
  assumes 1:&amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume  &amp;quot;p ∨ q &amp;quot;&lt;br /&gt;
  moreover &lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 3:&amp;quot;(p ⟶ r)&amp;quot; using 1 by (rule conjunct1) &lt;br /&gt;
      have &amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
  moreover&lt;br /&gt;
    {assume 4:&amp;quot;q&amp;quot;&lt;br /&gt;
      have 5:&amp;quot;(q ⟶ r)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
  ultimately have  &amp;quot;r&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej10_auto:&lt;br /&gt;
  assumes  &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej10:&lt;br /&gt;
  assumes  1:&amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:&amp;quot;p∨q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶r&amp;quot; by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;p∨q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    have 7:&amp;quot;r&amp;quot; using 1 6 by (rule mp)}&lt;br /&gt;
    then have 8:&amp;quot;q⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶r)∧(q⟶r)&amp;quot; using 4 8 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=429</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=429"/>
		<updated>2014-01-19T19:32:05Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R9: Deducción natural proposicional (1) *}&lt;br /&gt;
&lt;br /&gt;
theory R9&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural necesarias son las&lt;br /&gt;
  siguientes: &lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Implicaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej1_auto:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej1:&lt;br /&gt;
  assumes 1:&amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;q&amp;quot;&lt;br /&gt;
    {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 4 2 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;q⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with assms have &amp;quot;q ⟶ r&amp;quot;  ..&lt;br /&gt;
      then have &amp;quot;r&amp;quot; using `q` ..  }&lt;br /&gt;
    then have &amp;quot;p ⟶ r&amp;quot; ..  }&lt;br /&gt;
    then show &amp;quot;q ⟶ (p ⟶ r)&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej2_auto:&lt;br /&gt;
  assumes &amp;quot; p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej2:&lt;br /&gt;
  assumes 1:&amp;quot; p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
 {assume 2:&amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
    {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
      have 5:&amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p ⟶ q)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej3_auto:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej3:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
 { assume 1:&amp;quot;(p⟶(q⟶r))&amp;quot;&lt;br /&gt;
     {assume 3:&amp;quot;p⟶q&amp;quot;&lt;br /&gt;
       {assume 4:&amp;quot;p&amp;quot;&lt;br /&gt;
         have 5: &amp;quot;q⟶r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
         have 6:&amp;quot;q&amp;quot; using 3 4 by (rule mp)&lt;br /&gt;
         have &amp;quot;r&amp;quot; using 5 6 by (rule mp)}&lt;br /&gt;
       then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
     then have &amp;quot;(p⟶q)⟶p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p⟶(q⟶r))⟶((p⟶q)⟶p⟶r)&amp;quot; by (rule impI)  &lt;br /&gt;
qed&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej4_auto:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej5_auto:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej5:&lt;br /&gt;
  assumes 1:&amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;p⟶q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
    have 4: &amp;quot;p⟶r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot; using 3 2 by (rule mp)&lt;br /&gt;
    have 6: &amp;quot;r&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;q ∧ r&amp;quot; using 5 6 by (rule conjI)}&lt;br /&gt;
  then show &amp;quot;p ⟶ q ∧ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ q ∧ r ⊢ (p ⟶ q) ∧ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej6_auto:&lt;br /&gt;
  assumes  &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej6:&lt;br /&gt;
  assumes  1:&amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:&amp;quot;q∧r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;q&amp;quot; using 3 by (rule conjunct1)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶q&amp;quot;  by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;q∧r&amp;quot; using 1 5 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 6 by (rule conjunct2)}&lt;br /&gt;
    then have 5:&amp;quot;p⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶q) ∧ (p ⟶r)&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej7_auto:&lt;br /&gt;
  assumes &amp;quot; p ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej7:&lt;br /&gt;
  assumes 1:&amp;quot; p ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2:&amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3:&amp;quot;q⟶r&amp;quot;  using 1 by (rule conjunct2)&lt;br /&gt;
  {assume 4:&amp;quot;p⟶q&amp;quot;&lt;br /&gt;
    have 5:&amp;quot;q&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 3 5 by (rule mp)}&lt;br /&gt;
  then show &amp;quot;(p⟶q)⟶r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
section {* Disyunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej8_auto:&lt;br /&gt;
  assumes &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej8:&lt;br /&gt;
  assumes 1:&amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows  &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    moreover&lt;br /&gt;
       {assume &amp;quot;p&amp;quot;&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI1)}&lt;br /&gt;
    moreover&lt;br /&gt;
      {assume 3:&amp;quot;q&amp;quot;&lt;br /&gt;
        have &amp;quot;r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI2)}&lt;br /&gt;
    ultimately have &amp;quot;p ∨ r&amp;quot;  by (rule disjE)}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej9_auto:&lt;br /&gt;
  assumes  &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej9:&lt;br /&gt;
  assumes 1:&amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume  &amp;quot;p ∨ q &amp;quot;&lt;br /&gt;
  moreover &lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 3:&amp;quot;(p ⟶ r)&amp;quot; using 1 by (rule conjunct1) &lt;br /&gt;
      have &amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
  moreover&lt;br /&gt;
    {assume 4:&amp;quot;q&amp;quot;&lt;br /&gt;
      have 5:&amp;quot;(q ⟶ r)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
  ultimately have  &amp;quot;r&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej10_auto:&lt;br /&gt;
  assumes  &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej10:&lt;br /&gt;
  assumes  1:&amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:&amp;quot;p∨q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶r&amp;quot; by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;p∨q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    have 7:&amp;quot;r&amp;quot; using 1 6 by (rule mp)}&lt;br /&gt;
    then have 8:&amp;quot;q⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶r)∧(q⟶r)&amp;quot; using 4 8 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_8&amp;diff=408</id>
		<title>Relación 8</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_8&amp;diff=408"/>
		<updated>2014-01-16T01:45:10Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R8: Árboles binarios completos *}&lt;br /&gt;
&lt;br /&gt;
theory R8_Arboles_binarios_completos&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que no tienen información ni en los nodos y ni en las&lt;br /&gt;
  hojas. Por ejemplo, el árbol&lt;br /&gt;
          ·&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       ·     ·&lt;br /&gt;
      / \   / \&lt;br /&gt;
     ·   · ·   · &lt;br /&gt;
  se representa por &amp;quot;N (N H H) (N H H)&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype arbol = H | N arbol arbol&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N (N H H) (N H H)&amp;quot;&lt;br /&gt;
value &amp;quot;(N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;Este tambien es un arbol segun la definicion del tipo. Sin embargo no es completo.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (hojas a) es el número de hojas del árbol a. Por ejemplo,&lt;br /&gt;
     hojas (N (N H H) (N H H)) = 4&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
fun hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;hojas H = Suc 0&amp;quot;&lt;br /&gt;
| &amp;quot;hojas (N i d) = hojas i + hojas d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel maresccas4&amp;quot;&lt;br /&gt;
fun hojas_jrr :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
   &amp;quot;hojas_jrr H = 1&amp;quot;                     --&amp;quot;julrobrel: minima diferencia con la anterior&amp;quot;&lt;br /&gt;
  |&amp;quot;hojas_jrr (N i d) = (hojas_jrr i) + (hojas_jrr d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;hojas_jrr (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;hojas (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 4&amp;quot;&lt;br /&gt;
value &amp;quot;hojas (N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;= 5&amp;quot; --&amp;quot;julrobrel: la funcion tambien funciona sobre arboles binarios no completos&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (profundidad a) es la profundidad del árbol a. Por ejemplo,&lt;br /&gt;
     profundidad (N (N H H) (N H H)) = 2&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
fun profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad H = 0&amp;quot;&lt;br /&gt;
| &amp;quot;profundidad (N i d) = (if profundidad i &amp;gt; profundidad d then Suc (profundidad i) else Suc (profundidad d))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;&lt;br /&gt;
fun maximo :: &amp;quot;nat =&amp;gt; nat =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;maximo a b = (if a &amp;lt; b then b else a)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;maximo 3 4&amp;quot; -- &amp;quot;=4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;&lt;br /&gt;
fun profundidad_jrr :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad_jrr H = 0&amp;quot;&lt;br /&gt;
 |&amp;quot;profundidad_jrr (N i d) = Suc (maximo (profundidad_jrr i) (profundidad_jrr d))&amp;quot; --&amp;quot;julrobrel: En realidad al ser arboles completos no deberia hacer falta el maximo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;profundidad (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 2&amp;quot;&lt;br /&gt;
value &amp;quot;profundidad (N (N H H) (N (N H H) H))&amp;quot; -- &amp;quot;= 3&amp;quot; --&amp;quot;julrobrel: profundidad tambien funciona sobre arboles binarios no completos&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;profundidad_jrr (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 2&amp;quot;&lt;br /&gt;
value &amp;quot;profundidad_jrr (N (N H H) (N (N H H) H))&amp;quot; -- &amp;quot;= 3&amp;quot; --&amp;quot;julrobrel: profundidad tambien funciona sobre arboles binarios no completos&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4&amp;quot;&lt;br /&gt;
fun profundidad3 :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad3 (H) = 0&amp;quot;&lt;br /&gt;
| &amp;quot;profundidad3 (N ai ad) = 1 + (if (profundidad3 ai &amp;gt; profundidad3 ad) then profundidad3 ai else profundidad3 ad)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;profundidad3 (N (N H H) (N H (N H (N H H))))&amp;quot; -- &amp;quot;= 4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     abc :: &amp;quot;nat ⇒ arbol&amp;quot; &lt;br /&gt;
  tal que (abc n) es el árbol binario completo de profundidad n. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     abc 3 = N (N (N H H) (N H H)) (N (N H H) (N H H))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1, julrobrel irealetei juaruipav maresccas4&amp;quot;&lt;br /&gt;
fun abc :: &amp;quot;nat ⇒ arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;abc 0 = H&amp;quot;&lt;br /&gt;
| &amp;quot;abc (Suc n) = (N (abc n) (abc n))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;abc 3&amp;quot; -- &amp;quot;= N (N (N H H) (N H H)) (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un árbol binario a es completo respecto de la medida f si&lt;br /&gt;
  a es una hoja o bien a es de la forma (N i d) y se cumple que tanto i&lt;br /&gt;
  como d son árboles binarios completos respecto de f y, además, &lt;br /&gt;
  f(i) = f(r).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&lt;br /&gt;
  tal que (es_abc f a) se verifica si a es un árbol binario completo&lt;br /&gt;
  respecto de f.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 irealetei juaruipav maresccas4&amp;quot;&lt;br /&gt;
fun es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&amp;quot; where&lt;br /&gt;
  &amp;quot;es_abc f H = True&amp;quot;&lt;br /&gt;
| &amp;quot;es_abc f (N i d) = ((es_abc f i) ∧ (es_abc f d) ∧ (f i = f d))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;es_abc profundidad ( N (N (N H H) (N H H)) (N (N H H) (N H H)))&amp;quot; -- &amp;quot;true&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc profundidad ( N (N (N H H) (N H H)) (N H (N H H)))&amp;quot; -- &amp;quot;false&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc profundidad ( N (N (N H H) (N H H)) (N (N H H) H))&amp;quot; -- &amp;quot;false&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc profundidad ( N (N H (N H H)) (N H (N H H)))&amp;quot; -- &amp;quot;false&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;&lt;br /&gt;
fun es_abc_jrr:: &amp;quot;nat =&amp;gt; arbol =&amp;gt; bool&amp;quot; where&lt;br /&gt;
   &amp;quot;es_abc_jrr 0 H = True&amp;quot;&lt;br /&gt;
  |&amp;quot;es_abc_jrr (Suc f) H = False&amp;quot;&lt;br /&gt;
  |&amp;quot;es_abc_jrr 0 (N i d) = False&amp;quot; &lt;br /&gt;
  |&amp;quot;es_abc_jrr (Suc f) (N i d) = (((es_abc_jrr f i) ∧ (es_abc_jrr f d)) ∧ ((profundidad_jrr i) = (profundidad_jrr d)) ∧ ((profundidad_jrr i) = f))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;es_abc_jrr 2 (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc_jrr 0 (N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;=False&amp;quot; --&amp;quot;julrobrel: No es un arbol binario completo&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc_jrr 1 (N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;=False&amp;quot; --&amp;quot;julrobrel: No es un arbol binario completo&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc_jrr 2 (N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;=False&amp;quot; --&amp;quot;julrobrel: No es un arbol binario completo&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc_jrr 3 (N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;=False&amp;quot; --&amp;quot;julrobrel: No es un arbol binario completo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. (size a) es el número de nodos del árbol a. Por ejemplo,&lt;br /&gt;
     size (N (N H H) (N H H)) = 3&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;size (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
value &amp;quot;size (N (N (N H H) (N H H)) (N (N H H) (N H H)))&amp;quot;&lt;br /&gt;
value &amp;quot;size (N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;julrobrel: No es un arbol binario completo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. Tenemos 3 funciones de medida sobre los árboles: número de&lt;br /&gt;
  hojas, número de nodos y profundidad. A cada una le corresponde un&lt;br /&gt;
  concepto de completitud. En los siguientes ejercicios demostraremos&lt;br /&gt;
  que los tres conceptos de completitud son iguales.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de hojas.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
--&amp;quot;julrobrel: en un arbol binario completo la profundidad y las hojas estan relacionadas por la siguiente igualdad (hojas = 2^profundidad)&amp;quot;&lt;br /&gt;
lemma &amp;quot;(hojas (abc n))=2^(profundidad (abc n))&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei: casi me estalla el cerebro con esta demo, gracias a Marco que me dio una pista hace un par de días sobre que el había usado el assumes. La automática se me queda a medias., diecabmen1&amp;quot;&lt;br /&gt;
lemma 00:&lt;br /&gt;
 assumes &amp;quot;es_abc profundidad a&amp;quot;&lt;br /&gt;
 shows &amp;quot;hojas a = 2^(profundidad a)&amp;quot;&lt;br /&gt;
 using assms&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;es_abc hojas a = es_abc profundidad a&amp;quot;&lt;br /&gt;
 by (induct a) (auto simp add: 00)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4: no he sido capaz de terminar la demostración manual&amp;quot;&lt;br /&gt;
theorem &amp;quot;es_abc profundidad a = es_abc hojas a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
 show &amp;quot;?P H&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix i d&lt;br /&gt;
 assume H1: &amp;quot;?P i&amp;quot;&lt;br /&gt;
 assume H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
 show &amp;quot;?P (N i d)&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume H: &amp;quot;es_abc profundidad (N i d)&amp;quot;&lt;br /&gt;
  then have &amp;quot;es_abc profundidad (N i d) = (es_abc profundidad i ∧ es_abc profundidad d ∧ profundidad i = profundidad d)&amp;quot;  by simp&lt;br /&gt;
  also have &amp;quot;... = (es_abc hojas i ∧ es_abc hojas d ∧ profundidad i = profundidad d)&amp;quot; using H1 H2  by simp&lt;br /&gt;
  also have &amp;quot;... = (es_abc hojas i ∧ es_abc hojas d ∧ hojas i = hojas d)&amp;quot; using H by (simp add: 00)&lt;br /&gt;
  also have &amp;quot;... = es_abc hojas (N i d)&amp;quot; by simp&lt;br /&gt;
  finally show ?thesis .&lt;br /&gt;
 next&lt;br /&gt;
  assume H: &amp;quot;¬ es_abc profundidad (N i d)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N i d)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
   assume I: &amp;quot;(es_abc profundidad i ∧ es_abc profundidad d)&amp;quot;&lt;br /&gt;
   then have &amp;quot;es_abc profundidad (N i d) = (es_abc profundidad i ∧ es_abc profundidad d ∧ profundidad i = profundidad d)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...= (profundidad i = profundidad d)&amp;quot; using H I by simp&lt;br /&gt;
   &lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que un árbol binario a es completo respecto del&lt;br /&gt;
  número de hojas syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
--&amp;quot;julrobrel: la relacion entre hojas y nodos la da la siguiente ecuacion (nodos = hojas -1) o lo que es lo mismo (nodos+1=hojas)&amp;quot;&lt;br /&gt;
lemma &amp;quot;Suc(size (abc n))=hojas (abc n)&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei maresccas4 diecabmen1&amp;quot;&lt;br /&gt;
(*he conseguido hacer uno!! bieeeeeeeen!!&amp;quot;*)&lt;br /&gt;
lemma relaccion_hojas_nodo:&amp;quot;hojas (a) = size (a) + 1&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;es_abc hojas a = es_abc size a&amp;quot;&lt;br /&gt;
by (induct a) (auto simp add: relaccion_hojas_nodo)&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;es_abc hojas a = es_abc size a&amp;quot;&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  show &amp;quot;es_abc hojas H = es_abc size H&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
  fix i d&lt;br /&gt;
  assume HI1:&amp;quot;es_abc hojas i = es_abc size i&amp;quot;&lt;br /&gt;
  assume HI2:&amp;quot;es_abc hojas d = es_abc size d&amp;quot;&lt;br /&gt;
  show &amp;quot; es_abc hojas (N i d) = es_abc size (N i d)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
   have &amp;quot;es_abc hojas (N i d) = (es_abc hojas i ∧ es_abc hojas d ∧ hojas i = hojas d)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (es_abc size i ∧ es_abc size d ∧ hojas i = hojas d)&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
   also have &amp;quot;... = (es_abc size i ∧ es_abc size d ∧ size i = size d)&amp;quot; by (simp add:relaccion_hojas_nodo)&lt;br /&gt;
   also have &amp;quot;... =  es_abc size (N i d)&amp;quot; by simp&lt;br /&gt;
   finally show ?thesis by simp&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
--&amp;quot;julrobrel: la relacion entre la profundidad y el numero de nodos es (nodos+1=2^profundidad)&amp;quot;&lt;br /&gt;
lemma &amp;quot;Suc(size (abc n))=2^(profundidad (abc n))&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei: suponía que sería como el 7 pero no sale... por mucho que me pongo a definir lemas. De todos modos dejo donde me he quedado&amp;quot;&lt;br /&gt;
lemma 02:&lt;br /&gt;
assumes &amp;quot;es_abc size a&amp;quot;&lt;br /&gt;
shows &amp;quot;size a + 1 = 2^(profundidad a)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
lemma 03:&lt;br /&gt;
assumes &amp;quot;es_abc hojas a&amp;quot;&lt;br /&gt;
shows &amp;quot;Suc(size a) = hojas a&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;es_abc profundidad a = es_abc size a&amp;quot;&lt;br /&gt;
by (induct a) (auto simp add:00 02 03) --&amp;quot;He puesto todas la teorías aunque suponía que con 02 sería suficiente&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que (abc n) es un árbol binario completo.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
--&amp;quot;julrobrel: para todo lo anterior nos hemos basado en que (abc n) siempre devuelve un arbol binario completo. Habra que demostrarlo...&amp;quot;&lt;br /&gt;
lemma profundidad_lemma: &amp;quot;profundidad_jrr (abc n) = n&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;es_abc_jrr n (abc n)&amp;quot;&lt;br /&gt;
by (induct n) (auto simp add:profundidad_lemma)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc profundidad (abc n)&amp;quot; by (induct n) auto&lt;br /&gt;
(* irealetei: es raro, hay que hacerlo por induct aunque parece que no usa la HI... pero por cases no se lo traga*)&lt;br /&gt;
lemma &amp;quot;es_abc profundidad (abc n)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;es_abc profundidad (abc 0)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume &amp;quot; es_abc profundidad (abc n)&amp;quot;&lt;br /&gt;
  then have &amp;quot;es_abc profundidad (abc (Suc n))= es_abc profundidad (N (abc n) (abc n))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = es_abc profundidad (abc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;es_abc profundidad (abc n) ⟹ es_abc profundidad (abc (Suc n))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc profundidad (abc n)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;es_abc profundidad (abc 0)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI: &amp;quot;es_abc profundidad (abc n)&amp;quot;&lt;br /&gt;
  then have &amp;quot;es_abc profundidad (abc (Suc n))= es_abc profundidad (N (abc n) (abc n))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (es_abc profundidad (abc n) ∧ es_abc profundidad (abc n) ∧ profundidad (abc n) = profundidad (abc n))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;es_abc profundidad (abc (Suc n))&amp;quot; using HI by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que si a es un árbolo binario completo&lt;br /&gt;
  respecto de la profundidad, entonces a es (abc (profundidad a)).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
lemma &amp;quot;(es_abc_jrr (profundidad_jrr a) a) ⟶ a = abc (profundidad_jrr a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc profundidad a ⟹ a = abc (profundidad a)&amp;quot; by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Encontrar una medida f tal que (es_abc f) es distinto de &lt;br /&gt;
  (es_abc size).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc_jrr f t = es_abc_jrr (size t) t&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
--&amp;quot;julrobrel: El arbol que es una hoja...&amp;quot;&lt;br /&gt;
(*&lt;br /&gt;
Quickcheck found a counterexample:&lt;br /&gt;
&lt;br /&gt;
f = Suc 0&lt;br /&gt;
t = H&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
es_abc f t = False&lt;br /&gt;
es_abc (size t) t = True&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei maresccas4&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc f a = es_abc size a&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
(*f = λx. a&lt;br /&gt;
a = N H (N H H)*)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_8&amp;diff=398</id>
		<title>Relación 8</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_8&amp;diff=398"/>
		<updated>2014-01-11T01:06:11Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R8: Árboles binarios completos *}&lt;br /&gt;
&lt;br /&gt;
theory R8_Arboles_binarios_completos&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que no tienen información ni en los nodos y ni en las&lt;br /&gt;
  hojas. Por ejemplo, el árbol&lt;br /&gt;
          ·&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       ·     ·&lt;br /&gt;
      / \   / \&lt;br /&gt;
     ·   · ·   · &lt;br /&gt;
  se representa por &amp;quot;N (N H H) (N H H)&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype arbol = H | N arbol arbol&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N (N H H) (N H H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (hojas a) es el número de hojas del árbol a. Por ejemplo,&lt;br /&gt;
     hojas (N (N H H) (N H H)) = 4&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;hojas H = Suc 0&amp;quot;&lt;br /&gt;
| &amp;quot;hojas (N i d) = hojas i + hojas d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;hojas (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (profundidad a) es la profundidad del árbol a. Por ejemplo,&lt;br /&gt;
     profundidad (N (N H H) (N H H)) = 2&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad H = 0&amp;quot;&lt;br /&gt;
| &amp;quot;profundidad (N i d) = (if profundidad i &amp;gt; profundidad d then Suc (profundidad i) else Suc (profundidad d))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;profundidad (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     abc :: &amp;quot;nat ⇒ arbol&amp;quot; &lt;br /&gt;
  tal que (abc n) es el árbol binario completo de profundidad n. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     abc 3 = N (N (N H H) (N H H)) (N (N H H) (N H H))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun abc :: &amp;quot;nat ⇒ arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;abc 0 = H&amp;quot;&lt;br /&gt;
| &amp;quot;abc (Suc n) = (N (abc n) (abc n))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;abc 3&amp;quot; -- &amp;quot;= N (N (N H H) (N H H)) (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un árbol binario a es completo respecto de la medida f si&lt;br /&gt;
  a es una hoja o bien a es de la forma (N i d) y se cumple que tanto i&lt;br /&gt;
  como d son árboles binarios completos respecto de f y, además, &lt;br /&gt;
  f(i) = f(r).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&lt;br /&gt;
  tal que (es_abc f a) se verifica si a es un árbol binario completo&lt;br /&gt;
  respecto de f.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&amp;quot; where&lt;br /&gt;
  &amp;quot;es_abc f H = True&amp;quot;&lt;br /&gt;
| &amp;quot;es_abc f (N i d) = ((es_abc f i) ∧ (es_abc f d) ∧ (f i = f d))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. (size a) es el número de nodos del árbol a. Por ejemplo,&lt;br /&gt;
     size (N (N H H) (N H H)) = 3&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;size (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
value &amp;quot;size (N (N (N H H) (N H H)) (N (N H H) (N H H)))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. Tenemos 3 funciones de medida sobre los árboles: número de&lt;br /&gt;
  hojas, número de nodos y profundidad. A cada una le corresponde un&lt;br /&gt;
  concepto de completitud. En los siguientes ejercicios demostraremos&lt;br /&gt;
  que los tres conceptos de completitud son iguales.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de hojas.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que un árbol binario a es completo respecto del&lt;br /&gt;
  número de hojas syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que (abc n) es un árbol binario completo.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que si a es un árbolo binario completo&lt;br /&gt;
  respecto de la profundidad, entonces a es (abc (profundidad a)).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Encontrar una medida f tal que (es_abc f) es distinto de &lt;br /&gt;
  (es_abc size).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_8&amp;diff=397</id>
		<title>Relación 8</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_8&amp;diff=397"/>
		<updated>2014-01-10T01:54:42Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R8: Árboles binarios completos *}&lt;br /&gt;
&lt;br /&gt;
theory R8_Arboles_binarios_completos&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que no tienen información ni en los nodos y ni en las&lt;br /&gt;
  hojas. Por ejemplo, el árbol&lt;br /&gt;
          ·&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       ·     ·&lt;br /&gt;
      / \   / \&lt;br /&gt;
     ·   · ·   · &lt;br /&gt;
  se representa por &amp;quot;N (N H H) (N H H)&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype arbol = H | N arbol arbol&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N (N H H) (N H H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (hojas a) es el número de hojas del árbol a. Por ejemplo,&lt;br /&gt;
     hojas (N (N H H) (N H H)) = 4&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;hojas H = Suc 0&amp;quot;&lt;br /&gt;
| &amp;quot;hojas (N i d) = hojas i + hojas d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;hojas (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (profundidad a) es la profundidad del árbol a. Por ejemplo,&lt;br /&gt;
     profundidad (N (N H H) (N H H)) = 2&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad H = 0&amp;quot;&lt;br /&gt;
| &amp;quot;profundidad (N i d) = (if profundidad i &amp;gt; profundidad d then Suc (profundidad i) else Suc (profundidad d))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;profundidad (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     abc :: &amp;quot;nat ⇒ arbol&amp;quot; &lt;br /&gt;
  tal que (abc n) es el árbol binario completo de profundidad n. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     abc 3 = N (N (N H H) (N H H)) (N (N H H) (N H H))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun abc :: &amp;quot;nat ⇒ arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;abc 0 = H&amp;quot;&lt;br /&gt;
| &amp;quot;abc (Suc n) = (N (abc n) (abc n))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;abc 3&amp;quot; -- &amp;quot;= N (N (N H H) (N H H)) (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un árbol binario a es completo respecto de la medida f si&lt;br /&gt;
  a es una hoja o bien a es de la forma (N i d) y se cumple que tanto i&lt;br /&gt;
  como d son árboles binarios completos respecto de f y, además, &lt;br /&gt;
  f(i) = f(r).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&lt;br /&gt;
  tal que (es_abc f a) se verifica si a es un árbol binario completo&lt;br /&gt;
  respecto de f.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&amp;quot; where&lt;br /&gt;
  &amp;quot;es_abc f t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. (size a) es el número de nodos del árbol a. Por ejemplo,&lt;br /&gt;
     size (N (N H H) (N H H)) = 3&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;size (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
value &amp;quot;size (N (N (N H H) (N H H)) (N (N H H) (N H H)))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. Tenemos 3 funciones de medida sobre los árboles: número de&lt;br /&gt;
  hojas, número de nodos y profundidad. A cada una le corresponde un&lt;br /&gt;
  concepto de completitud. En los siguientes ejercicios demostraremos&lt;br /&gt;
  que los tres conceptos de completitud son iguales.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de hojas.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que un árbol binario a es completo respecto del&lt;br /&gt;
  número de hojas syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que (abc n) es un árbol binario completo.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que si a es un árbolo binario completo&lt;br /&gt;
  respecto de la profundidad, entonces a es (abc (profundidad a)).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Encontrar una medida f tal que (es_abc f) es distinto de &lt;br /&gt;
  (es_abc size).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_8&amp;diff=396</id>
		<title>Relación 8</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_8&amp;diff=396"/>
		<updated>2014-01-10T01:39:19Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R8: Árboles binarios completos *}&lt;br /&gt;
&lt;br /&gt;
theory R8_Arboles_binarios_completos&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que no tienen información ni en los nodos y ni en las&lt;br /&gt;
  hojas. Por ejemplo, el árbol&lt;br /&gt;
          ·&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       ·     ·&lt;br /&gt;
      / \   / \&lt;br /&gt;
     ·   · ·   · &lt;br /&gt;
  se representa por &amp;quot;N (N H H) (N H H)&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype arbol = H | N arbol arbol&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N (N H H) (N H H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (hojas a) es el número de hojas del árbol a. Por ejemplo,&lt;br /&gt;
     hojas (N (N H H) (N H H)) = 4&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;hojas H = Suc 0&amp;quot;&lt;br /&gt;
| &amp;quot;hojas (N i d) = hojas i + hojas d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;hojas (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (profundidad a) es la profundidad del árbol a. Por ejemplo,&lt;br /&gt;
     profundidad (N (N H H) (N H H)) = 2&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad H = 0&amp;quot;&lt;br /&gt;
| &amp;quot;profundidad (N i d) = (if profundidad i &amp;gt; profundidad d then Suc (profundidad i) else Suc (profundidad d))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;profundidad (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     abc :: &amp;quot;nat ⇒ arbol&amp;quot; &lt;br /&gt;
  tal que (abc n) es el árbol binario completo de profundidad n. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     abc 3 = N (N (N H H) (N H H)) (N (N H H) (N H H))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun abc :: &amp;quot;nat ⇒ arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;abc 0 = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;abc 3&amp;quot; -- &amp;quot;= N (N (N H H) (N H H)) (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un árbol binario a es completo respecto de la medida f si&lt;br /&gt;
  a es una hoja o bien a es de la forma (N i d) y se cumple que tanto i&lt;br /&gt;
  como d son árboles binarios completos respecto de f y, además, &lt;br /&gt;
  f(i) = f(r).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&lt;br /&gt;
  tal que (es_abc f a) se verifica si a es un árbol binario completo&lt;br /&gt;
  respecto de f.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&amp;quot; where&lt;br /&gt;
  &amp;quot;es_abc f t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. (size a) es el número de nodos del árbol a. Por ejemplo,&lt;br /&gt;
     size (N (N H H) (N H H)) = 3&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;size (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
value &amp;quot;size (N (N (N H H) (N H H)) (N (N H H) (N H H)))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. Tenemos 3 funciones de medida sobre los árboles: número de&lt;br /&gt;
  hojas, número de nodos y profundidad. A cada una le corresponde un&lt;br /&gt;
  concepto de completitud. En los siguientes ejercicios demostraremos&lt;br /&gt;
  que los tres conceptos de completitud son iguales.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de hojas.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que un árbol binario a es completo respecto del&lt;br /&gt;
  número de hojas syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que (abc n) es un árbol binario completo.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que si a es un árbolo binario completo&lt;br /&gt;
  respecto de la profundidad, entonces a es (abc (profundidad a)).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Encontrar una medida f tal que (es_abc f) es distinto de &lt;br /&gt;
  (es_abc size).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_8&amp;diff=395</id>
		<title>Relación 8</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_8&amp;diff=395"/>
		<updated>2014-01-10T01:13:31Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R8: Árboles binarios completos *}&lt;br /&gt;
&lt;br /&gt;
theory R8_Arboles_binarios_completos&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que no tienen información ni en los nodos y ni en las&lt;br /&gt;
  hojas. Por ejemplo, el árbol&lt;br /&gt;
          ·&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       ·     ·&lt;br /&gt;
      / \   / \&lt;br /&gt;
     ·   · ·   · &lt;br /&gt;
  se representa por &amp;quot;N (N H H) (N H H)&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype arbol = H | N arbol arbol&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N (N H H) (N H H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (hojas a) es el número de hojas del árbol a. Por ejemplo,&lt;br /&gt;
     hojas (N (N H H) (N H H)) = 4&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;hojas H = Suc 0&amp;quot;&lt;br /&gt;
| &amp;quot;hojas (N i d) = hojas i + hojas d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;hojas (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (profundidad a) es la profundidad del árbol a. Por ejemplo,&lt;br /&gt;
     profundidad (N (N H H) (N H H)) = 2&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;profundidad (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     abc :: &amp;quot;nat ⇒ arbol&amp;quot; &lt;br /&gt;
  tal que (abc n) es el árbol binario completo de profundidad n. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     abc 3 = N (N (N H H) (N H H)) (N (N H H) (N H H))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun abc :: &amp;quot;nat ⇒ arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;abc 0 = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;abc 3&amp;quot; -- &amp;quot;= N (N (N H H) (N H H)) (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un árbol binario a es completo respecto de la medida f si&lt;br /&gt;
  a es una hoja o bien a es de la forma (N i d) y se cumple que tanto i&lt;br /&gt;
  como d son árboles binarios completos respecto de f y, además, &lt;br /&gt;
  f(i) = f(r).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&lt;br /&gt;
  tal que (es_abc f a) se verifica si a es un árbol binario completo&lt;br /&gt;
  respecto de f.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&amp;quot; where&lt;br /&gt;
  &amp;quot;es_abc f t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. (size a) es el número de nodos del árbol a. Por ejemplo,&lt;br /&gt;
     size (N (N H H) (N H H)) = 3&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;size (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
value &amp;quot;size (N (N (N H H) (N H H)) (N (N H H) (N H H)))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. Tenemos 3 funciones de medida sobre los árboles: número de&lt;br /&gt;
  hojas, número de nodos y profundidad. A cada una le corresponde un&lt;br /&gt;
  concepto de completitud. En los siguientes ejercicios demostraremos&lt;br /&gt;
  que los tres conceptos de completitud son iguales.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de hojas.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que un árbol binario a es completo respecto del&lt;br /&gt;
  número de hojas syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que (abc n) es un árbol binario completo.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que si a es un árbolo binario completo&lt;br /&gt;
  respecto de la profundidad, entonces a es (abc (profundidad a)).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Encontrar una medida f tal que (es_abc f) es distinto de &lt;br /&gt;
  (es_abc size).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=364</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=364"/>
		<updated>2013-12-24T01:00:19Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R7: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R7&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;preOrden (N x i d) = [x] @ (preOrden i) @ (preOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,d,c,f,h,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;postOrden (N x i d) = (postOrden i) @ (postOrden d) @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;inOrden (N x i d) = (inOrden i) @ [x] @ (inOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo (H x) = (H x)&amp;quot;&lt;br /&gt;
| &amp;quot;espejo (N x i d) = (N x (espejo d) (espejo i))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;preOrden (espejo (N a1 a2 a3)) = preOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = [a1] @ preOrden (espejo a3) @ preOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev [a1] @ rev (postOrden a3) @ rev (postOrden a2)&amp;quot; using HI1 HI2 by simp &lt;br /&gt;
    also have &amp;quot;… = rev ((postOrden a2) @ (postOrden a3) @ [a1])&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;postOrden (espejo (N a1 a2 a3)) = postOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = postOrden (espejo a3) @ postOrden (espejo a2) @ [a1]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (preOrden a3) @ rev (preOrden a2) @ rev [a1]&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev ([a1] @ preOrden a2 @ preOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis  by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;inOrden (espejo (N a1 a2 a3)) = inOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = inOrden (espejo a3) @ [a1] @ inOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a3) @ rev [a1] @ rev (inOrden a2)&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a2 @ [a1] @ inOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;raiz (N x i d) = x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;extremo_izquierda (N x i d) = extremo_izquierda i&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;extremo_derecha (N x i d) = extremo_derecha d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma inOrdenNN: &amp;quot;inOrden a ≠ []&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -  &lt;br /&gt;
    have &amp;quot;last (inOrden (N a1 a2 a3)) = last (a1 # inOrden a3)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = last (inOrden a3)&amp;quot;  by (simp add: inOrdenNN)&lt;br /&gt;
    also have &amp;quot;… = extremo_derecha a3&amp;quot; using HI2 by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
by (induct a) (auto simp add: inOrdenNN)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof - &lt;br /&gt;
    have &amp;quot;hd (inOrden (N a1 a2 a3)) = hd  (inOrden a2 @ a1 # inOrden a3)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = hd (inOrden a2)&amp;quot;  by (simp add: inOrdenNN)&lt;br /&gt;
    also have &amp;quot;… = extremo_izquierda a2&amp;quot; using HI1 by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;(is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof - &lt;br /&gt;
    have &amp;quot; hd (preOrden (N a1 a2 a3)) = hd (a1 # preOrden a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a1&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof - &lt;br /&gt;
    have &amp;quot; hd (preOrden (N a1 a2 a3)) = hd (a1 # preOrden a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a1&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Quickcheck found a counterexample:&lt;br /&gt;
&lt;br /&gt;
a = N a⇩1 (H a⇩2) (H a⇩1)&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
hd (inOrden a) = a⇩2&lt;br /&gt;
raiz a = a⇩1 *)&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof - &lt;br /&gt;
    thm postOrden.simps&lt;br /&gt;
    thm hd.simps&lt;br /&gt;
    thm raiz.simps&lt;br /&gt;
    have &amp;quot; last (postOrden (N a1 a2 a3)) = last (postOrden a2 @ postOrden a3 @ [a1])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = last ([a1])&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=363</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=363"/>
		<updated>2013-12-24T00:52:49Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R7: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R7&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;preOrden (N x i d) = [x] @ (preOrden i) @ (preOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,d,c,f,h,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;postOrden (N x i d) = (postOrden i) @ (postOrden d) @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;inOrden (N x i d) = (inOrden i) @ [x] @ (inOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo (H x) = (H x)&amp;quot;&lt;br /&gt;
| &amp;quot;espejo (N x i d) = (N x (espejo d) (espejo i))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;preOrden (espejo (N a1 a2 a3)) = preOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = [a1] @ preOrden (espejo a3) @ preOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev [a1] @ rev (postOrden a3) @ rev (postOrden a2)&amp;quot; using HI1 HI2 by simp &lt;br /&gt;
    also have &amp;quot;… = rev ((postOrden a2) @ (postOrden a3) @ [a1])&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;postOrden (espejo (N a1 a2 a3)) = postOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = postOrden (espejo a3) @ postOrden (espejo a2) @ [a1]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (preOrden a3) @ rev (preOrden a2) @ rev [a1]&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev ([a1] @ preOrden a2 @ preOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis  by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;inOrden (espejo (N a1 a2 a3)) = inOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = inOrden (espejo a3) @ [a1] @ inOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a3) @ rev [a1] @ rev (inOrden a2)&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a2 @ [a1] @ inOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;raiz (N x i d) = x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;extremo_izquierda (N x i d) = extremo_izquierda i&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;extremo_derecha (N x i d) = extremo_derecha d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma inOrdenNN: &amp;quot;inOrden a ≠ []&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -  &lt;br /&gt;
    have &amp;quot;last (inOrden (N a1 a2 a3)) = last (a1 # inOrden a3)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = last (inOrden a3)&amp;quot;  by (simp add: inOrdenNN)&lt;br /&gt;
    also have &amp;quot;… = extremo_derecha a3&amp;quot; using HI2 by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
by (induct a) (auto simp add: inOrdenNN)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof - &lt;br /&gt;
    have &amp;quot;hd (inOrden (N a1 a2 a3)) = hd  (inOrden a2 @ a1 # inOrden a3)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = hd (inOrden a2)&amp;quot;  by (simp add: inOrdenNN)&lt;br /&gt;
    also have &amp;quot;… = extremo_izquierda a2&amp;quot; using HI1 by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;(is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof - &lt;br /&gt;
    have &amp;quot; hd (preOrden (N a1 a2 a3)) = hd (a1 # preOrden a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a1&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof - &lt;br /&gt;
    have &amp;quot; hd (preOrden (N a1 a2 a3)) = hd (a1 # preOrden a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a1&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Quickcheck found a counterexample:&lt;br /&gt;
&lt;br /&gt;
a = N a⇩1 (H a⇩2) (H a⇩1)&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
hd (inOrden a) = a⇩2&lt;br /&gt;
raiz a = a⇩1 *)&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=362</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=362"/>
		<updated>2013-12-24T00:49:07Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R7: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R7&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;preOrden (N x i d) = [x] @ (preOrden i) @ (preOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,d,c,f,h,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;postOrden (N x i d) = (postOrden i) @ (postOrden d) @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;inOrden (N x i d) = (inOrden i) @ [x] @ (inOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo (H x) = (H x)&amp;quot;&lt;br /&gt;
| &amp;quot;espejo (N x i d) = (N x (espejo d) (espejo i))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;preOrden (espejo (N a1 a2 a3)) = preOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = [a1] @ preOrden (espejo a3) @ preOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev [a1] @ rev (postOrden a3) @ rev (postOrden a2)&amp;quot; using HI1 HI2 by simp &lt;br /&gt;
    also have &amp;quot;… = rev ((postOrden a2) @ (postOrden a3) @ [a1])&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;postOrden (espejo (N a1 a2 a3)) = postOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = postOrden (espejo a3) @ postOrden (espejo a2) @ [a1]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (preOrden a3) @ rev (preOrden a2) @ rev [a1]&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev ([a1] @ preOrden a2 @ preOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis  by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;inOrden (espejo (N a1 a2 a3)) = inOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = inOrden (espejo a3) @ [a1] @ inOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a3) @ rev [a1] @ rev (inOrden a2)&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a2 @ [a1] @ inOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;raiz (N x i d) = x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;extremo_izquierda (N x i d) = extremo_izquierda i&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;extremo_derecha (N x i d) = extremo_derecha d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma inOrdenNN: &amp;quot;inOrden a ≠ []&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -  &lt;br /&gt;
    have &amp;quot;last (inOrden (N a1 a2 a3)) = last (a1 # inOrden a3)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = last (inOrden a3)&amp;quot;  by (simp add: inOrdenNN)&lt;br /&gt;
    also have &amp;quot;… = extremo_derecha a3&amp;quot; using HI2 by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
by (induct a) (auto simp add: inOrdenNN)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof - &lt;br /&gt;
    have &amp;quot;hd (inOrden (N a1 a2 a3)) = hd  (inOrden a2 @ a1 # inOrden a3)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = hd (inOrden a2)&amp;quot;  by (simp add: inOrdenNN)&lt;br /&gt;
    also have &amp;quot;… = extremo_izquierda a2&amp;quot; using HI1 by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;(is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof - &lt;br /&gt;
    have &amp;quot; hd (preOrden (N a1 a2 a3)) = hd (a1 # preOrden a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a1&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof - &lt;br /&gt;
    have &amp;quot; hd (preOrden (N a1 a2 a3)) = hd (a1 # preOrden a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a1&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=361</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=361"/>
		<updated>2013-12-24T00:42:43Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R7: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R7&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;preOrden (N x i d) = [x] @ (preOrden i) @ (preOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,d,c,f,h,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;postOrden (N x i d) = (postOrden i) @ (postOrden d) @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;inOrden (N x i d) = (inOrden i) @ [x] @ (inOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo (H x) = (H x)&amp;quot;&lt;br /&gt;
| &amp;quot;espejo (N x i d) = (N x (espejo d) (espejo i))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;preOrden (espejo (N a1 a2 a3)) = preOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = [a1] @ preOrden (espejo a3) @ preOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev [a1] @ rev (postOrden a3) @ rev (postOrden a2)&amp;quot; using HI1 HI2 by simp &lt;br /&gt;
    also have &amp;quot;… = rev ((postOrden a2) @ (postOrden a3) @ [a1])&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;postOrden (espejo (N a1 a2 a3)) = postOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = postOrden (espejo a3) @ postOrden (espejo a2) @ [a1]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (preOrden a3) @ rev (preOrden a2) @ rev [a1]&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev ([a1] @ preOrden a2 @ preOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis  by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;inOrden (espejo (N a1 a2 a3)) = inOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = inOrden (espejo a3) @ [a1] @ inOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a3) @ rev [a1] @ rev (inOrden a2)&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a2 @ [a1] @ inOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;raiz (N x i d) = x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;extremo_izquierda (N x i d) = extremo_izquierda i&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;extremo_derecha (N x i d) = extremo_derecha d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma inOrdenNN: &amp;quot;inOrden a ≠ []&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -  &lt;br /&gt;
    have &amp;quot;last (inOrden (N a1 a2 a3)) = last (a1 # inOrden a3)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = last (inOrden a3)&amp;quot;  by (simp add: inOrdenNN)&lt;br /&gt;
    also have &amp;quot;… = extremo_derecha a3&amp;quot; using HI2 by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
by (induct a) (auto simp add: inOrdenNN)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof - &lt;br /&gt;
    have &amp;quot;hd (inOrden (N a1 a2 a3)) = hd  (inOrden a2 @ a1 # inOrden a3)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = hd (inOrden a2)&amp;quot;  by (simp add: inOrdenNN)&lt;br /&gt;
    also have &amp;quot;… = extremo_izquierda a2&amp;quot; using HI1 by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;(is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof - &lt;br /&gt;
    have &amp;quot; hd (preOrden (N a1 a2 a3)) = hd (a1 # preOrden a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a1&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=360</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=360"/>
		<updated>2013-12-24T00:33:42Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R7: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R7&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;preOrden (N x i d) = [x] @ (preOrden i) @ (preOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,d,c,f,h,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;postOrden (N x i d) = (postOrden i) @ (postOrden d) @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;inOrden (N x i d) = (inOrden i) @ [x] @ (inOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo (H x) = (H x)&amp;quot;&lt;br /&gt;
| &amp;quot;espejo (N x i d) = (N x (espejo d) (espejo i))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;preOrden (espejo (N a1 a2 a3)) = preOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = [a1] @ preOrden (espejo a3) @ preOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev [a1] @ rev (postOrden a3) @ rev (postOrden a2)&amp;quot; using HI1 HI2 by simp &lt;br /&gt;
    also have &amp;quot;… = rev ((postOrden a2) @ (postOrden a3) @ [a1])&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;postOrden (espejo (N a1 a2 a3)) = postOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = postOrden (espejo a3) @ postOrden (espejo a2) @ [a1]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (preOrden a3) @ rev (preOrden a2) @ rev [a1]&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev ([a1] @ preOrden a2 @ preOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis  by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;inOrden (espejo (N a1 a2 a3)) = inOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = inOrden (espejo a3) @ [a1] @ inOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a3) @ rev [a1] @ rev (inOrden a2)&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a2 @ [a1] @ inOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;raiz (N x i d) = x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;extremo_izquierda (N x i d) = extremo_izquierda i&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;extremo_derecha (N x i d) = extremo_derecha d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma inOrdenNN: &amp;quot;inOrden a ≠ []&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -  &lt;br /&gt;
    have &amp;quot;last (inOrden (N a1 a2 a3)) = last (a1 # inOrden a3)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = last (inOrden a3)&amp;quot;  by (simp add: inOrdenNN)&lt;br /&gt;
    also have &amp;quot;… = extremo_derecha a3&amp;quot; using HI2 by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
by (induct a) (auto simp add: inOrdenNN)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof - &lt;br /&gt;
    have &amp;quot;hd (inOrden (N a1 a2 a3)) = hd  (inOrden a2 @ a1 # inOrden a3)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = hd (inOrden a2)&amp;quot;  by (simp add: inOrdenNN)&lt;br /&gt;
    also have &amp;quot;… = extremo_izquierda a2&amp;quot; using HI1 by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=359</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=359"/>
		<updated>2013-12-24T00:05:49Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R7: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R7&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;preOrden (N x i d) = [x] @ (preOrden i) @ (preOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,d,c,f,h,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;postOrden (N x i d) = (postOrden i) @ (postOrden d) @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;inOrden (N x i d) = (inOrden i) @ [x] @ (inOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo (H x) = (H x)&amp;quot;&lt;br /&gt;
| &amp;quot;espejo (N x i d) = (N x (espejo d) (espejo i))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;preOrden (espejo (N a1 a2 a3)) = preOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = [a1] @ preOrden (espejo a3) @ preOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev [a1] @ rev (postOrden a3) @ rev (postOrden a2)&amp;quot; using HI1 HI2 by simp &lt;br /&gt;
    also have &amp;quot;… = rev ((postOrden a2) @ (postOrden a3) @ [a1])&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;postOrden (espejo (N a1 a2 a3)) = postOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = postOrden (espejo a3) @ postOrden (espejo a2) @ [a1]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (preOrden a3) @ rev (preOrden a2) @ rev [a1]&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev ([a1] @ preOrden a2 @ preOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis  by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;inOrden (espejo (N a1 a2 a3)) = inOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = inOrden (espejo a3) @ [a1] @ inOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a3) @ rev [a1] @ rev (inOrden a2)&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a2 @ [a1] @ inOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;raiz (N x i d) = x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;extremo_izquierda (N x i d) = extremo_izquierda i&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;extremo_derecha (N x i d) = extremo_derecha d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma inOrdenNN: &amp;quot;inOrden a ≠ []&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -  &lt;br /&gt;
    have &amp;quot;last (inOrden (N a1 a2 a3)) = last (a1 # inOrden a3)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = last (inOrden a3)&amp;quot;  by (simp add: inOrdenNN)&lt;br /&gt;
    also have &amp;quot;… = extremo_derecha a3&amp;quot; using HI2 by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
by (induct a) (auto simp add: inOrdenNN)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof - &lt;br /&gt;
  thm hd.simps&lt;br /&gt;
    have &amp;quot;hd (inOrden (N a1 a2 a3)) = hd  (inOrden a2 @ a1 # inOrden a3)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = hd (inOrden a2)&amp;quot;  by (simp add: inOrdenNN)&lt;br /&gt;
    also have &amp;quot;… = extremo_izquierda a2&amp;quot; using HI1 by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=358</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=358"/>
		<updated>2013-12-23T23:55:16Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R7: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R7&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;preOrden (N x i d) = [x] @ (preOrden i) @ (preOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,d,c,f,h,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;postOrden (N x i d) = (postOrden i) @ (postOrden d) @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;inOrden (N x i d) = (inOrden i) @ [x] @ (inOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo (H x) = (H x)&amp;quot;&lt;br /&gt;
| &amp;quot;espejo (N x i d) = (N x (espejo d) (espejo i))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;preOrden (espejo (N a1 a2 a3)) = preOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = [a1] @ preOrden (espejo a3) @ preOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev [a1] @ rev (postOrden a3) @ rev (postOrden a2)&amp;quot; using HI1 HI2 by simp &lt;br /&gt;
    also have &amp;quot;… = rev ((postOrden a2) @ (postOrden a3) @ [a1])&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;postOrden (espejo (N a1 a2 a3)) = postOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = postOrden (espejo a3) @ postOrden (espejo a2) @ [a1]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (preOrden a3) @ rev (preOrden a2) @ rev [a1]&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev ([a1] @ preOrden a2 @ preOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis  by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;inOrden (espejo (N a1 a2 a3)) = inOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = inOrden (espejo a3) @ [a1] @ inOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a3) @ rev [a1] @ rev (inOrden a2)&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a2 @ [a1] @ inOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;raiz (N x i d) = x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;extremo_izquierda (N x i d) = extremo_izquierda i&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;extremo_derecha (N x i d) = extremo_derecha d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma inOrdenNN: &amp;quot;inOrden a ≠ []&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -  &lt;br /&gt;
    have &amp;quot;last (inOrden (N a1 a2 a3)) = last (a1 # inOrden a3)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = last (inOrden a3)&amp;quot;  by (simp add: inOrdenNN)&lt;br /&gt;
    also have &amp;quot;… = extremo_derecha a3&amp;quot; using HI2 by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=357</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=357"/>
		<updated>2013-12-21T21:06:39Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R7: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R7&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;preOrden (N x i d) = [x] @ (preOrden i) @ (preOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,d,c,f,h,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;postOrden (N x i d) = (postOrden i) @ (postOrden d) @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;inOrden (N x i d) = (inOrden i) @ [x] @ (inOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo (H x) = (H x)&amp;quot;&lt;br /&gt;
| &amp;quot;espejo (N x i d) = (N x (espejo d) (espejo i))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;preOrden (espejo (N a1 a2 a3)) = preOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = [a1] @ preOrden (espejo a3) @ preOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev [a1] @ rev (postOrden a3) @ rev (postOrden a2)&amp;quot; using HI1 HI2 by simp &lt;br /&gt;
    also have &amp;quot;… = rev ((postOrden a2) @ (postOrden a3) @ [a1])&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;postOrden (espejo (N a1 a2 a3)) = postOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = postOrden (espejo a3) @ postOrden (espejo a2) @ [a1]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (preOrden a3) @ rev (preOrden a2) @ rev [a1]&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev ([a1] @ preOrden a2 @ preOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis  by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;inOrden (espejo (N a1 a2 a3)) = inOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = inOrden (espejo a3) @ [a1] @ inOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a3) @ rev [a1] @ rev (inOrden a2)&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a2 @ [a1] @ inOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;raiz (N x i d) = x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;extremo_izquierda (N x i d) = extremo_izquierda i&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;extremo_derecha (N x i d) = extremo_derecha d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=356</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=356"/>
		<updated>2013-12-21T21:05:10Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R7: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R7&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;preOrden (N x i d) = [x] @ (preOrden i) @ (preOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,d,c,f,h,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;postOrden (N x i d) = (postOrden i) @ (postOrden d) @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;inOrden (N x i d) = (inOrden i) @ [x] @ (inOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo (H x) = (H x)&amp;quot;&lt;br /&gt;
| &amp;quot;espejo (N x i d) = (N x (espejo d) (espejo i))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;preOrden (espejo (N a1 a2 a3)) = preOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = [a1] @ preOrden (espejo a3) @ preOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev [a1] @ rev (postOrden a3) @ rev (postOrden a2)&amp;quot; using HI1 HI2 by simp &lt;br /&gt;
    also have &amp;quot;… = rev ((postOrden a2) @ (postOrden a3) @ [a1])&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;postOrden (espejo (N a1 a2 a3)) = postOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = postOrden (espejo a3) @ postOrden (espejo a2) @ [a1]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (preOrden a3) @ rev (preOrden a2) @ rev [a1]&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev ([a1] @ preOrden a2 @ preOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis  by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;inOrden (espejo (N a1 a2 a3)) = inOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = inOrden (espejo a3) @ [a1] @ inOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a3) @ rev [a1] @ rev (inOrden a2)&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a2 @ [a1] @ inOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;raiz (N x i d) = x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;extremo_izquierda (N x i d) = extremo_izquierda i&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=355</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=355"/>
		<updated>2013-12-21T21:02:30Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R7: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R7&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;preOrden (N x i d) = [x] @ (preOrden i) @ (preOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,d,c,f,h,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;postOrden (N x i d) = (postOrden i) @ (postOrden d) @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;inOrden (N x i d) = (inOrden i) @ [x] @ (inOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo (H x) = (H x)&amp;quot;&lt;br /&gt;
| &amp;quot;espejo (N x i d) = (N x (espejo d) (espejo i))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;preOrden (espejo (N a1 a2 a3)) = preOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = [a1] @ preOrden (espejo a3) @ preOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev [a1] @ rev (postOrden a3) @ rev (postOrden a2)&amp;quot; using HI1 HI2 by simp &lt;br /&gt;
    also have &amp;quot;… = rev ((postOrden a2) @ (postOrden a3) @ [a1])&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;postOrden (espejo (N a1 a2 a3)) = postOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = postOrden (espejo a3) @ postOrden (espejo a2) @ [a1]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (preOrden a3) @ rev (preOrden a2) @ rev [a1]&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev ([a1] @ preOrden a2 @ preOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis  by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;inOrden (espejo (N a1 a2 a3)) = inOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = inOrden (espejo a3) @ [a1] @ inOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a3) @ rev [a1] @ rev (inOrden a2)&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a2 @ [a1] @ inOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;raiz (N x i d) = x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=354</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=354"/>
		<updated>2013-12-21T21:02:07Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R7: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R7&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;preOrden (N x i d) = [x] @ (preOrden i) @ (preOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,d,c,f,h,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;postOrden (N x i d) = (postOrden i) @ (postOrden d) @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;inOrden (N x i d) = (inOrden i) @ [x] @ (inOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo (H x) = (H x)&amp;quot;&lt;br /&gt;
| &amp;quot;espejo (N x i d) = (N x (espejo d) (espejo i))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;preOrden (espejo (N a1 a2 a3)) = preOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = [a1] @ preOrden (espejo a3) @ preOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev [a1] @ rev (postOrden a3) @ rev (postOrden a2)&amp;quot; using HI1 HI2 by simp &lt;br /&gt;
    also have &amp;quot;… = rev ((postOrden a2) @ (postOrden a3) @ [a1])&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;postOrden (espejo (N a1 a2 a3)) = postOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = postOrden (espejo a3) @ postOrden (espejo a2) @ [a1]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (preOrden a3) @ rev (preOrden a2) @ rev [a1]&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev ([a1] @ preOrden a2 @ preOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis  by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;inOrden (espejo (N a1 a2 a3)) = inOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = inOrden (espejo a3) @ [a1] @ inOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a3) @ rev [a1] @ rev (inOrden a2)&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a2 @ [a1] @ inOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz (H x) = x&amp;quot;&lt;br /&gt;
| &amp;quot;raiz (N x i d) = x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=353</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=353"/>
		<updated>2013-12-21T20:56:01Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R7: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R7&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;preOrden (N x i d) = [x] @ (preOrden i) @ (preOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,d,c,f,h,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;postOrden (N x i d) = (postOrden i) @ (postOrden d) @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;inOrden (N x i d) = (inOrden i) @ [x] @ (inOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo (H x) = (H x)&amp;quot;&lt;br /&gt;
| &amp;quot;espejo (N x i d) = (N x (espejo d) (espejo i))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;preOrden (espejo (N a1 a2 a3)) = preOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = [a1] @ preOrden (espejo a3) @ preOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev [a1] @ rev (postOrden a3) @ rev (postOrden a2)&amp;quot; using HI1 HI2 by simp &lt;br /&gt;
    also have &amp;quot;… = rev ((postOrden a2) @ (postOrden a3) @ [a1])&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;postOrden (espejo (N a1 a2 a3)) = postOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = postOrden (espejo a3) @ postOrden (espejo a2) @ [a1]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (preOrden a3) @ rev (preOrden a2) @ rev [a1]&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev ([a1] @ preOrden a2 @ preOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis  by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;inOrden (espejo (N a1 a2 a3)) = inOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = inOrden (espejo a3) @ [a1] @ inOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a3) @ rev [a1] @ rev (inOrden a2)&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a2 @ [a1] @ inOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=352</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=352"/>
		<updated>2013-12-21T20:33:21Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R7: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R7&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;preOrden (N x i d) = [x] @ (preOrden i) @ (preOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,d,c,f,h,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;postOrden (N x i d) = (postOrden i) @ (postOrden d) @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;inOrden (N x i d) = (inOrden i) @ [x] @ (inOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo (H x) = (H x)&amp;quot;&lt;br /&gt;
| &amp;quot;espejo (N x i d) = (N x (espejo d) (espejo i))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;preOrden (espejo (N a1 a2 a3)) = preOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = [a1] @ preOrden (espejo a3) @ preOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev [a1] @ rev (postOrden a3) @ rev (postOrden a2)&amp;quot; using HI1 HI2 by simp &lt;br /&gt;
    also have &amp;quot;… = rev ((postOrden a2) @ (postOrden a3) @ [a1])&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;postOrden (espejo (N a1 a2 a3)) = postOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = postOrden (espejo a3) @ postOrden (espejo a2) @ [a1]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (preOrden a3) @ rev (preOrden a2) @ rev [a1]&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev ([a1] @ preOrden a2 @ preOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis  by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=351</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=351"/>
		<updated>2013-12-21T20:28:53Z</updated>

		<summary type="html">&lt;p&gt;Diecabmen1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R7: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R7&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;preOrden (N x i d) = [x] @ (preOrden i) @ (preOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,d,c,f,h,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;postOrden (N x i d) = (postOrden i) @ (postOrden d) @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden (H x) = [x]&amp;quot;&lt;br /&gt;
| &amp;quot;inOrden (N x i d) = (inOrden i) @ [x] @ (inOrden d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo (H x) = (H x)&amp;quot;&lt;br /&gt;
| &amp;quot;espejo (N x i d) = (N x (espejo d) (espejo i))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;preOrden (espejo (N a1 a2 a3)) = preOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = [a1] @ preOrden (espejo a3) @ preOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev [a1] @ rev (postOrden a3) @ rev (postOrden a2)&amp;quot; using HI1 HI2 by simp &lt;br /&gt;
    also have &amp;quot;… = rev ((postOrden a2) @ (postOrden a3) @ [a1])&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    thm postOrden.simps&lt;br /&gt;
    thm preOrden.simps&lt;br /&gt;
    have &amp;quot;postOrden (espejo (N a1 a2 a3)) = postOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = postOrden (espejo a3) @ postOrden (espejo a2) @ [a1]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (preOrden a3) @ rev (preOrden a2) @ rev [a1]&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev ([a1] @ preOrden a2 @ preOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis  by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diecabmen1</name></author>
		
	</entry>
</feed>