<?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=Zoiruicha</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=Zoiruicha"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php/Especial:Contribuciones/Zoiruicha"/>
	<updated>2026-07-19T19:09:14Z</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=648</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=648"/>
		<updated>2014-03-10T01:14:56Z</updated>

		<summary type="html">&lt;p&gt;Zoiruicha: &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 irealetei pabflomar jaisalmen zoiruicha maresccas4 marescpla&amp;quot;&lt;br /&gt;
-- &amp;quot;jaisalmen: http://es.wikipedia.org/wiki/Disyunci%C3%B3n_exclusiva&amp;quot;&lt;br /&gt;
-- &amp;quot;jaisalmen: de la definicion de xor: p xor q  =  (   p∧¬  q) or (¬ p ∧ q)&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 irealetei maresccas4 marescpla jaisalmen zoiruicha&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 irealetei maresccas4 marescpla jaisalmen zoiruicha&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 irealetei maresccas4 marescpla&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; --&amp;quot;Aquí he quitado algún paréntesis, pero la solución es, en esencia, la misma.&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;
--&amp;quot;diecabmen1 irealetei&amp;quot;&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;
--&amp;quot;irealetei maresccas4 marescpla&amp;quot;&lt;br /&gt;
lemma correccion_valorM_detalle:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot;&lt;br /&gt;
proof (induct m)&lt;br /&gt;
  show &amp;quot;valorM i [] = valorF i (formM [])&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
  fix a m&lt;br /&gt;
  assume HI:&amp;quot;valorM i m = valorF i (formM m)&amp;quot;&lt;br /&gt;
  have &amp;quot;valorM i (a # m) = (valorF i (Var a) ∧ valorM i m)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (valorF i (Var a) ∧ valorF i (formM m))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = valorF i (formM (a # m))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;valorM i (a # m) = valorF i (formM (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 irealetei maresccas4 marescpla&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 irealetei&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;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma correccion_valorP_detalle:&lt;br /&gt;
  &amp;quot;valorP i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
proof (induct p)&lt;br /&gt;
  show &amp;quot;valorP i [] = valorF i (formP [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a p&lt;br /&gt;
  assume HI:&amp;quot;valorP i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
  have &amp;quot;valorP i (a # p) =  xor (valorM i a) (valorP i p)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorF i (formM a)) (valorP i p) &amp;quot; by (simp add:correccion_valorM)&lt;br /&gt;
  also have &amp;quot;... = xor (valorF i (formM a)) (valorF i (formP p))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = valorF i (formP (a # p))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot; valorP i (a # p) = valorF i (formP (a # p))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
fun valorP4 :: &amp;quot;(nat ⇒ bool) ⇒ nat list list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorP4 i [] = False&amp;quot;&lt;br /&gt;
| &amp;quot;valorP4 i (x#xs) = xor (valorM i x) (valorP4 i xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;valorP4 (int1(1:=True,3:=True)) [[0,2,1],[1,3]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorP4:&lt;br /&gt;
  &amp;quot;valorP4 i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
proof (induct p)&lt;br /&gt;
  show &amp;quot;valorP4 i [] = valorF i (formP [])&amp;quot; by (simp add:xor_def)&lt;br /&gt;
next&lt;br /&gt;
  fix x xs&lt;br /&gt;
  assume HI: &amp;quot;valorP4 i xs = valorF i (formP xs)&amp;quot;&lt;br /&gt;
  have &amp;quot;valorP4 i (x#xs) = xor (valorM i x) (valorP4 i xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorM i x) (valorF i (formP xs))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = valorF i (Xor (formM x) (formP xs))&amp;quot; by (simp add: correccion_valorM)&lt;br /&gt;
  also have &amp;quot;... = valorF i (formP (x#xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;valorP4 i (x#xs) = valorF i (formP (x#xs))&amp;quot; by simp&lt;br /&gt;
qed&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;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4&amp;quot;&lt;br /&gt;
fun productoM2 :: &amp;quot;nat list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;productoM2 m [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;productoM2 m (a#ns) = (m@a)#(productoM2 m ns)&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;
--&amp;quot;irealetei maresccas4&amp;quot;&lt;br /&gt;
lemma valorM_conc_auto: &lt;br /&gt;
  &amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma valorM_conc_detalle:&lt;br /&gt;
  &amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;valorM i ([] @ ys) = (valorM i [] ∧ valorM i ys)&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
  fix a xs &lt;br /&gt;
  assume HI:&amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;&lt;br /&gt;
  have &amp;quot;valorM i ((a # xs) @ ys) = (valorF i (Var a) ∧ valorM i (xs @ ys))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (valorF i (Var a) ∧ (valorM i xs ∧ valorM i ys))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (valorM i (a # xs) ∧ valorM i ys)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;valorM i ((a # xs) @ ys) = (valorM i (a # xs) ∧ valorM i 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;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma xor_compl: &amp;quot;xor (a ∧ p) (a ∧ q) = (a ∧ (xor p q))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;xor (a ∧ p) (a ∧ q) = (((a ∧ p) ∧ ¬(a ∧ q)) ∨ (¬(a ∧ p) ∧ (a ∧ q)))&amp;quot; by (simp add:xor_def)&lt;br /&gt;
  also have &amp;quot;... = (a ∧ ((p ∧ ¬q) ∨ (¬p ∧ q)))&amp;quot; by auto&lt;br /&gt;
  also have &amp;quot;... = (a ∧ (xor p q))&amp;quot; by (simp add:xor_def)&lt;br /&gt;
  finally show &amp;quot;xor (a ∧ p) (a ∧ q) = (a ∧ (xor p q))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;No me hacía falta definir el xor_neg, anterior, que es como matar moscas a cañonazos&amp;quot;&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;
proof (induct p)&lt;br /&gt;
  have &amp;quot;valorP i (productoM m []) = valorP i []&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (valorM i m ∧ valorP i [])&amp;quot; by (simp add:xor_def)&lt;br /&gt;
  then show &amp;quot;valorP i (productoM m []) = (valorM i m ∧ valorP i [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a p&lt;br /&gt;
  assume HI:&amp;quot;valorP i (productoM m p) = (valorM i m ∧ valorP i p)&amp;quot;&lt;br /&gt;
  have &amp;quot;valorP i (productoM m (a # p)) = valorP i ((m@a)#(productoM m p))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorM i (m@a)) (valorP i (productoM m p))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorM i (m@a)) (valorM i m ∧ valorP i p)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorM i m ∧ valorM i a) (valorM i m ∧ valorP i p)&amp;quot; by (simp add:valorM_conc)&lt;br /&gt;
  also have &amp;quot;... = (valorM i m ∧ xor (valorM i a) (valorP i p))&amp;quot; by (simp add:xor_compl)&lt;br /&gt;
  also have &amp;quot;... = (valorM i m ∧ valorP i (a # p))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;valorP i (productoM m (a # p)) = (valorM i m ∧ valorP i (a # p))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
lemma correccion_productoM_auto: &lt;br /&gt;
  &amp;quot;valorP i (productoM m p) = (valorM i m ∧ valorP i p)&amp;quot;&lt;br /&gt;
by (induct p) (auto simp add:xor_def valorM_conc xor_compl)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma lema1: &amp;quot;xor (a ∧ b) (a ∧ c) = (a ∧ (xor b c))&amp;quot;&lt;br /&gt;
proof (cases a)&lt;br /&gt;
  assume H: &amp;quot;a&amp;quot;&lt;br /&gt;
  then show &amp;quot;xor (a ∧ b) (a ∧ c) = (a ∧ (xor b c))&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  assume H: &amp;quot;¬a&amp;quot;&lt;br /&gt;
  then show &amp;quot;xor (a ∧ b) (a ∧ c) = (a ∧ (xor b c))&amp;quot; by (simp add: xor_def)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma correccion_productoM: &lt;br /&gt;
  &amp;quot;valorP4 i (productoM m p) = (valorM i m ∧ valorP4 i p)&amp;quot;&lt;br /&gt;
proof (induct p)&lt;br /&gt;
  show &amp;quot;valorP4 i (productoM m []) = (valorM i m ∧ valorP4 i [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix p px&lt;br /&gt;
  assume HI: &amp;quot;valorP4 i (productoM m px) = (valorM i m ∧ valorP4 i px)&amp;quot;&lt;br /&gt;
  have &amp;quot;valorP4 i (productoM m (p#px)) = valorP4 i ((m@p) # productoM m px)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorF i (formM (m@p))) (valorP4 i (productoM m px))&amp;quot; by (simp add: correccion_valorM)&lt;br /&gt;
  also have &amp;quot;... = xor (valorF i (formM (m@p))) (valorM i m ∧ valorP4 i px)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorM i (m @ p)) (valorM i m ∧ valorP4 i px)&amp;quot; by (simp add: correccion_valorM)&lt;br /&gt;
  also have &amp;quot;... = xor (valorM i m ∧ valorM i p) (valorM i m ∧ valorP4 i px)&amp;quot; by (simp add: valorM_conc)&lt;br /&gt;
  also have &amp;quot;... = (valorM i m ∧ (xor (valorM i p) (valorP4 i px)))&amp;quot; by (simp add: lema1)&lt;br /&gt;
  also have &amp;quot;... = (valorM i m ∧ valorP4 i (p#px))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;valorP4 i (productoM m (p#px)) = (valorM i m ∧ valorP4 i (p#px))&amp;quot; by simp&lt;br /&gt;
qed&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;
--&amp;quot;irealetei: tenía una de más que no valía para nada, se me queda igual que maresccas4&amp;quot;&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 [] q = []&amp;quot;&lt;br /&gt;
| &amp;quot;producto (a1 # p) (q) = (productoM a1 q)@(producto p q)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;producto [[1,3],[2]] [[1,2,4],[7],[4,1]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
fun producto4 :: &amp;quot;nat list list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;producto [] q = []&amp;quot;&lt;br /&gt;
| &amp;quot;producto (m#p) q = (productoM m q) @ (producto p q)&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;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Si me da tiempo, intentaré probar este lema. Irealetei: lo estoy intentando pero me he quedado en: &amp;#039;((a ∧ (¬b ∨ c) ∧ (b∨¬c))  ∨ (¬a ∧ ((b∧¬c) ∨ (¬b∧c ))))&amp;#039; y me va a petar el cerebro...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma lema2: &amp;quot;xor a (xor b c) = xor (xor a b) c&amp;quot;&lt;br /&gt;
by (auto simp add: xor_def)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Me ha dado tiempo. De forma análoga al lema1&amp;quot;&lt;br /&gt;
lemma lema2_simp: &amp;quot;xor a (xor b c) = xor (xor a b) c&amp;quot;&lt;br /&gt;
proof (cases a)&lt;br /&gt;
  assume &amp;quot;a&amp;quot;&lt;br /&gt;
  show &amp;quot;xor a (xor b c) = xor (xor a b) c&amp;quot;&lt;br /&gt;
  proof (cases b)&lt;br /&gt;
    assume &amp;quot;b&amp;quot;&lt;br /&gt;
    then show &amp;quot;xor a (xor b c) = xor (xor a b) c&amp;quot; using `a` by (simp add: xor_def)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬b&amp;quot;&lt;br /&gt;
    then show &amp;quot;xor a (xor b c) = xor (xor a b) c&amp;quot; by (simp add: xor_def)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;¬a&amp;quot;&lt;br /&gt;
  show &amp;quot;xor a (xor b c) = xor (xor a b) c&amp;quot;&lt;br /&gt;
  proof (cases b)&lt;br /&gt;
    assume &amp;quot;b&amp;quot;&lt;br /&gt;
    then show &amp;quot;xor a (xor b c) = xor (xor a b) c&amp;quot; using `¬a`by (simp add: xor_def)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬b&amp;quot;&lt;br /&gt;
    then show &amp;quot;xor a (xor b c) = xor (xor a b) c&amp;quot; by (simp add: xor_def)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma valorP_conc: &lt;br /&gt;
  &amp;quot;valorP4 i (xs @ ys) = (xor (valorP4 i xs) (valorP4 i ys))&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;valorP4 i ([] @ ys) = (xor (valorP4 i []) (valorP4 i ys))&amp;quot; by (simp add: xor_def)&lt;br /&gt;
next&lt;br /&gt;
  fix x xs&lt;br /&gt;
  assume HI: &amp;quot;valorP4 i (xs @ ys) = (xor (valorP4 i xs) (valorP4 i ys))&amp;quot;&lt;br /&gt;
  have &amp;quot;valorP4 i ((x#xs) @ ys) = valorP4 i (x # (xs@ys))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorM i x) (valorP4 i (xs@ys))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorM i x) (xor (valorP4 i xs) (valorP4 i ys))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = xor (xor (valorM i x) (valorP4 i xs)) (valorP4 i ys)&amp;quot; by (simp add: lema2)&lt;br /&gt;
  also have &amp;quot;... = xor (valorP4 i (x#xs)) (valorP4 i ys)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;valorP4 i ((x#xs) @ ys) = (xor (valorP4 i (x#xs)) (valorP4 i ys))&amp;quot; by simp&lt;br /&gt;
qed&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;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Es fácil ver que este lema es análogo al demostrado lema1&amp;quot;&lt;br /&gt;
lemma lema3: &amp;quot;xor (a ∧ c) (b ∧ c) = ((xor a b) ∧ c)&amp;quot;&lt;br /&gt;
by (auto simp add: xor_def)&lt;br /&gt;
&lt;br /&gt;
lemma correccion_producto: &lt;br /&gt;
  &amp;quot;valorP4 i (producto4 p q) = (valorP4 i p ∧ valorP4 i q)&amp;quot;&lt;br /&gt;
proof (induct p)&lt;br /&gt;
  show &amp;quot;valorP4 i (producto4 [] q) = (valorP4 i [] ∧ valorP4 i q)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix m p&lt;br /&gt;
  assume HI: &amp;quot;valorP4 i (producto4 p q) = (valorP4 i p ∧ valorP4 i q)&amp;quot;&lt;br /&gt;
  have &amp;quot;valorP4 i (producto4 (m#p) q) = valorP4 i ((productoM m q) @ (producto4 p q))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (xor (valorP4 i (productoM m q)) (valorP4 i (producto4 p q)))&amp;quot; by (simp add: valorP_conc)&lt;br /&gt;
  also have &amp;quot;... = (xor (valorP4 i (productoM m q)) (valorP4 i p ∧ valorP4 i q))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (xor (valorM i m ∧ valorP4 i q) (valorP4 i p ∧ valorP4 i q))&amp;quot; by (simp add: correccion_productoM)&lt;br /&gt;
  also have &amp;quot;... = ((xor (valorM i m) (valorP4 i p)) ∧ valorP4 i q)&amp;quot; by (simp add: lema3)&lt;br /&gt;
  also have &amp;quot;... = (valorP4 i (m#p) ∧ valorP4 i q)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;valorP4 i (producto4 (m#p) q) = (valorP4 i (m#p) ∧ valorP4 i q)&amp;quot; by simp&lt;br /&gt;
qed&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;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun polinomio :: &amp;quot;form ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;polinomio T = [[]]&amp;quot;&lt;br /&gt;
| &amp;quot;polinomio (Var a) = [[a]]&amp;quot;&lt;br /&gt;
| &amp;quot;polinomio (And G H) = producto4 (polinomio G) (polinomio H)&amp;quot;&lt;br /&gt;
| &amp;quot;polinomio (Xor G H) = (polinomio G) @ (polinomio H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;polinomio (Xor (Var 1) (Var 2))&amp;quot;&lt;br /&gt;
value &amp;quot;polinomio (And (Var 1) (Var 2))&amp;quot;&lt;br /&gt;
value &amp;quot;polinomio (Xor (Var 1) T)&amp;quot;&lt;br /&gt;
value &amp;quot;polinomio (And (Var 1) T)&amp;quot;&lt;br /&gt;
value &amp;quot;polinomio (And (Xor (Var 1) (Var 2)) (Var 3))&amp;quot;&lt;br /&gt;
value &amp;quot;polinomio (Xor (And (Var 1) (Var 2)) (Var 3))&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;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
theorem correccion_polinomio: &lt;br /&gt;
  &amp;quot;valorF i f = valorP4 i (polinomio f)&amp;quot;&lt;br /&gt;
proof (induct f)&lt;br /&gt;
  show &amp;quot;valorF i T = valorP4 i (polinomio T)&amp;quot; by (simp add: xor_def)&lt;br /&gt;
next&lt;br /&gt;
  fix a&lt;br /&gt;
  show &amp;quot;valorF i (Var a) = valorP4 i (polinomio (Var a))&amp;quot; by (simp add: xor_def)&lt;br /&gt;
next&lt;br /&gt;
  fix G H&lt;br /&gt;
  assume H1: &amp;quot;valorF i G = valorP4 i (polinomio G)&amp;quot;&lt;br /&gt;
  assume H2: &amp;quot;valorF i H = valorP4 i (polinomio H)&amp;quot;&lt;br /&gt;
  have &amp;quot;valorF i (And G H) = (valorF i G ∧ valorF i H)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = ((valorP4 i (polinomio G)) ∧ (valorP4 i (polinomio H)))&amp;quot; using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = valorP4 i (producto4 (polinomio G) (polinomio H))&amp;quot; by (simp add: correccion_producto)&lt;br /&gt;
  also have &amp;quot;... = valorP4 i (polinomio (And G H))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;valorF i (And G H) = valorP4 i (polinomio (And G H))&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix G H&lt;br /&gt;
  assume H1: &amp;quot;valorF i G = valorP4 i (polinomio G)&amp;quot;&lt;br /&gt;
  assume H2: &amp;quot;valorF i H = valorP4 i (polinomio H)&amp;quot;&lt;br /&gt;
  have &amp;quot;valorF i (Xor G H) = xor (valorF i G) (valorF i H)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorP4 i (polinomio G)) (valorP4 i (polinomio H))&amp;quot; using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = valorP4 i ((polinomio G) @ (polinomio H))&amp;quot; by (simp add: valorP_conc)&lt;br /&gt;
  also have &amp;quot;... = valorP4 i (polinomio (Xor G H))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;valorF i (Xor G H) = valorP4 i (polinomio (Xor G H))&amp;quot; by simp&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>Zoiruicha</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=647</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=647"/>
		<updated>2014-03-10T01:06:06Z</updated>

		<summary type="html">&lt;p&gt;Zoiruicha: &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, jaisalmen, zoiruicha&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 domlloriv&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;
--&amp;quot;juaruipav, julrobrel&amp;quot;&lt;br /&gt;
 lemma ej1_juaruipav:&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&lt;br /&gt;
  assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
  then show &amp;quot;p&amp;quot; .&lt;br /&gt;
 next&lt;br /&gt;
  assume 4:&amp;quot;q&amp;quot;&lt;br /&gt;
  show &amp;quot;p&amp;quot; using 2 4 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei, julrobrel&amp;quot;&lt;br /&gt;
lemma ej1_auto:&lt;br /&gt;
  assumes 1:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  assumes 2:&amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej1:&lt;br /&gt;
  assumes 1:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  assumes 2:&amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
  note 1&lt;br /&gt;
  moreover&lt;br /&gt;
  {assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p&amp;quot; .}&lt;br /&gt;
  moreover&lt;br /&gt;
  {assume 3:&amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using 2 3 ..}&lt;br /&gt;
 ultimately 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,jaisalmen, zoiruicha&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 domlloriv&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;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej2_juaruipav:&lt;br /&gt;
 assumes 1:&amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
 shows &amp;quot;¬(¬p ∨ ¬q)&amp;quot;  &lt;br /&gt;
 proof &lt;br /&gt;
  assume 2: &amp;quot;¬ p ∨ ¬ q&amp;quot;&lt;br /&gt;
  show &amp;quot;False&amp;quot;&lt;br /&gt;
  using 2&lt;br /&gt;
  proof&lt;br /&gt;
    assume 3: &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have 4:&amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    show &amp;quot;False&amp;quot; using 3 4 by (rule notE) &lt;br /&gt;
 next&lt;br /&gt;
    assume 5: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
    show &amp;quot;False&amp;quot; using 5 6 by (rule notE) &lt;br /&gt;
   qed&lt;br /&gt;
 qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei, julrobrel&amp;quot;&lt;br /&gt;
lemma ej2_auto:&lt;br /&gt;
  assumes 1:&amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  shows  &amp;quot;¬(¬p ∨ ¬q)&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&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;
  moreover&lt;br /&gt;
  {assume 2:&amp;quot;¬p&amp;quot; &lt;br /&gt;
    have 3:&amp;quot;p&amp;quot; using 1 ..&lt;br /&gt;
    have &amp;quot;False&amp;quot; using 2 3 ..}&lt;br /&gt;
  moreover&lt;br /&gt;
  {assume 2:&amp;quot;¬q&amp;quot; &lt;br /&gt;
    have 3:&amp;quot;q&amp;quot; using 1 ..&lt;br /&gt;
    have &amp;quot;False&amp;quot; using 2 3 ..}&lt;br /&gt;
ultimately show &amp;quot;False&amp;quot; ..&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) ⊢ ¬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 pabflomar domlloriv&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;
&lt;br /&gt;
--&amp;quot;marescpla,jaisalmen, zoiruicha&amp;quot;&lt;br /&gt;
  lemma 03:&lt;br /&gt;
      assumes 1:&amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
      shows &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  proof&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;
      then have &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
      then have &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
      with 1 show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
    qed &lt;br /&gt;
  show &amp;quot;¬q&amp;quot;&lt;br /&gt;
    proof (rule ccontr)&lt;br /&gt;
    {assume &amp;quot;¬¬q&amp;quot;&lt;br /&gt;
      then have &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
      then have &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
      with 1 show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej3_juaruipav:&lt;br /&gt;
 assumes 1: &amp;quot; ¬(p ∨ q)&amp;quot;&lt;br /&gt;
 shows &amp;quot; ¬p ∧ ¬q&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 4: &amp;quot;False&amp;quot; using 1 3 by (rule notE)}&lt;br /&gt;
  then show &amp;quot;¬p&amp;quot;  ..&lt;br /&gt;
next&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;False&amp;quot; using 1 6 by (rule notE)}&lt;br /&gt;
  then show &amp;quot;¬q&amp;quot;  ..&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei, julrobrel&amp;quot;&lt;br /&gt;
lemma ej3_auto:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej3:&lt;br /&gt;
  assumes 0:&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 2:&amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    have &amp;quot;False&amp;quot; using 0 2 ..}&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;
    then have 2:&amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    have &amp;quot;False&amp;quot; using 0 2 ..}&lt;br /&gt;
  then show &amp;quot;¬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 domlloriv,jaisalmen, zoiruicha&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;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
  lemma 04:&lt;br /&gt;
      assumes 1:&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;
      have 2: &amp;quot;¬p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
      have 3: &amp;quot;¬q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
      assume &amp;quot;¬¬(p ∨ q)&amp;quot;&lt;br /&gt;
       then have 4:&amp;quot;(p ∨ q)&amp;quot; by (rule notnotD)&lt;br /&gt;
       then show False&lt;br /&gt;
         proof (rule disjE)&lt;br /&gt;
           note 4&lt;br /&gt;
           {assume &amp;quot;p&amp;quot;&lt;br /&gt;
             with 2 show False ..}&lt;br /&gt;
           {assume &amp;quot;q&amp;quot;&lt;br /&gt;
             with 3 show False ..}&lt;br /&gt;
         qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej4_pfm:&lt;br /&gt;
  assumes 0:&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 &lt;br /&gt;
    assume 1:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬p&amp;quot; using 0 by (rule conjunct1)&lt;br /&gt;
    then show False using `p` ..&lt;br /&gt;
    next&lt;br /&gt;
    assume 1:&amp;quot;q&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬q&amp;quot; using 0 by (rule conjunct2)&lt;br /&gt;
    then show False using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav, julrobrel&amp;quot;&lt;br /&gt;
lemma ej4_juaruipav:&lt;br /&gt;
assumes 1:&amp;quot; ¬p ∧ ¬q&amp;quot;&lt;br /&gt;
shows &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 2: &amp;quot; p ∨ q&amp;quot;&lt;br /&gt;
  show &amp;quot;False&amp;quot;&lt;br /&gt;
  using 2&lt;br /&gt;
  proof&lt;br /&gt;
     assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
     have 4:&amp;quot;¬p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
     show &amp;quot;False&amp;quot; using 4 3 by (rule notE) &lt;br /&gt;
  next &lt;br /&gt;
     assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
     have 6:&amp;quot;¬q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
     show &amp;quot;False&amp;quot; using 6 5 by (rule notE)&lt;br /&gt;
   qed&lt;br /&gt;
qed&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&amp;quot;&lt;br /&gt;
  shows  &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej4:&lt;br /&gt;
  assumes 0:&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;
  moreover&lt;br /&gt;
  {assume 1:&amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬p&amp;quot; using 0 ..&lt;br /&gt;
    then have  &amp;quot;False&amp;quot; using 1 ..}&lt;br /&gt;
  moreover&lt;br /&gt;
  {assume 1:&amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q&amp;quot; using 0 ..&lt;br /&gt;
    then have  &amp;quot;False&amp;quot; using 1 ..}&lt;br /&gt;
ultimately show &amp;quot;False&amp;quot; ..&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 domlloriv, julrobrel,jaisalmen, zoiruicha&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;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 05:&lt;br /&gt;
      assumes 1:&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 4:&amp;quot;(p ∧ q)&amp;quot; by (rule notnotD)&lt;br /&gt;
       have p using 4 by (rule conjunct1)&lt;br /&gt;
       have q using 4 by (rule conjunct2)&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;
            then show False using `p` ..}&lt;br /&gt;
          {assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
            then show False using `q`..}&lt;br /&gt;
       qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
lemma ej5_pfm:&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` by (rule conjunct1)&lt;br /&gt;
    with `¬p` show False by (rule notE)&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` by (rule conjunct2)&lt;br /&gt;
    with `¬q` show False by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej5_juaruipav:&lt;br /&gt;
 assumes 1:&amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
 shows &amp;quot; ¬(p ∧ q)&amp;quot;&lt;br /&gt;
 using 1&lt;br /&gt;
 proof &lt;br /&gt;
    assume 2: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    show &amp;quot;¬ (p ∧ q)&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume 3: &amp;quot; p ∧ q&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;p&amp;quot; using 3 by (rule conjunct1)&lt;br /&gt;
      show &amp;quot;False &amp;quot; using 2 4 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
next&lt;br /&gt;
    assume 5: &amp;quot;¬q&amp;quot;&lt;br /&gt;
    show &amp;quot;¬ (p ∧ q)&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume 6: &amp;quot; p ∧ q&amp;quot;&lt;br /&gt;
      have 7:&amp;quot;q&amp;quot; using 6 by (rule conjunct2)&lt;br /&gt;
      show &amp;quot;False &amp;quot; using 5 7 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
&lt;br /&gt;
qed&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&amp;quot;&lt;br /&gt;
  shows  &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej5:&lt;br /&gt;
  assumes 0:&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;
  have 2:&amp;quot;p&amp;quot; using 1 ..&lt;br /&gt;
  have 3:&amp;quot;q&amp;quot; using 1 ..&lt;br /&gt;
  show &amp;quot;False&amp;quot; using 0&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    then show &amp;quot;False&amp;quot; using 2 ..&lt;br /&gt;
  next &lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    then show &amp;quot;False&amp;quot; using 3 ..&lt;br /&gt;
  qed&lt;br /&gt;
qed  &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;
-- &amp;quot;diecabmen1 maresccas4 pabflomar juaruipav domlloriv,jaisalmen, zoiruicha&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;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 06:&lt;br /&gt;
     &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;     &lt;br /&gt;
   proof&lt;br /&gt;
     assume 1: &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 1 have 2: &amp;quot;¬(p⟶q)&amp;quot; by (rule mt)&lt;br /&gt;
        then show &amp;quot;False&amp;quot;&lt;br /&gt;
        proof&lt;br /&gt;
           {assume &amp;quot;p&amp;quot;&lt;br /&gt;
             with `¬p` have &amp;quot;q&amp;quot; by (rule notE)}&lt;br /&gt;
           then show &amp;quot;(p⟶q)&amp;quot; by (rule impI)&lt;br /&gt;
        qed&lt;br /&gt;
     qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei, julrobrel&amp;quot;&lt;br /&gt;
lemma ej6_auto:&amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej6:&amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 1:&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 2:&amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 4:&amp;quot;¬(p⟶q)&amp;quot; using 1 2 by (rule mt) &lt;br /&gt;
    {assume 5:&amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;False&amp;quot; using 2 5 ..&lt;br /&gt;
    then have &amp;quot;q&amp;quot; ..}&lt;br /&gt;
    then have 6:&amp;quot;p⟶q&amp;quot; ..&lt;br /&gt;
    show &amp;quot;False&amp;quot; using 4 6 .. &lt;br /&gt;
  qed&lt;br /&gt;
qed&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;
-- &amp;quot;diecabmen1 pabflomar&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;
&lt;br /&gt;
--&amp;quot;marescpla,jaisalmen, zoiruicha&amp;quot;&lt;br /&gt;
  lemma 07:&lt;br /&gt;
    assumes &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
    shows &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    {assume 1: &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 &amp;quot;False&amp;quot; using 1 ..}&lt;br /&gt;
     then have &amp;quot;¬¬q&amp;quot; by (rule notI)&lt;br /&gt;
     then show &amp;quot;q&amp;quot; by (rule notnotD)}&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&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;
  then have &amp;quot;¬¬p&amp;quot; by (rule notnotI)&lt;br /&gt;
  with assms(1) have &amp;quot;¬¬q&amp;quot; by (rule mt)&lt;br /&gt;
  then show &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav, julrobrel, domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej7_juaruipav:&lt;br /&gt;
assumes 1: &amp;quot;¬q ⟶ ¬p&amp;quot; &lt;br /&gt;
shows &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;¬¬p&amp;quot; using 2 by (rule notnotI)&lt;br /&gt;
  have 4: &amp;quot;¬¬q&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
  show &amp;quot;q&amp;quot; using 4 by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej7_auto:&lt;br /&gt;
   assumes &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
   shows &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej7:&lt;br /&gt;
   assumes 0:&amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
   shows &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 1:&amp;quot;p&amp;quot;&lt;br /&gt;
  then have 2:&amp;quot;¬¬p&amp;quot; by (rule notnotI)&lt;br /&gt;
  have &amp;quot;¬¬q&amp;quot; using 0 2 by (rule mt)&lt;br /&gt;
  then have &amp;quot;q&amp;quot; by (rule notnotD)}&lt;br /&gt;
  then show &amp;quot;p ⟶ q&amp;quot; ..&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;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla pabflomar (No se usar otro lema sin usar el simp) maresccas4 (rule 03, en lugar de simp)&amp;quot;&lt;br /&gt;
{* Marco lleva razón. GRACIAS!!! *}&lt;br /&gt;
&lt;br /&gt;
  lemma 08:&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 &amp;quot;¬p ∧ ¬q&amp;quot; by (rule 03)&lt;br /&gt;
    with assms show &amp;quot;False&amp;quot; ..&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei, julrobrel&amp;quot;&lt;br /&gt;
lemma ej8_auto:&lt;br /&gt;
   assumes &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
   shows &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej8:&lt;br /&gt;
   assumes 0:&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;
  have 2:&amp;quot;¬p ∧ ¬q&amp;quot; using 1 by (rule ej3)&lt;br /&gt;
  have &amp;quot;False&amp;quot; using 0 2 ..}&lt;br /&gt;
  then show &amp;quot;p ∨ q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed  &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;
-- &amp;quot;diecabmen1, maresccas4 domlloriv&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;
-- &amp;quot;pabflomar, marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej9_pfm:&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 1: &amp;quot;¬¬p ∧ ¬¬q&amp;quot; using assms by (rule ej3_pfm)&lt;br /&gt;
  have 2: &amp;quot;¬¬p&amp;quot; using 1 by (rule  conjunct1) &lt;br /&gt;
  have 3: &amp;quot;¬¬q&amp;quot; using 1 by (rule  conjunct2)&lt;br /&gt;
  show &amp;quot;p&amp;quot; using 2 by (rule notnotD)&lt;br /&gt;
  show &amp;quot;q&amp;quot; using 3 by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej9_juaruipav:&lt;br /&gt;
  assumes 1: &amp;quot; ¬(¬p ∨ ¬q)&amp;quot; &lt;br /&gt;
  shows &amp;quot; p ∧ q&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    have 2:&amp;quot;(¬¬p)∧(¬¬q)&amp;quot; using 1 by (rule ej3_juaruipav)&lt;br /&gt;
    have &amp;quot;(¬¬p)&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
    then show &amp;quot;p&amp;quot; by (rule notnotD)   &lt;br /&gt;
    next&lt;br /&gt;
    have 3:&amp;quot;(¬¬p)∧(¬¬q)&amp;quot; using 1 by (rule ej3_juaruipav)&lt;br /&gt;
    have &amp;quot;(¬¬q)&amp;quot; using 3 by (rule conjunct2)&lt;br /&gt;
    then show &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei, julrobrel&amp;quot;&lt;br /&gt;
lemma ej9_auto:&lt;br /&gt;
   assumes &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
   shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej9:&lt;br /&gt;
   assumes 0:&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 1:&amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
     have &amp;quot;False&amp;quot; using 0 1 ..}&lt;br /&gt;
     then show &amp;quot;p&amp;quot; by (rule ccontr)&lt;br /&gt;
   next&lt;br /&gt;
   {assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
     then have 1:&amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
     have &amp;quot;False&amp;quot; using 0 1 ..}&lt;br /&gt;
   then show &amp;quot;q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&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;
-- &amp;quot;pabflomar, julrobrel, juaruipav, domlloriv&amp;quot;&lt;br /&gt;
lemma ej10_pfm:&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 1:&amp;quot;¬ (¬ p ∨ ¬ q)&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;p ∧ q&amp;quot; using 1 by (rule ej9_pfm)&lt;br /&gt;
    with assms show False by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&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;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma a10:&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;
  hence &amp;quot;¬¬p&amp;quot; ..&lt;br /&gt;
  thus &amp;quot;p&amp;quot; by (rule notnotD)&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;
  hence &amp;quot;¬¬q&amp;quot; ..&lt;br /&gt;
  thus &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma 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 (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
  then have &amp;quot;p ∧ q&amp;quot; by (rule a10)&lt;br /&gt;
  with assms(1) show False ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* -----&lt;br /&gt;
  Ejercicio 9 haciendo uso del Ejercicio 10&lt;br /&gt;
 ----------*}&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 (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
  then have &amp;quot;¬p ∨ ¬q&amp;quot; by (rule 10)&lt;br /&gt;
  with assms(1) show False ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 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 (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 09)&lt;br /&gt;
    with assms show &amp;quot;False&amp;quot; ..&lt;br /&gt;
  qed&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)&amp;quot;&lt;br /&gt;
   shows &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej10:&lt;br /&gt;
   assumes 0:&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;
  have 2:&amp;quot;p ∧ q&amp;quot; using 1 by (rule ej9)&lt;br /&gt;
  have 3:&amp;quot;False&amp;quot; using 0 2 .. }&lt;br /&gt;
  then show &amp;quot;¬p ∨ ¬q&amp;quot; by (rule ccontr)&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;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1:&amp;quot;¬(p ⟶ q) ∨ (p ⟶ q)&amp;quot; ..&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..&lt;br /&gt;
  next&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 show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..}&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar, julrobrel&amp;quot;&lt;br /&gt;
{* Sólo cambia respecto de marco en el cambio del . por by this *}&lt;br /&gt;
lemma&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1:&amp;quot;¬(p ⟶ q) ∨ (p ⟶ q)&amp;quot; ..&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..&lt;br /&gt;
    next&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` by this&lt;br /&gt;
          }&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;
    }&lt;br /&gt;
    then have &amp;quot;q ⟶ p&amp;quot; ..&lt;br /&gt;
    then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..}&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei domlloriv juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej11_auto:&amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
 lemma ej11:&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1:&amp;quot;¬(p ⟶ q) ∨ (p ⟶ q) &amp;quot; by (rule excluded_middle)&lt;br /&gt;
  then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    note 1&lt;br /&gt;
    moreover&lt;br /&gt;
    {assume &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
    then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..}&lt;br /&gt;
    moreover&lt;br /&gt;
    {assume 2:&amp;quot;¬(p ⟶ q)&amp;quot;&lt;br /&gt;
      {assume 3:&amp;quot;q&amp;quot;&lt;br /&gt;
        {assume &amp;quot;p&amp;quot;&lt;br /&gt;
          have &amp;quot;q&amp;quot; using 3 .}&lt;br /&gt;
        then have 4:&amp;quot;p⟶q&amp;quot; ..&lt;br /&gt;
        have &amp;quot;False&amp;quot; using 2 4 ..&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 show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..}&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>Zoiruicha</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_2&amp;diff=143</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_2&amp;diff=143"/>
		<updated>2013-11-21T12:08:06Z</updated>

		<summary type="html">&lt;p&gt;Zoiruicha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R2: Razonamiento sobre programas en Isabelle/HOL *}&lt;br /&gt;
&lt;br /&gt;
theory R2&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función&lt;br /&gt;
     sumaImpares :: nat ⇒ nat&lt;br /&gt;
  tal que (sumaImpares n) es la suma de los n primeros números&lt;br /&gt;
  impares. Por ejemplo,&lt;br /&gt;
     sumaImpares 5  =  25&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sumaImpares :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaImpares 0 = 0&amp;quot;&lt;br /&gt;
  |&amp;quot;sumaImpares (Suc n) = (2 * (Suc n) - 1) + sumaImpares n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaImpares 5&amp;quot; -- &amp;quot;= 25&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 irealetei juaruipav domlloriv, marescpla&amp;quot;&lt;br /&gt;
thm nat.induct&lt;br /&gt;
fun sumaImpares2 :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaImpares2 0 = 0&amp;quot;&lt;br /&gt;
| &amp;quot;sumaImpares2 (Suc n) = (2*n + 1) + sumaImpares2 n&amp;quot; &amp;lt;-- &amp;quot;yo he puesto el +1 con un Suc (marescpla)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaImpares2 5&amp;quot; -- &amp;quot;= 25&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
fun sumaImpares3 :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaImpares3 0 = 0&amp;quot;&lt;br /&gt;
| &amp;quot;sumaImpares3 (n) = (2 * n) - 1 + sumaImpares3 (n - 1)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaImpares 5&amp;quot; -- &amp;quot;= 25&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar que &lt;br /&gt;
     sumaImpares n = n*n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4,juaruipav domlloriv pabflomar, marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sumaImpares2 n = n*n&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
lemma &amp;quot;sumaImpares3 n = n*n&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     sumaPotenciasDeDosMasUno :: nat ⇒ nat&lt;br /&gt;
  tal que &lt;br /&gt;
     (sumaPotenciasDeDosMasUno n) = 1 + 2^0 + 2^1 + 2^2 + ... + 2^n. &lt;br /&gt;
  Por ejemplo, &lt;br /&gt;
     sumaPotenciasDeDosMasUno 3  =  16&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei domlloriv pabflomar, marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sumaPotenciasDeDosMasUno :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno 0 = 2&amp;quot;&lt;br /&gt;
  |&amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^(Suc n) + sumaPotenciasDeDosMasUno n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaPotenciasDeDosMasUno 3&amp;quot; -- &amp;quot;= 16&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
fun sumaPotenciasDeDosMasUno2 :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno2 0 = 2&amp;quot;&lt;br /&gt;
|  &amp;quot;sumaPotenciasDeDosMasUno2 (Suc n) = 2*sumaPotenciasDeDosMasUno2 n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaPotenciasDeDosMasUno2 3&amp;quot; -- &amp;quot;= 16&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
fun sumaPotenciasDeDosMasUno3 :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno3 0 = 2&amp;quot;&lt;br /&gt;
|  &amp;quot;sumaPotenciasDeDosMasUno3 (n) = 2^n + sumaPotenciasDeDosMasUno3(n - 1)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaPotenciasDeDosMasUno3 3&amp;quot; -- &amp;quot;= 16&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar que &lt;br /&gt;
     sumaPotenciasDeDosMasUno n = 2^(n+1)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei juaruipav domlloriv pabflomar jaisalmen, marescpla zoiruicha&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     copia :: nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (copia n x) es la lista formado por n copias del elemento&lt;br /&gt;
  x. Por ejemplo, &lt;br /&gt;
     copia 3 x = [x,x,x]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei domlloriv juaruipav pabflomar, marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun copia :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;copia 0 x = []&amp;quot;&lt;br /&gt;
  |&amp;quot;copia (Suc n) x = x # copia n x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;copia 3 x&amp;quot; -- &amp;quot;= [x,x,x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun copia2 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;copia2 0 x = []&amp;quot;&lt;br /&gt;
| &amp;quot;copia2 (Suc n) x = x#[]@copia2 n x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;copia2 3 x&amp;quot; -- &amp;quot;= [x,x,x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
fun copia3 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;copia3 0 x = []&amp;quot;&lt;br /&gt;
| &amp;quot;copia3 n x = x # (copia3 (n- 1) x)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;copia3 3 x&amp;quot; -- &amp;quot;= [x,x,x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     todos :: (&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (todos p xs) se verifica si todos los elementos de xs cumplen&lt;br /&gt;
  la propiedad p. Por ejemplo,&lt;br /&gt;
     todos (λx. x&amp;gt;(1::nat)) [2,6,4] = True&lt;br /&gt;
     todos (λx. x&amp;gt;(2::nat)) [2,6,4] = False&lt;br /&gt;
  Nota: La conjunción se representa por ∧&lt;br /&gt;
  ----------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei diecabmen1 juaruipav pabflomar jaisalmen, marescpla zoiruicha&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun todos :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;todos p [] = True&amp;quot;&lt;br /&gt;
  |&amp;quot;todos p (x#xs) = (p x ∧ todos p xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(1::nat)) [2,6,4]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;domlloriv&amp;quot;&lt;br /&gt;
fun todos2 :: &amp;quot;(&amp;#039;a \&amp;lt;Rightarrow&amp;gt; bool) \&amp;lt;Rightarrow&amp;gt; &amp;#039;a list \&amp;lt;Rightarrow&amp;gt; bool&amp;quot; where&lt;br /&gt;
  &amp;quot;todos2 p [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;todos2 p (x#xs) = ((p x) \&amp;lt;and&amp;gt; todos2 p xs)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;todos2 (λx. x&amp;gt;(1::nat)) [2,6,4]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;todos2 (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; -- &amp;quot;= False&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que todos los elementos de (copia n x) son&lt;br /&gt;
  iguales a x. &lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4,juaruipav domlloriv pabflomar jaisalmen, marescpla zoiruicha&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia2 n x)&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Definir la función&lt;br /&gt;
    factR :: nat ⇒ nat&lt;br /&gt;
  tal que (factR n) es el factorial de n. Por ejemplo,&lt;br /&gt;
    factR 4 = 24&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei diecabmen1 juaruipav domlloriv pabflomar, marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun factR :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;factR 0 = 1&amp;quot;&lt;br /&gt;
  |&amp;quot;factR (Suc n) = (Suc n) * factR n&amp;quot; &amp;lt;--&amp;quot;creo que no hacen falta los paréntesis del 2º suc (marescpla)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;factR 4&amp;quot; -- &amp;quot;= 24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
fun factR2 :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;factR2 0 = 1&amp;quot;&lt;br /&gt;
|  &amp;quot;factR2 (n) = n * factR2 (n - 1)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;factR2 4&amp;quot; -- &amp;quot;= 24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Se considera la siguiente definición iterativa de la&lt;br /&gt;
  función factorial &lt;br /&gt;
     factI :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
     factI n = factI&amp;#039; n 1&lt;br /&gt;
     &lt;br /&gt;
     factI&amp;#039; :: nat ⇒ nat ⇒ nat&amp;quot; where&lt;br /&gt;
     factI&amp;#039; 0       x = x&lt;br /&gt;
     factI&amp;#039; (Suc n) x = factI&amp;#039; n (Suc n)*x&lt;br /&gt;
  Demostrar que, para todo n y todo x, se tiene &lt;br /&gt;
     factI&amp;#039; n x = x * factR n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun factI&amp;#039; :: &amp;quot;nat ⇒ nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;factI&amp;#039; 0       x = x&amp;quot;&lt;br /&gt;
| &amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (Suc n)*x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun factI :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;factI n = factI&amp;#039; n 1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;factI 4&amp;quot; -- &amp;quot;= 24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei diecabmen1 juaruipav domlloriv pabflomar jaisalmen, marescpla zoiruicha&amp;quot;     &lt;br /&gt;
&lt;br /&gt;
lemma fact: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
by (induct n arbitrary: x) auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que&lt;br /&gt;
     factI n = factR n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 juaruipav pabflomar jaisalmen zoiruicha&amp;quot; &amp;quot;no lo entiendo (marescpla)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
corollary &amp;quot;factI n = factR n&amp;quot;&lt;br /&gt;
by (simp add: fact)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir, recursivamente y sin usar (@), la función&lt;br /&gt;
     amplia :: &amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (amplia xs y) es la lista obtenida añadiendo el elemento y al&lt;br /&gt;
  final de la lista xs. Por ejemplo,&lt;br /&gt;
     amplia [d,a] t = [d,a,t]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4,juaruipav domlloriv jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun amplia :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;amplia [] y = [y]&amp;quot;&lt;br /&gt;
  |&amp;quot;amplia (x#xs) y = x # (amplia xs y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;amplia [d,a] t&amp;quot; -- &amp;quot;= [d,a,t]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun amplia2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;amplia2 [] y = y#[]&amp;quot;&lt;br /&gt;
  |&amp;quot;amplia2 (x#xs) y = x#(amplia2 xs y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;amplia2 [d,a] t&amp;quot; -- &amp;quot;= [d,a,t]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar, marescpla&amp;quot; ¿Sería mejor poner los paréntesis en la llamada a amplia como hace maresccas4?&lt;br /&gt;
fun amplia3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;amplia3 [] y = [y]&amp;quot;&lt;br /&gt;
| &amp;quot;amplia3 (x#xs) y = x # amplia3 xs y&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;amplia3 [d,a] t&amp;quot; -- &amp;quot;= [d,a,t]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que &lt;br /&gt;
     amplia xs y = xs @ [y]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4, juaruipav domlloriv pabflomar jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot; (* Es igual que la de maresccas4, pero lo pego para que compile*)&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;amplia2 xs y = xs @ [y]&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zoiruicha</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_1&amp;diff=142</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_1&amp;diff=142"/>
		<updated>2013-11-21T12:00:40Z</updated>

		<summary type="html">&lt;p&gt;Zoiruicha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
header {* R1: Programación funcional en Isabelle *}&lt;br /&gt;
&lt;br /&gt;
theory R1&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* ----------------------------------------------------------------&lt;br /&gt;
  Ejercicio 0. Definir, por recursión, la función&lt;br /&gt;
     factorial :: nat ⇒ nat&lt;br /&gt;
  tal que (factorial n) es el factorial de n. Por ejemplo,&lt;br /&gt;
     factorial 4 = 24&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;antmacrui maresccas4 diecabmen1 juaruipav marescpla&amp;quot;&lt;br /&gt;
fun factorial :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;factorial 0 = 1&amp;quot;&lt;br /&gt;
| &amp;quot;factorial (Suc n) = Suc n * factorial n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;factorial 4&amp;quot; -- &amp;quot;24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei domlloriv&amp;quot;&lt;br /&gt;
fun factorial2 :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;factorial2 (0::nat)= (1::nat)&amp;quot;&lt;br /&gt;
| &amp;quot;factorial2 n =   n  * factorial2 (n - 1)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;factorial2 4&amp;quot; -- &amp;quot;24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
fun factorial3 :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;factorial3 0 = 1&amp;quot;&lt;br /&gt;
  | &amp;quot;factorial3 n = factorial3 (n - 1) * n&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
value &amp;quot;factorial3 4&amp;quot; -- &amp;quot;24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
fun factorial4 :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;factorial4 0 = 1&amp;quot;&lt;br /&gt;
| &amp;quot;factorial4 (n) =  n * factorial4 (n- 1)&amp;quot; &lt;br /&gt;
 &lt;br /&gt;
value &amp;quot;factorial4 4&amp;quot; -- &amp;quot;24&lt;br /&gt;
&lt;br /&gt;
text {* ----------------------------------------------------------------&lt;br /&gt;
  Ejercicio 1. Definir, por recursión, la función&lt;br /&gt;
     longitud :: &amp;#039;a list ⇒ nat&lt;br /&gt;
  tal que (longitud xs) es la longitud de la listas xs. Por ejemplo,&lt;br /&gt;
     longitud [4,2,5] = 3&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
fun longitud :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud [] = 0&amp;quot;&lt;br /&gt;
| &amp;quot;longitud (x # xs) = Suc (longitud xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud [4,2,5]&amp;quot; -- &amp;quot;= 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei pabflomar julrobrel juaruipav&amp;quot;&lt;br /&gt;
fun longitud2 :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud2 [] = (0::nat)&amp;quot;&lt;br /&gt;
| &amp;quot;longitud2 xs = 1 + longitud2 (tl xs) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud2 [4,2,5]&amp;quot; -- &amp;quot;= 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun longitud3 :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud3 [] = 0&amp;quot;&lt;br /&gt;
| &amp;quot;longitud3 (head#tail) = 1 + longitud3 tail&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud3 [4,2,5]&amp;quot; -- &amp;quot;= 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;marescpla&amp;quot;&lt;br /&gt;
fun longitud4 :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud4 [] = 0&amp;quot;|&lt;br /&gt;
  &amp;quot;longitud4 xs = 1 + longitud4 (tl xs) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud4 [4,2,5]&amp;quot; -- &amp;quot;= 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;&amp;quot;jaisalmen  zoiruicha&amp;quot;&lt;br /&gt;
fun longitud5 :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud5 [] = 0&amp;quot;&lt;br /&gt;
| &amp;quot;longitud5 (x#a) = 1 + longitud5 a&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
value &amp;quot;longitud5 [4,2,5]&amp;quot; -- &amp;quot;= 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     fun intercambia :: &amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&lt;br /&gt;
  tal que (intercambia p) es el par obtenido intercambiando las&lt;br /&gt;
  componentes del par p. Por ejemplo,&lt;br /&gt;
     intercambia (u,v) = (v,u)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 pabflomar&amp;quot;&lt;br /&gt;
fun intercambia :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia p = (snd p, fst p)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia (u,v)&amp;quot; -- &amp;quot;= (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1 domlloriv julrobrel juaruipav marescpla jaisalmen&amp;quot;&lt;br /&gt;
fun intercambia2 :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia2 (x,y) = (y,x)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia2 (u,v)&amp;quot; -- &amp;quot;= (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir, por recursión, la función&lt;br /&gt;
     inversa :: &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (inversa xs) es la lista obtenida invirtiendo el orden de los&lt;br /&gt;
  elementos de xs. Por ejemplo,&lt;br /&gt;
     inversa [a,d,c] = [c,d,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv julrobrel juaruipav&amp;quot;&lt;br /&gt;
fun inversa :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa []     = []&amp;quot;&lt;br /&gt;
| &amp;quot;inversa (x#xs) = inversa xs @ (x#[])&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa [a,d,c]&amp;quot; -- &amp;quot;= [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei pabflomar&amp;quot;&lt;br /&gt;
fun inversa2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa2 [] = [] &amp;quot;&lt;br /&gt;
| &amp;quot;inversa2 xs = inversa2 (tl xs) @ (hd xs#[])&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa2 [a,d,c]&amp;quot; -- &amp;quot;= [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
fun inversa3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa3 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;inversa3 (x#a) = inversa3 a @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa3 [a,d,c]&amp;quot; -- &amp;quot;= [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     repite :: nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (repite n x) es la lista formada por n copias del elemento&lt;br /&gt;
  x. Por ejemplo, &lt;br /&gt;
     repite 3 a = [a,a,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 julrobrel juaruipav marescpla&amp;quot;&lt;br /&gt;
fun repite :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite 0 x       = []&amp;quot;|&lt;br /&gt;
  &amp;quot;repite (Suc n) x = x # repite n x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite 3 a&amp;quot; -- &amp;quot;= [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
fun repite2 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite2 (0::nat) x = []&amp;quot;&lt;br /&gt;
| &amp;quot;repite2 n x = x#(repite2 (n - 1) x) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite2 3 a&amp;quot; -- &amp;quot;= [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun repite3 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite3 0 x = []&amp;quot;&lt;br /&gt;
| &amp;quot;repite3 (Suc n) x = (x#[]) @ (repite3 n x)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite3 3 a&amp;quot; -- &amp;quot;= [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;domlloriv pabflomar jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
fun repite4 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite4 0 x = []&amp;quot;&lt;br /&gt;
| &amp;quot;repite4 n x = x# repite4 (n - 1) x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite4 3 a&amp;quot; -- &amp;quot;= [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     conc :: &amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (conc xs ys) es la concatención de las listas xs e ys. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 julrobrel&amp;quot;&lt;br /&gt;
fun conc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc [] ys     = ys&amp;quot;&lt;br /&gt;
| &amp;quot;conc (x#xs) ys = x # conc xs ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc [a,d] [b,d,a,c]&amp;quot; -- &amp;quot;= [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- irealetei&lt;br /&gt;
fun conc2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc2 xs [] = xs&amp;quot;&lt;br /&gt;
| &amp;quot;conc2 xs ys = hd ys # conc2 xs (tl ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc2 [a,d] [b,d,a,c]&amp;quot; -- &amp;quot;= [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 domlloriv pabflomar juaruipav&amp;quot;&lt;br /&gt;
fun conc3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc3 xs ys = xs@ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc3 [a,d] [b,d,a,c]&amp;quot; -- &amp;quot;= [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;marescpla&amp;quot;&lt;br /&gt;
fun conc4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc4 [] [] = []&amp;quot;|&lt;br /&gt;
  &amp;quot;conc4 [] ys = (hd ys) # conc4 [] (tl ys)&amp;quot;|&lt;br /&gt;
  &amp;quot;conc4 xs ys = (hd xs) # conc4 (tl xs) ys&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
value &amp;quot;conc4 [a,d] [b,d,a,c]&amp;quot; -- &amp;quot;= [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
fun conc5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc5 [] ys = ys&amp;quot;&lt;br /&gt;
| &amp;quot;conc5 xs [] = xs&amp;quot;&lt;br /&gt;
| &amp;quot;conc5 (x#xs) ys = x # conc5 xs ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc5 [a,d] [b,d,a,c]&amp;quot; -- &amp;quot;= [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     coge :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (coge n xs) es la lista de los n primeros elementos de xs. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     coge 2 [a,c,d,b,e] = [a,c]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
fun coge :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge 0 xs           = []&amp;quot;&lt;br /&gt;
| &amp;quot;coge n []           = []&amp;quot;&lt;br /&gt;
| &amp;quot;coge (Suc n) (x#xs) = x # (coge n xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
fun coge2 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge2 0 xs = []&amp;quot;&lt;br /&gt;
| &amp;quot;coge2 n xs = (hd xs) # (coge2 (n - 1) (tl xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
fun coge3 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge3 0 xs = []&amp;quot;&lt;br /&gt;
| &amp;quot;coge3 n xs = (hd xs) # (coge3 (n - 1) (tl xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge 2 [a,c,d,b,e]&amp;quot; -- &amp;quot;= [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel,juaruipav&amp;quot;&lt;br /&gt;
fun coge4 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge4 0 xs = []&amp;quot;&lt;br /&gt;
  |&amp;quot;coge4 (Suc n) [] = []&amp;quot;&lt;br /&gt;
  |&amp;quot;coge4 (Suc n) (x#xs) = x # (coge4 n xs)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge4 2 [a,c,d,b,e]&amp;quot; -- &amp;quot;= [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;marescpla&amp;quot;&lt;br /&gt;
fun coge5 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge5 0 xs = []&amp;quot;|&lt;br /&gt;
  &amp;quot;coge5 (Suc n) xs = hd xs # coge5 n (tl xs)&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
value &amp;quot;coge5 2 [a,c,d,b,e]&amp;quot; -- &amp;quot;= [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
fun coge6 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge6 0 xs = []&amp;quot;&lt;br /&gt;
| &amp;quot;coge6 n [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;coge6 n (x#xs) = x # (coge6 (n-(1::nat)) xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge6 2 [a,c,d,b,e]&amp;quot; -- &amp;quot;= [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     elimina :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (elimina n xs) es la lista obtenida eliminando los n primeros&lt;br /&gt;
  elementos de xs. Por ejemplo, &lt;br /&gt;
     elimina 2 [a,c,d,b,e] = [d,b,e]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
fun elimina :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina 0 xs           = xs&amp;quot;&lt;br /&gt;
| &amp;quot;elimina n []           = []&amp;quot;&lt;br /&gt;
| &amp;quot;elimina (Suc n) (x#xs) = elimina n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina 2 [a,c,d,b,e]&amp;quot; -- &amp;quot;= [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei pabflomar&amp;quot;&lt;br /&gt;
fun elimina2 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot; elimina2 0 xs = xs &amp;quot;&lt;br /&gt;
| &amp;quot;elimina2 n xs = elimina2 (n - 1) (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina2 2 [a,c,d,b,e]&amp;quot; -- &amp;quot;= [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun elimina3 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina3 0 xs = xs&amp;quot;&lt;br /&gt;
| &amp;quot;elimina3 n [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;elimina3 n (x#xs) = elimina3 (n - 1) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina3 2 [a,c,d,b,e]&amp;quot; -- &amp;quot;= [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel, juaruipav&amp;quot;&lt;br /&gt;
fun elimina4 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina4 0 xs = xs&amp;quot;&lt;br /&gt;
  |&amp;quot;elimina4 (Suc n) [] = []&amp;quot;&lt;br /&gt;
  |&amp;quot;elimina4 (Suc n) (x#xs) = (elimina4 n xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina4 2 [a,c,d,b,e]&amp;quot; -- &amp;quot;= [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;marescpla&amp;quot;&lt;br /&gt;
fun elimina5 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina5 0 xs = xs&amp;quot;|&lt;br /&gt;
  &amp;quot;elimina5 (Suc n) xs = elimina5 n (tl xs)&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
value &amp;quot;elimina5 2 [a,c,d,b,e]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
fun elimina6 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina6 0 xs = xs&amp;quot;&lt;br /&gt;
| &amp;quot;elimina6 n [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;elimina6 n (x#xs) = elimina6 (n-(1::nat)) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina6 2 [a,c,d,b,e]&amp;quot; -- &amp;quot;= [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Definir la función&lt;br /&gt;
     esVacia :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (esVacia xs) se verifica si xs es la lista vacía. Por ejemplo,&lt;br /&gt;
     esVacia []  = True&lt;br /&gt;
     esVacia [1] = False&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
fun esVacia :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;esVacia (x#xs) = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia []&amp;quot;  -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;esVacia [1]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei domlloriv pabflomar julrobrel juaruipav marescpla&amp;quot;&lt;br /&gt;
fun esVacia2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia2 [] = True&amp;quot;|&lt;br /&gt;
  &amp;quot;esVacia2 xs = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia2 []&amp;quot;  -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;esVacia2 [1]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun esVacia3 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia3 xs = (if xs = [] then True else False)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia3 []&amp;quot;  -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;esVacia3 [1]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
fun esVacia4 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia4 x = (if longitud(x)=0 then True else False)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia4 []&amp;quot;  -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;esVacia4 [1]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     inversaAc :: &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (inversaAc xs) es a inversa de xs calculada usando&lt;br /&gt;
  acumuladores. Por ejemplo, &lt;br /&gt;
     inversaAc [a,c,b,e] = [e,b,c,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
fun inversaAcAux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux [] ys     = ys&amp;quot;&lt;br /&gt;
| &amp;quot;inversaAcAux (x#xs) ys = inversaAcAux xs (x#ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc xs = inversaAcAux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc2 [a,c,b,e]&amp;quot; -- &amp;quot;= [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
fun inversaAc2Aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc2Aux xs [] = xs&amp;quot;&lt;br /&gt;
| &amp;quot;inversaAc2Aux xs ys = inversaAc2Aux ((hd ys) # xs) (tl ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc2 xs = inversaAc2Aux [] xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc2 [a,c,b,e]&amp;quot; -- &amp;quot;= [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 julrobrel,juaruipav&amp;quot;&lt;br /&gt;
fun inversaAc3Aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc3Aux xs ys = xs@ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc3 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;inversaAc3 (x#xs) = inversaAc3Aux (inversaAc3 xs) (x#[])&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc3 [a,c,b,e]&amp;quot; -- &amp;quot;= [e,b,c,a]&amp;quot;&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
fun inversaAcAux4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux4 [] ys = ys&amp;quot;&lt;br /&gt;
| &amp;quot;inversaAcAux4 xs ys = inversaAcAux4 (tl xs) ((hd xs) # ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc4 xs = inversaAcAux4 xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc4 [a,c,b,e]&amp;quot; -- &amp;quot;= [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;marescpla&amp;quot;&lt;br /&gt;
fun inversaAcAux5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux5 [] ys = ys&amp;quot;|&lt;br /&gt;
  &amp;quot;inversaAcAux5 xs ys = inversaAcAux5 (elimina 1 xs) (conc (coge 1 xs) ys)&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
fun inversaAc5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc5 xs = inversaAcAux5 xs []&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
value &amp;quot;inversaAc5 [a,c,b,e]&amp;quot; -- &amp;quot;= [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jaisalmen&amp;quot;&lt;br /&gt;
fun inverseAcAux6 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inverseAcAux6 xs ys = xs@ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc6 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc6 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;inversaAc6 (x#xs) = inverseAcAux6 (inversaAc6 xs) [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc6 [a,c,b,e]&amp;quot; -- &amp;quot;= [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     sum :: nat list ⇒ nat&lt;br /&gt;
  tal que (sum xs) es la suma de los elementos de xs. Por ejemplo,&lt;br /&gt;
     sum [3,2,5] = 10&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv julrobrel juaruipav jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
fun sum :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum []      = 0&amp;quot;&lt;br /&gt;
| &amp;quot;sum (x#xs) = x + sum xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum [3,2,5]&amp;quot; -- &amp;quot;= 10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei pabflomar marescpla&amp;quot;&lt;br /&gt;
fun sum2 :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum2 [] = 0&amp;quot;&lt;br /&gt;
  |&amp;quot;sum2 xs = hd xs + sum2 (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum2 [3,2,5]&amp;quot; -- &amp;quot;= 10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función&lt;br /&gt;
     map :: (&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&lt;br /&gt;
  tal que (map f xs) es la lista obtenida aplicando la función f a los&lt;br /&gt;
  elementos de xs. Por ejemplo,&lt;br /&gt;
     map (λx. 2*x) [3,2,5] = [6,4,10]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv julrobrel juaruipav&amp;quot;&lt;br /&gt;
fun map :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map f []     = []&amp;quot;&lt;br /&gt;
| &amp;quot;map f (x#xs) = (f x) # map f xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map (λx. 2*x) [3::nat,2,5]&amp;quot; -- &amp;quot;= [6,4,10]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei pabflomar&amp;quot;&lt;br /&gt;
fun map2 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
 &amp;quot;map2 f [] = []&amp;quot;&lt;br /&gt;
 |&amp;quot;map2 f xs = f(hd xs) # map2 f (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map2 (λx. 2*x) [3::nat,2,5]&amp;quot; -- &amp;quot;= [6,4,10]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun map3 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map3 f [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;map3 f (x#xs) = ((f x)#[]) @ (map3 f xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map3 (λx. 2*x) [3::nat,2,5]&amp;quot; -- &amp;quot;= [6,4,10]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;marescpla&amp;quot;&lt;br /&gt;
fun map4 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map4 f [] = []&amp;quot;|&lt;br /&gt;
  &amp;quot;map4 f xs = value f (coge 1 xs) # map4 f (elimina 1 xs)&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
value &amp;quot;map4 (λx. 2*x) [3::nat,2,5]&amp;quot; -- &amp;quot;= [6,4,10]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
fun map :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map5 f [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;map5 f (x#xs) = f(x) # map5 f xs &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map5 (λx. 2*x) [3::nat,2,5]&amp;quot; -- &amp;quot;= [6,4,10]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zoiruicha</name></author>
		
	</entry>
</feed>