<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/RA2010/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jalonso</id>
	<title>Razonamiento automático (2010-11) - Contribuciones del usuario [es]</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/RA2010/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jalonso"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php/Especial:Contribuciones/Jalonso"/>
	<updated>2026-07-18T02:56:50Z</updated>
	<subtitle>Contribuciones del usuario</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_7&amp;diff=335</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_7&amp;diff=335"/>
		<updated>2021-08-22T09:38:01Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Texto reemplazado: «&amp;quot;isar&amp;quot;» por «&amp;quot;isabelle&amp;quot;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* 7ª relación de ejercicios *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_7_sol&lt;br /&gt;
imports Main Efficient_Nat&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Contador de occurrencias *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     veces :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ nat&amp;quot;&lt;br /&gt;
  tal que (veces x ys) es el número de occurrencias del elemento x en la&lt;br /&gt;
  lista ys. Por ejemplo, &lt;br /&gt;
    veces (2::nat) [2,1,2,5,2] = 3&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
primrec veces :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;veces x [] = 0&amp;quot;&lt;br /&gt;
| &amp;quot;veces x (y#ys) = (if x = y then 1 + veces x ys else veces x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar o refutar:&lt;br /&gt;
     veces a (xs @ ys) = veces a xs + veces a ys&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;veces a (xs @ ys) = veces a xs + veces a ys&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar o refutar:&lt;br /&gt;
     veces a xs = veces a (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*} &lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
    &amp;quot;veces a xs ≤ length xs&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;veces a xs ≤ length xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Sabiendo que la función map aplica una función a todos los&lt;br /&gt;
  elementos de una lista: &lt;br /&gt;
     map f [x\&amp;lt;^isub&amp;gt;1,…,x\&amp;lt;^isub&amp;gt;n] = [f x\&amp;lt;^isub&amp;gt;1,…,f x\&amp;lt;^isub&amp;gt;n], &lt;br /&gt;
  demostrar o refutar&lt;br /&gt;
     veces a (map f xs) = veces (f a) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;veces a (map f xs) = veces (f a) xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text{*&lt;br /&gt;
El contraejemplo encontrado es el siguiente:&lt;br /&gt;
xs = [1]&lt;br /&gt;
f = (λx. 0)(1 := 0, 0 := 0)&lt;br /&gt;
a = 0&lt;br /&gt;
&lt;br /&gt;
Esto es: 0 = f(1) pero f(0) ≠ 1&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. La función &lt;br /&gt;
     filter :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; &lt;br /&gt;
  está definida por&lt;br /&gt;
     filter P []       = []&lt;br /&gt;
     filter P (x # xs) = (if P x then x # filter P xs else filter P xs)&lt;br /&gt;
  Encontrar una expresión e que no contenga filter tal que se verifique&lt;br /&gt;
  la siguiente propiedad: &lt;br /&gt;
     veces a (filter P xs) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;veces a (filter P xs) = (if P a then veces a xs else 0)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Usando veces, definir la función &lt;br /&gt;
     borraDups :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot;&lt;br /&gt;
  tal que (borraDups xs) es la lista obtenida eliminando los elementos&lt;br /&gt;
  duplicados de la lista xs. Por ejemplo,  &lt;br /&gt;
     borraDups [1::nat,2,4,2,3] = [1,4,2,3]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borraDups es equivalente a la predefinida remdups. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  El tipo correspondiente al conjunto imagen de la función definida&lt;br /&gt;
  no coincide con el indicado en la declaración de tipos del enunciado,&lt;br /&gt;
  dado que en él aparece erróneamente la salida de tipo bool, mientras&lt;br /&gt;
  que del resto del texto se deduce que la salida es una lista de&lt;br /&gt;
  elementos de tipo &amp;#039;a. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
primrec borraDups :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDups [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDups (x#xs) = (if veces x xs &amp;gt; 0 then borraDups xs else (x#borraDups xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
Nota: para que no muestre error la función de evaluación&lt;br /&gt;
    hay que indicarle el tipo de los elementos de la lista.&lt;br /&gt;
    Por ejemplo:&lt;br /&gt;
          value &amp;quot;borraDups [1::nat,2,4,2,3]&amp;quot;&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Encontrar una expresión e que no contenga la función&lt;br /&gt;
  borraDups tal que se verifique &lt;br /&gt;
     veces x (borraDups xs) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;veces x (borraDups xs) = (if (veces x xs) &amp;gt;= 1 then 1 else 0)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Usando la función &amp;quot;veces&amp;quot;, definir la función &lt;br /&gt;
     distintos :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot;&lt;br /&gt;
  tal que (distintos xs) se verifica si cada elemento de xs aparece tan&lt;br /&gt;
  solo una vez. Por ejemplo, &lt;br /&gt;
     distintos [1,4,3]&lt;br /&gt;
     ¬ distintos [1,4,1]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función &amp;quot;distintos&amp;quot; es equivalente a la predefinida &amp;quot;distinct&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
primrec distintos :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;distintos [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;distintos (x#xs) = (if veces x xs &amp;gt; 0 then False else distintos xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
Nota: para que no muestre error la función de evaluación&lt;br /&gt;
    hay que indicarle el tipo de los elementos de la lista.&lt;br /&gt;
    Por ejemplo:&lt;br /&gt;
           value &amp;quot;distintos [1::nat,4,1]&amp;quot;&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que el valor de &amp;quot;borraDups&amp;quot; verifica &amp;quot;distintos&amp;quot;. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(distintos xs) ⟶ ((length xs) = (length (borraDups xs)))&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text{*&lt;br /&gt;
Si xs verifica el predicado distintos, entonces el tamaño de xs debe de ser el mismo&lt;br /&gt;
antes y despues de borrar los duplcados.&lt;br /&gt;
*}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Miscel%C3%A1neas&amp;diff=334</id>
		<title>Misceláneas</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Miscel%C3%A1neas&amp;diff=334"/>
		<updated>2021-07-24T15:27:25Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Texto reemplazado: «&amp;quot;isar&amp;quot;» por «&amp;quot;isabelle&amp;quot;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
theory Tema8&lt;br /&gt;
imports Main Efficient_Nat&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
header {* Misceláneas *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Contenido:&lt;br /&gt;
  * Definición del algoritmo de Huffman&lt;br /&gt;
  * Definiciones inductivas&lt;br /&gt;
    * Demostraciones por introducción&lt;br /&gt;
    * Demostraciones por inducción sobre conjuntos inductivos&lt;br /&gt;
  * Clases&lt;br /&gt;
    * Subclase&lt;br /&gt;
    * Instanciación de clases&lt;br /&gt;
  * Ámbitos (&amp;quot;Locales&amp;quot;)&lt;br /&gt;
  * Demostraciones estructuradas: inducción y encadenamiento&lt;br /&gt;
  * Un ejemplo elemental de álgebra&lt;br /&gt;
    * Definición de clases&lt;br /&gt;
    * Instanciación de clases&lt;br /&gt;
    * Instancias recursivas&lt;br /&gt;
    * Subclases&lt;br /&gt;
  * Las clases de tipos como ámbitos&lt;br /&gt;
    * Razonamiento abstracto&lt;br /&gt;
    * Definiciones derivadas&lt;br /&gt;
    * Analogía entre clases y functores&lt;br /&gt;
    * Relaciones de subclase adicionales&lt;br /&gt;
  * Otras cuestiones&lt;br /&gt;
    * Clases de tipos y generación de código&lt;br /&gt;
    * Inspección del universo de las clases de tipos&lt;br /&gt;
  * Sledgehammer&lt;br /&gt;
  * Refute&lt;br /&gt;
    * Refutaciones en lógica proposicional&lt;br /&gt;
      * Refutaciones en lógica de predicados&lt;br /&gt;
      * Refutaciones con funciones e igualdad&lt;br /&gt;
    * Ejemplos con listas&lt;br /&gt;
  * Nitpick&lt;br /&gt;
    * Refutación proposicional&lt;br /&gt;
    * Skolemizaciónn&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
section {* Definición del algoritmo de Huffman *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo de definición de tipo de datos recursivo: árboles binarios.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = Hoja nat &amp;#039;a | Nodo nat &amp;quot;(&amp;#039;a arbol)&amp;quot; &amp;quot;(&amp;#039;a arbol)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo de definición primitiva recursiva sobre un tipo definido:&lt;br /&gt;
  Definición del valor de un árbol. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
primrec &amp;quot;valor&amp;quot; where&lt;br /&gt;
  &amp;quot;valor (Hoja n _) = n&amp;quot; &lt;br /&gt;
| &amp;quot;valor (Nodo n _ _) = n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de definición no recursiva: Mezcla de dos árboles.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
definition &amp;quot;mezcla t1 t2 = Nodo (valor t1 + valor t2) t1 t2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Definición de la inserción de un árbol en un bosque.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun ins where&lt;br /&gt;
  &amp;quot;ins u (t#ts) = (if valor u ≤ valor t then u # t # ts else t # ins u ts)&amp;quot; &lt;br /&gt;
| &amp;quot;ins u [] = [u]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Lema para usar en las demostraciones de terminación. En particular, en&lt;br /&gt;
  la definición de creaArbol. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma size_ins[termination_simp]: &amp;quot;size(ins u ts) = size ts + 1&amp;quot;&lt;br /&gt;
by (induct ts) simp_all&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Creación de árboles a partir de listas &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun creaArbol where&lt;br /&gt;
  &amp;quot;creaArbol(t1#t2#ts) = creaArbol(ins (mezcla t1 t2) ts)&amp;quot; &lt;br /&gt;
| &amp;quot;creaArbol[t] = t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de formas normales: creación de árboles de Huffman.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
value&lt;br /&gt;
  &amp;quot;creaArbol[Hoja 3 a, Hoja 6 b, Hoja 12 c, Hoja 24 d]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  El árbol creado es&lt;br /&gt;
  &amp;quot;Nodo 45 (Nodo 21 (Nodo 9 (Hoja 3 a) (Hoja 6 b)) (Hoja 12 c)) (Hoja 24 d)&amp;quot; *}&lt;br /&gt;
&lt;br /&gt;
value&lt;br /&gt;
  &amp;quot;creaArbol[Hoja 24 d, Hoja 6 b, Hoja 12 c, Hoja 3 a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  El árbol creado es&lt;br /&gt;
  &amp;quot;Nodo 45 (Nodo 15 (Hoja 12 c) (Hoja 3 a)) (Nodo 30 (Hoja 24 d) (Hoja 6 b))&amp;quot;&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
section {* Definiciones inductivas *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  En esta sección vamos a trabajar con una gramática cuyo alfabeto consta de&lt;br /&gt;
  dos símbolos: A y B. En primer lugar, se define el alfabeto (alfa)&lt;br /&gt;
  como un tipo con dos elementos. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype alfa = A | B&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se define la gramática S como el conjunto de las listas de elementos del&lt;br /&gt;
  alfabeto generadas mediante las siguientes reglas:&lt;br /&gt;
  · La lista vacía está en S,&lt;br /&gt;
  · Si w está en S, entonces AwB también lo está.&lt;br /&gt;
  · Si v y w están en S, entonces vw también lo está. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
inductive_set S :: &amp;quot;alfa list set&amp;quot; where&lt;br /&gt;
  S1: &amp;quot;[] ∈ S&amp;quot; &lt;br /&gt;
| S2: &amp;quot;w ∈ S ⟹ [A] @ w @ [B] ∈ S&amp;quot; &lt;br /&gt;
| S3: &amp;quot;v ∈ S ⟹ w ∈ S ⟹ v @ w ∈ S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
subsection {* Demostraciones por introducción *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
    La lista [A, B] está en S.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;[A, B] ∈ S&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;[] ∈ S&amp;quot; by (rule S1)&lt;br /&gt;
  hence &amp;quot;[A] @ [] @ [B] ∈ S&amp;quot; by (rule S2)&lt;br /&gt;
  thus ?thesis by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
subsection {* Demostraciones por inducción sobre conjuntos inductivos *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ninguna palabra de la gramática empieze por B.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;w ∈ S ⟹ ¬ (∃v. w = B # v)&amp;quot;&lt;br /&gt;
proof (induct set:S)&lt;br /&gt;
  case S1&lt;br /&gt;
  thus ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case S2&lt;br /&gt;
  thus ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case S3&lt;br /&gt;
  thus ?case (* sledgehammer *) by (simp add: append_eq_Cons_conv)  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Clases *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El tutorial sobre clases está en la teoría Clases.thy.&lt;br /&gt;
  &lt;br /&gt;
  La clase de los órdenes es la colección de los tipos que poseen una&lt;br /&gt;
  relación ≼ verificando las siguientes propiedades&lt;br /&gt;
  · reflexiva: x ≼ x&lt;br /&gt;
  · transitiva: x ≼ y ⟹ y ≼ z ⟹ x ≼ z&lt;br /&gt;
  · antisimétrica: x ≼ y ⟹ y ≼ x ⟹ x = y&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
class orden = &lt;br /&gt;
  fixes menor_ig :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ bool&amp;quot;  (infix &amp;quot;≼&amp;quot; 50)&lt;br /&gt;
  assumes refl: &amp;quot;x ≼ x&amp;quot;&lt;br /&gt;
      and trans: &amp;quot;x ≼ y ⟹ y ≼ z ⟹ x ≼ z&amp;quot;&lt;br /&gt;
      and antisim: &amp;quot;x ≼ y ⟹ y ≼ x ⟹ x = y&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ha generado los teoremas correspondientes a los axiomas. Pueden consultarse&lt;br /&gt;
  mediante thm como se muestra a continuación.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
thm refl&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se inicia el contexto orden en el que se van a realizar definiciones y&lt;br /&gt;
  demostraciones. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
context orden&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  x es menor que y si x es menor o igual que y y no son iguales.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
definition menor :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ bool&amp;quot;  (infix &amp;quot;≺&amp;quot; 50)&lt;br /&gt;
  where &amp;quot;x ≺ y ⟷ x ≼ y ∧ ¬ y ≼ x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
    La relación menor es irreflexiva.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma irrefl: &amp;quot;¬ x ≺ x&amp;quot;&lt;br /&gt;
by (auto simp:menor_def)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La relación menor es transitiva.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma menor_trans: &amp;quot;x ≺ y ⟹ y ≺ z ⟹ x ≺ z&amp;quot;&lt;br /&gt;
by (auto simp:menor_def intro:trans)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La relación menor es asimétrica; es decir, si x ≺ y e y ≺ x, entonces&lt;br /&gt;
  se verifica cualquier propiedad P. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma asimetrica: &amp;quot;x ≺ y ⟹ y ≺ x ⟹ P&amp;quot;&lt;br /&gt;
by (auto simp:menor_def)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subsection {* Subclase *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Un orden lineal es un orden en que cada par de elementos son comparables.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
class ordenLineal = orden +&lt;br /&gt;
  assumes lineal: &amp;quot;x ≼ y ∨ y ≼ x&amp;quot;&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  En los órdenes lineales se tiene que x ≺ y ∨ x=y ∨ y ≺ x.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;x ≺ y ∨ x=y ∨ y ≺ x&amp;quot;&lt;br /&gt;
using menor_def lineal antisim  &lt;br /&gt;
by blast&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subsection {* Instanciación de clases *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El producto de dos órdenes es un orden.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
instantiation prod :: (orden, orden) orden&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
inductive menor_ig_prod :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;a × &amp;#039;b ⇒ bool&amp;quot; where&lt;br /&gt;
  menor_ig_fst: &amp;quot;x ≺ v ⟹ (x, y) ≼ (v, w)&amp;quot; &lt;br /&gt;
| menor_ig_snd: &amp;quot;x = v ⟹ y ≼ w ⟹ (x, y) ≼ (v, w)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
instance&lt;br /&gt;
proof&lt;br /&gt;
  fix p :: &amp;quot;&amp;#039;a × &amp;#039;b&amp;quot;&lt;br /&gt;
  show &amp;quot;p ≼ p&amp;quot; by (cases p) (auto intro!: menor_ig_snd refl)&lt;br /&gt;
next&lt;br /&gt;
  fix p q r :: &amp;quot;&amp;#039;a × &amp;#039;b&amp;quot;&lt;br /&gt;
  assume &amp;quot;p ≼ r&amp;quot; and &amp;quot;r ≼ q&amp;quot;&lt;br /&gt;
  then show &amp;quot;p ≼ q&amp;quot;&lt;br /&gt;
    by (induct p r rule:menor_ig_prod.induct)&lt;br /&gt;
       (auto elim!:menor_ig_prod.cases &lt;br /&gt;
             intro:menor_ig_fst menor_ig_snd trans menor_trans)&lt;br /&gt;
next&lt;br /&gt;
  fix p q :: &amp;quot;&amp;#039;a × &amp;#039;b&amp;quot;&lt;br /&gt;
  assume &amp;quot;p ≼ q&amp;quot; and &amp;quot;q ≼ p&amp;quot;&lt;br /&gt;
  then show &amp;quot;p = q&amp;quot;&lt;br /&gt;
    by (induct p q rule:menor_ig_prod.induct)&lt;br /&gt;
       (auto elim!:menor_ig_prod.cases &lt;br /&gt;
             elim:asimetrica &lt;br /&gt;
             intro:antisim &lt;br /&gt;
             simp:irrefl)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section {* Ámbitos (&amp;quot;Locales&amp;quot;) *}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Un orden es una estructura con una relación reflexiva, transitiva y&lt;br /&gt;
  antisimétrica. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
locale Orden =&lt;br /&gt;
  fixes menor_ig :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ bool&amp;quot;  (infix &amp;quot;⊑&amp;quot; 50)&lt;br /&gt;
  assumes refl: &amp;quot;x ⊑ x&amp;quot;&lt;br /&gt;
      and trans: &amp;quot;x ⊑ y ⟹ y ⊑ z ⟹ x ⊑ z&amp;quot;&lt;br /&gt;
      and antisim: &amp;quot;x ⊑ y ⟹ y ⊑ x ⟹ x = y&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
    Los teoremas se diferencian por el nombre y el ámbito. Por ejemplo,&lt;br /&gt;
    refl: ?x ≼ ?x&lt;br /&gt;
    Orden.refl: Orden ?menor_ig ⟹ ?menor_ig ?x ?x&lt;br /&gt;
    Orden_def: Orden ?menor_ig ≡&lt;br /&gt;
               (∀x. ?menor_ig x x) ∧&lt;br /&gt;
               (∀x y z. ?menor_ig x y ⟶ ?menor_ig y z ⟶ ?menor_ig x z) ∧&lt;br /&gt;
               (∀x y. ?menor_ig x y ⟶ ?menor_ig y x ⟶ x = y)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
thm refl&lt;br /&gt;
thm Orden.refl&lt;br /&gt;
thm Orden_def&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Un orden lineal es un orden en el que todos los pares de elementos son &lt;br /&gt;
  comparables. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
locale OrdenLineal = Orden +&lt;br /&gt;
  assumes lineal: &amp;quot;x ⊑ y ∨ y ⊑ x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Los boooleanos está ordenados con el condicional.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
interpretation Orden_imp: Orden &amp;quot;op ⟶&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  fix P show &amp;quot;P ⟶ P&amp;quot; by blast&lt;br /&gt;
next&lt;br /&gt;
  fix P Q R show &amp;quot;P ⟶ Q ⟹ Q ⟶ R ⟹ P ⟶ R&amp;quot; by blast&lt;br /&gt;
next&lt;br /&gt;
  fix P Q show &amp;quot;P ⟶ Q ⟹ Q ⟶ P ⟹ P = Q&amp;quot; by blast&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
thm dvd.order_trans&lt;br /&gt;
thm dvd.less_le_trans&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Los naturales con la relación de divisibilidad es un conjunto ordenado.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
interpretation Orden_dvd: Orden &amp;quot;op dvd :: nat ⇒ nat ⇒ bool&amp;quot;&lt;br /&gt;
proof qed (auto intro: dvd_refl dvd_trans dvd_antisym)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ámbito de las funciones monótonas (ver la página 12 del tutorial de&lt;br /&gt;
  locales). &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
locale Mono =&lt;br /&gt;
  le1: Orden le1 +&lt;br /&gt;
  le2: Orden le2 &lt;br /&gt;
    for le1 (infix &amp;quot;⊑\&amp;lt;^isub&amp;gt;1&amp;quot; 50) and le2 (infix &amp;quot;⊑\&amp;lt;^isub&amp;gt;2&amp;quot; 50) +&lt;br /&gt;
  fixes f :: &amp;quot;&amp;#039;a ⇒ &amp;#039;b&amp;quot;&lt;br /&gt;
  assumes mono: &amp;quot;x ⊑\&amp;lt;^isub&amp;gt;1 y ⟹ f(x) ⊑\&amp;lt;^isub&amp;gt;2 f(y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Si f es monótona, x ⊑\&amp;lt;^isub&amp;gt;1 y e y ⊑\&amp;lt;^isub&amp;gt;1 z, entonces f(x) ⊑\&amp;lt;^isub&amp;gt;2 f(z).&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma (in Mono) mono_trans: &lt;br /&gt;
  assumes &amp;quot;x ⊑\&amp;lt;^isub&amp;gt;1 y&amp;quot; and &amp;quot;y ⊑\&amp;lt;^isub&amp;gt;1 z&amp;quot; &lt;br /&gt;
  shows &amp;quot;f(x) ⊑\&amp;lt;^isub&amp;gt;2 f(z)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;x ⊑\&amp;lt;^isub&amp;gt;1 z&amp;quot; using assms and le1.trans by blast&lt;br /&gt;
  thus &amp;quot;f(x) ⊑\&amp;lt;^isub&amp;gt;2 f(z)&amp;quot; using mono by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El teorema generado se llama Mono.mono_trans.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
thm Mono.mono_trans&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  En el contexto Mono el nombre es mono_trans.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
context Mono begin thm mono_trans end&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El predicado `ser par&amp;#039; es un operador monótono entre los naturales con la&lt;br /&gt;
  relación de divisibilidad y los booleanos con el condicional; es decir, &lt;br /&gt;
     x dvd y ⟹ 2 dvd x ⟶ 2 dvd y&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
interpretation Mono &amp;quot;op dvd&amp;quot; &amp;quot;op ⟶&amp;quot; &amp;quot;λn::nat. 2 dvd n&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  fix x y :: nat &lt;br /&gt;
  show &amp;quot;x dvd y ⟹ 2 dvd x ⟶ 2 dvd y&amp;quot;&lt;br /&gt;
    proof &lt;br /&gt;
      assume &amp;quot;x dvd y&amp;quot; and &amp;quot;2 dvd x&amp;quot;&lt;br /&gt;
      thus &amp;quot;2 dvd y&amp;quot; using dvd.order_trans by blast&lt;br /&gt;
    qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Demostraciones estructuradas: inducción y encadenamiento *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
    El siguiente ejemplo se encuentra en Wenzel2006 pp. 3--5 y el código&lt;br /&gt;
    en Isar_Example/Puzzle.thy. Una demostración más actualizada se&lt;br /&gt;
    encuentra en Nipkow2009 p.1 basada en la de Tao2006 pp. 34--36. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem identity1: &lt;br /&gt;
  fixes f :: &amp;quot;nat ⇒ nat&amp;quot;&lt;br /&gt;
  assumes fff: &amp;quot;⋀n. f(f(n)) &amp;lt; f(Suc(n))&amp;quot;&lt;br /&gt;
  shows &amp;quot;f(n) = n&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { fix m n have key: &amp;quot;n ≤ m ⟹ n ≤ f(m)&amp;quot;&lt;br /&gt;
    proof(induct n arbitrary: m)&lt;br /&gt;
      case 0 show ?case by simp&lt;br /&gt;
    next&lt;br /&gt;
      case (Suc n)&lt;br /&gt;
      have HI1: &amp;quot;⋀k. n ≤ k ⟹ n ≤ f k&amp;quot; using Suc by simp&lt;br /&gt;
      have HI2: &amp;quot;Suc n ≤ m&amp;quot; using Suc by simp&lt;br /&gt;
      hence &amp;quot;m ≠ 0&amp;quot; by simp&lt;br /&gt;
      then obtain k where [simp]: &amp;quot;m = Suc k&amp;quot; by (metis not0_implies_Suc)&lt;br /&gt;
      have &amp;quot;n ≤ k&amp;quot; using HI2 by simp&lt;br /&gt;
      have &amp;quot;n ≤ f(k)&amp;quot; using Suc by simp&lt;br /&gt;
      hence &amp;quot;n ≤ f(f(k))&amp;quot; using Suc by simp&lt;br /&gt;
      also have &amp;quot;… &amp;lt; f(m)&amp;quot; using fff by simp&lt;br /&gt;
      finally show ?case by simp&lt;br /&gt;
    qed }&lt;br /&gt;
  hence &amp;quot;⋀n. n ≤ f(n)&amp;quot; by simp&lt;br /&gt;
  hence &amp;quot;⋀n. f(n) &amp;lt; f(Suc n)&amp;quot; by(metis fff order_le_less_trans)&lt;br /&gt;
  hence &amp;quot;f(n) &amp;lt; n+1&amp;quot; by (metis fff lift_Suc_mono_less_iff[of f] Suc_eq_plus1)&lt;br /&gt;
  with `n ≤ f(n)` show &amp;quot;f n = n&amp;quot; by arith&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Un ejemplo elemental de álgebra *}&lt;br /&gt;
&lt;br /&gt;
subsection {* Definición de clases *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Un semigrupo es una estructura compuesta por un conjunto A y una&lt;br /&gt;
  operación binaria en A.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
class semigrupo =&lt;br /&gt;
  fixes mult :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a&amp;quot; (infixl &amp;quot;⊗&amp;quot; 70) &lt;br /&gt;
  assumes asoc: &amp;quot;(x ⊗ y) ⊗ z = x ⊗ (y ⊗ z )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
subsection {* Instanciación de clases *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Los enteros con la suma forman un semigrupo.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
instantiation int :: semigrupo &lt;br /&gt;
begin &lt;br /&gt;
definition &lt;br /&gt;
  mult_int_def: &amp;quot;i ⊗ j = i + (j ::int)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
instance proof &lt;br /&gt;
  fix i j k :: &amp;quot;int&amp;quot; &lt;br /&gt;
  have &amp;quot;(i + j ) + k = i + (j + k)&amp;quot; by simp &lt;br /&gt;
  thus &amp;quot;(i ⊗ j ) ⊗ k = i ⊗ (j ⊗ k)&amp;quot; unfolding mult_int_def . &lt;br /&gt;
qed &lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Los naturales con la suma forman un semigrupo.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
instantiation nat :: semigrupo &lt;br /&gt;
begin &lt;br /&gt;
primrec mult_nat where &lt;br /&gt;
  &amp;quot;(0::nat) ⊗ n = n&amp;quot; &lt;br /&gt;
| &amp;quot;Suc m ⊗ n = Suc (m ⊗ n)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
instance proof &lt;br /&gt;
  fix m n q :: &amp;quot;nat&amp;quot; &lt;br /&gt;
  show &amp;quot;m ⊗ n ⊗ q = m ⊗ (n ⊗ q)&amp;quot; &lt;br /&gt;
    by (induct m) auto&lt;br /&gt;
qed &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subsection {* Instancias recursivas *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Si (A,⊗) y (B,⊗) son semigrupos, entonces ((A×B,⊗), donde el producto&lt;br /&gt;
  se define por &lt;br /&gt;
     (x,y)⊗(x&amp;#039;,y&amp;#039;) = (x⊗x&amp;#039;,y⊗y&amp;#039;),&lt;br /&gt;
  es un semigrupo.&lt;br /&gt;
*}&lt;br /&gt;
 &lt;br /&gt;
instantiation prod :: (semigrupo, semigrupo) semigrupo &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
definition &lt;br /&gt;
  mult_prod_def : &amp;quot;p1 ⊗ p2 = (fst p1 ⊗ fst p2, snd p1 ⊗ snd p2)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
instance proof &lt;br /&gt;
  fix p1 p2 p3 :: &amp;quot;&amp;#039;a::semigrupo × &amp;#039;b::semigrupo&amp;quot; &lt;br /&gt;
  show &amp;quot;(p1 ⊗ p2) ⊗ p3 = p1 ⊗ (p2 ⊗ p3)&amp;quot; &lt;br /&gt;
    unfolding mult_prod_def by (simp add: asoc) &lt;br /&gt;
qed &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subsection {* Subclases *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Un monoide izquierdo es un semigrupo con elemento neutro por la izquierda. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
class monoideI = semigrupo + &lt;br /&gt;
  fixes neutro :: &amp;quot;&amp;#039;a&amp;quot; (&amp;quot;1&amp;quot;) &lt;br /&gt;
  assumes neutroI: &amp;quot;1 ⊗ x = x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Los naturales y los enteros con la suma forman monoides por la izquierda.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
instantiation nat and int :: monoideI &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
definition &lt;br /&gt;
  neutro_nat_def : &amp;quot;1 = (0::nat)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
definition &lt;br /&gt;
  neutro_int_def : &amp;quot;1 = (0::int)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
instance proof &lt;br /&gt;
  fix n :: nat &lt;br /&gt;
  show &amp;quot;1 ⊗ n = n&amp;quot; unfolding neutro_nat_def by simp&lt;br /&gt;
next &lt;br /&gt;
  fix k :: int &lt;br /&gt;
  show &amp;quot;1 ⊗ k = k&amp;quot; unfolding neutro_int_def mult_int_def by simp &lt;br /&gt;
qed &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El producto de dos monoides por la izquierda es un monoide por la&lt;br /&gt;
  izquierda, donde el neutro es el par formado por los elementos neutros.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
instantiation prod :: (monoideI , monoideI) monoideI &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
definition &lt;br /&gt;
  neutro_prod_def : &amp;quot;1 = (1, 1)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
instance proof &lt;br /&gt;
  fix p :: &amp;quot;&amp;#039;a::monoideI × &amp;#039;b::monoideI&amp;quot; &lt;br /&gt;
  show &amp;quot;1 ⊗ p = p&amp;quot; &lt;br /&gt;
    unfolding neutro_prod_def mult_prod_def by (simp add: neutroI) &lt;br /&gt;
qed &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Un monoide es un monoide por la izquierda cuyo elemento neutro por la&lt;br /&gt;
  izquierda lo es también por la derecha.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
class monoide = monoideI + &lt;br /&gt;
  assumes neutro: &amp;quot;x ⊗ 1 = x&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Los naturales y los enteros con la suma son monoides.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
instantiation nat and int :: monoide &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
instance proof &lt;br /&gt;
  fix n :: nat &lt;br /&gt;
  show &amp;quot;n ⊗ 1 = n&amp;quot; &lt;br /&gt;
    unfolding neutro_nat_def by (induct n) simp_all &lt;br /&gt;
next &lt;br /&gt;
  fix k :: int &lt;br /&gt;
  show &amp;quot;k ⊗ 1 = k&amp;quot; &lt;br /&gt;
    unfolding neutro_int_def mult_int_def by simp &lt;br /&gt;
qed&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El producto de dos monoides es un monoide.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
instantiation prod :: (monoide, monoide) monoide &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
instance proof &lt;br /&gt;
  fix p :: &amp;quot;&amp;#039;a::monoide × &amp;#039;b::monoide&amp;quot; &lt;br /&gt;
  show &amp;quot;p ⊗ 1 = p&amp;quot; &lt;br /&gt;
    unfolding neutro_prod_def mult_prod_def by (simp add: neutro) &lt;br /&gt;
qed &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Un grupo es un monoide por la izquierda tal que todo elemento posee un&lt;br /&gt;
  inverso por la izquierda.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
class grupo = monoideI + &lt;br /&gt;
  fixes inverso :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a&amp;quot; (&amp;quot;(_⁻)&amp;quot; [1000] 999)&lt;br /&gt;
  assumes inversoI: &amp;quot;x⁻ ⊗ x = 1&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Los enteros con la suma forman un grupo.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
instantiation int :: grupo &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
definition&lt;br /&gt;
  inverso_int_def: &amp;quot;i⁻ = -(i::int)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
instance proof &lt;br /&gt;
  fix i :: &amp;quot;int&amp;quot; &lt;br /&gt;
  have &amp;quot;-i + i = 0&amp;quot; by simp &lt;br /&gt;
  then show &amp;quot;i⁻ ⊗ i = 1&amp;quot; &lt;br /&gt;
    unfolding mult_int_def neutro_int_def inverso_int_def . &lt;br /&gt;
qed &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
section {* Las clases de tipos como ámbitos *}&lt;br /&gt;
&lt;br /&gt;
subsection {* Razonamiento abstracto *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  En los grupos se verifica la propiedad cancelativa por la izquierda, i.e.&lt;br /&gt;
     x ⊗ y = x ⊗ z ⟷ y = z&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma (in grupo) cancelativa_izq: &amp;quot;x ⊗ y = x ⊗ z ⟷ y = z&amp;quot; &lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;x ⊗ y = x ⊗ z&amp;quot;&lt;br /&gt;
  hence &amp;quot;x⁻ ⊗ (x ⊗ y) = x⁻ ⊗ (x ⊗ z)&amp;quot; by simp &lt;br /&gt;
  hence &amp;quot;(x⁻ ⊗ x) ⊗ y = (x⁻ ⊗ x) ⊗ z&amp;quot; using asoc by simp &lt;br /&gt;
  thus &amp;quot;y = z&amp;quot; using neutroI and inversoI by simp&lt;br /&gt;
next &lt;br /&gt;
  assume &amp;quot;y = z&amp;quot; &lt;br /&gt;
  thus &amp;quot;x ⊗ y = x ⊗ z&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
thm Tema8.grupo.cancelativa_izq&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se genera el teorema Tema8b.grupo.cancelativa_izq&lt;br /&gt;
     class.grupo ?mult ?neutro ?inverso ⟹ &lt;br /&gt;
     (?mult ?x ?y = ?mult ?x ?z) = (?y = ?z)&lt;br /&gt;
&lt;br /&gt;
  El teorema se aplica automáticamente a todas las instancias de la clase&lt;br /&gt;
  grupo. Por ejemplo, a los enteros.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Definiciones derivadas *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  En los monoides se define la potencia natural por&lt;br /&gt;
  · x^0=1&lt;br /&gt;
  · x^{n+1}=x*x^n&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
primrec (in monoide) potencia_nat :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a&amp;quot; where &lt;br /&gt;
  &amp;quot;potencia_nat 0 x = 1&amp;quot;  &lt;br /&gt;
| &amp;quot;potencia_nat (Suc n) x = x ⊗ potencia_nat n x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
subsection {* Analogía entre clases y functores *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Las listas con la operación de concatenación y la lista vacía como elemento&lt;br /&gt;
  neutro forman un monoide.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
interpretation list_monoide: monoide &amp;quot;append&amp;quot; &amp;quot;[]&amp;quot;&lt;br /&gt;
  proof qed auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se pueden aplicar propiedades de los monides a las listas. Por ejemplo,&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;append [] xs = xs&amp;quot;&lt;br /&gt;
by simp&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  (repite n xs) es la lista obtenida concatenando n veces la lista xs. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
primrec repite :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where &lt;br /&gt;
  &amp;quot;repite 0 _ = []&amp;quot;&lt;br /&gt;
| &amp;quot;repite (Suc n) xs = xs @ repite n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Las listas con la operación de concatenación y la lista vacía como elemento&lt;br /&gt;
  neutro forman un monoide. Además, la potencia natural se intepreta como&lt;br /&gt;
  repite. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
interpretation list_monoide: monoide &amp;quot;append&amp;quot; &amp;quot;[]&amp;quot; where &lt;br /&gt;
  &amp;quot;monoide.potencia_nat append [] = repite&amp;quot; &lt;br /&gt;
proof -&lt;br /&gt;
  interpret monoide &amp;quot;append&amp;quot; &amp;quot;[]&amp;quot; .. &lt;br /&gt;
  show &amp;quot;monoide.potencia_nat append [] = repite&amp;quot; &lt;br /&gt;
  proof &lt;br /&gt;
    fix n &lt;br /&gt;
    show &amp;quot;monoide.potencia_nat append [] n = repite n&amp;quot; &lt;br /&gt;
      by (induct n) auto &lt;br /&gt;
  qed &lt;br /&gt;
qed intro_locales&lt;br /&gt;
&lt;br /&gt;
subsection {* Relaciones de subclase adicionales *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Los grupos son monoides.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subclass (in grupo) monoide &lt;br /&gt;
proof &lt;br /&gt;
  fix x &lt;br /&gt;
  have &amp;quot;x⁻ ⊗ (x ⊗ 1) = x⁻ ⊗ (x ⊗ (x⁻ ⊗ x))&amp;quot; using inversoI by simp&lt;br /&gt;
  also have &amp;quot;... = (x⁻ ⊗ x) ⊗ (x⁻ ⊗ x)&amp;quot; using asoc [symmetric] by simp&lt;br /&gt;
  also have &amp;quot;... = 1 ⊗ (x⁻ ⊗ x)&amp;quot; using inversoI by simp&lt;br /&gt;
  also have &amp;quot;... = x⁻ ⊗ x&amp;quot; using neutroI by simp&lt;br /&gt;
  finally have &amp;quot;x⁻ ⊗ (x ⊗ 1) = x⁻ ⊗ x&amp;quot; . &lt;br /&gt;
  thus &amp;quot;x ⊗ 1 = x&amp;quot; using cancelativa_izq by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La potencia entera en los grupos se define a partir de la potencia natural&lt;br /&gt;
  como sigue:&lt;br /&gt;
  · x^k = x^k si k ≥ 0&lt;br /&gt;
  · x^k = (x^{-k})^{-1}, en caso contrario.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
definition (in grupo) potencia_entera :: &amp;quot;int ⇒ &amp;#039;a ⇒ &amp;#039;a&amp;quot; where &lt;br /&gt;
  &amp;quot;potencia_entera k x = &lt;br /&gt;
   (if k &amp;gt;= 0 &lt;br /&gt;
    then potencia_nat (nat k) x &lt;br /&gt;
    else (potencia_nat (nat (- k)) x)⁻)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
section {* Otras cuestiones *}&lt;br /&gt;
&lt;br /&gt;
subsection {* Clases de tipos y generación de código *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo para evaluar.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
definition ejemplo :: int where &lt;br /&gt;
  &amp;quot;ejemplo = potencia_entera 10 (-2)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Al evaluar la siguiente expresión se obtiene como valor -20.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;ejemplo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de generación de código Haskell.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
export_code ejemplo&lt;br /&gt;
  in Haskell file &amp;quot;codigoHaskell/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El código Haskell se exporta en el fichero codigoHaskell/Tema8b.hs&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Inspección del universo de las clases de tipos *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se puede obtener la lista de las clases con print_classes. Por&lt;br /&gt;
  ejemplo, evaluando la siguiente expresión se obtiene&lt;br /&gt;
      class semigrupo:&lt;br /&gt;
        supersort: type&lt;br /&gt;
        parameters:&lt;br /&gt;
          mult :: &amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a&lt;br /&gt;
        instances:&lt;br /&gt;
          int :: semigrupo, nat :: semigrupo,&lt;br /&gt;
            prod :: (semigrupo, semigrupo) semigrupo&lt;br /&gt;
      &lt;br /&gt;
      class monoideI:&lt;br /&gt;
        supersort: semigrupo&lt;br /&gt;
        parameters:&lt;br /&gt;
          neutro :: &amp;#039;a&lt;br /&gt;
        instances:&lt;br /&gt;
          int :: monoideI, nat :: monoideI, prod :: (monoideI, monoideI) monoideI&lt;br /&gt;
      &lt;br /&gt;
      class monoide:&lt;br /&gt;
        supersort: monoideI&lt;br /&gt;
        instances: int :: monoide, nat :: monoide, prod :: (monoide, monoide) monoide&lt;br /&gt;
      &lt;br /&gt;
      class grupo:&lt;br /&gt;
        supersort: monoide&lt;br /&gt;
        parameters:&lt;br /&gt;
          inverso :: &amp;#039;a ⇒ &amp;#039;a&lt;br /&gt;
        instances: int :: grupo&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
print_classes&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se puede obtener el grafo de las clases con class_deps.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
class_deps&lt;br /&gt;
&lt;br /&gt;
section {* Sledgehammer *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Demostración con Sledgehammer de la paradoja del bebedor: ``hay una persona&lt;br /&gt;
  en el bar, tal que si dicha persona bebe todos beben&amp;#039;&amp;#039;.&lt;br /&gt;
*}&lt;br /&gt;
lemma &amp;quot;∃x. P x ⟶ (∀y. P y)&amp;quot;&lt;br /&gt;
by metis&lt;br /&gt;
&lt;br /&gt;
section {* Refute *}&lt;br /&gt;
&lt;br /&gt;
subsection {* Refutaciones en lógica proposicional *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de refutación proposicional.&lt;br /&gt;
*}&lt;br /&gt;
lemma &amp;quot;P ⟷ Q&amp;quot;&lt;br /&gt;
refute&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El resultado obtenido es&lt;br /&gt;
      *** Model found: ***&lt;br /&gt;
      empty universe (no type variables in term)&lt;br /&gt;
      Q: True&lt;br /&gt;
      P: False&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsubsection {* Refutaciones en lógica de predicados *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de refutación en lógica de primer orden.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(∃x. P x) ⟶ (∀x. P x)&amp;quot;&lt;br /&gt;
refute&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El resultado obtenido es&lt;br /&gt;
      *** Model found: ***&lt;br /&gt;
      Size of types: &amp;#039;a: 2&lt;br /&gt;
      P: {(a0, True), (a1, False)}&lt;br /&gt;
  que da un contraejemplo cuyo universo es {a₀, a₁} y sólo se verifica&lt;br /&gt;
  en a₀. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de refutación en lógica de primer orden con relaciones binarias.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(∀x. ∃y. P x y) ⟶ (∃y. ∀x. P x y)&amp;quot;&lt;br /&gt;
refute&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El resultado obtenido es&lt;br /&gt;
      *** Model found: ***&lt;br /&gt;
      Size of types: &amp;#039;a: 2, &amp;#039;b: 2&lt;br /&gt;
      P: {(a0, {(b0, True), (b1, False)}), (a1, {(b0, False), (b1, True)})}&lt;br /&gt;
  que da un contraejemplo cuyo universo es {a₀, a₁, b₀, b₁} y P sólo se&lt;br /&gt;
  verifica en {(a₀,b₁),(a₁,b₀)}. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Conjetura: Toda relación reflexiva y simétrica es transitiva. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;⟦ ∀x. P x x; ∀x y. P x y ⟶ P y x ⟧ ⟹ P x y ⟶ P y z ⟶ P x z&amp;quot;&lt;br /&gt;
refute&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El resultado obtenido es&lt;br /&gt;
      *** Model found: ***&lt;br /&gt;
      Size of types: &amp;#039;a: 3&lt;br /&gt;
      z: a0&lt;br /&gt;
      y: a2&lt;br /&gt;
      x: a1&lt;br /&gt;
      P: {(a0, {(a0, True), (a1, False), (a2, True)}), &lt;br /&gt;
                (a1, {(a0, False), (a1, True), (a2, True)}), &lt;br /&gt;
                (a2, {(a0, True), (a1, True), (a2, True)})}&lt;br /&gt;
  que da un contraejemplo cuyo universo es {a₀, a₁, a₂} y P sólo se&lt;br /&gt;
  verifica en &lt;br /&gt;
     {(a₀,a₀),(a₀,a₁),(a₀,a₂),(a₁,a₀),(a₁,a₁),(a₂,a₀),(a₂,a₂)}.&lt;br /&gt;
  Entonces P es reflexiva y simétrica, pero no es transitiva porque &lt;br /&gt;
  se tiene que P(a₂,a₀) y P(a₀,a₁) y no se verifica P(a₂,a₁).&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsubsection {* Refutaciones con funciones e igualdad *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  En los siguientes ejemplos se consideran símbolos de función y el de&lt;br /&gt;
  igualdad.&lt;br /&gt;
&lt;br /&gt;
  Ejemplo de fallo en la refutación de la paradoja del mentiroso.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;∃x. f x = g x ⟶ f = g&amp;quot;&lt;br /&gt;
refute [maxsize=4]&lt;br /&gt;
apply (auto simp add: ext)&lt;br /&gt;
done &lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Refutación de una versión incorrecta de la paradoja del bebedor.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(∃x. f x = g x) ⟶ f = g&amp;quot;&lt;br /&gt;
refute&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se obtiene&lt;br /&gt;
      *** Model found: ***&lt;br /&gt;
      Size of types: &amp;#039;a: 2, &amp;#039;b: 2&lt;br /&gt;
      g: {(a0, b1), (a1, b1)}&lt;br /&gt;
      f: {(a0, b0), (a1, b1)}&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
    La composición de funciones es conmutativa.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;f (g x) = g (f x)&amp;quot;&lt;br /&gt;
refute&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se obtiene&lt;br /&gt;
      *** Model found: ***&lt;br /&gt;
      Size of types: &amp;#039;a: 2&lt;br /&gt;
      x: a0&lt;br /&gt;
      g: {(a0, a1), (a1, a0)}&lt;br /&gt;
      f: {(a0, a1), (a1, a1)}&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Toda función suprayectiva tiene inversa.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(∀y. ∃x. y = f x) ⟶ (∃g. ∀x. g (f x) = x)&amp;quot;&lt;br /&gt;
refute&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se obtiene&lt;br /&gt;
      *** Model found: ***&lt;br /&gt;
      Size of types: &amp;#039;a: 1, &amp;#039;b: 2&lt;br /&gt;
      f: {(b0, a0), (b1, a0)}&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Toda función que tiene inversa es suprayectiva.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(∃g. ∀x. g (f x) = x) ⟶ (∀y. ∃x. y = f x)&amp;quot;&lt;br /&gt;
refute&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se obtiene&lt;br /&gt;
      *** Model found: ***&lt;br /&gt;
      Size of types: &amp;#039;b: 1, &amp;#039;a: 2&lt;br /&gt;
      f: {(b0, a1)}&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Ejemplos con listas *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La concatenación de listas es conmutativa.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;xs @ ys = ys @ xs&amp;quot;&lt;br /&gt;
refute&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se obtiene&lt;br /&gt;
      *** Model found: ***&lt;br /&gt;
      Size of types: &amp;#039;a list: 3, &amp;#039;a: 2&lt;br /&gt;
      ys: [a0]&lt;br /&gt;
      xs: [a1]&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
section {* Nitpick *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Notas:&lt;br /&gt;
  · Nitpick es un generador de contraejemplos.&lt;br /&gt;
  · Los ejemplos están elegidos de Nitpick_Examples.thy. &lt;br /&gt;
  · Para los ejemplos de Nitpick se deshabilita el QuicCheck automático.&lt;br /&gt;
  · Nitpick va a usar MiniSATJNI con una hebra. &lt;br /&gt;
*} &lt;br /&gt;
nitpick_params [sat_solver = MiniSat_JNI, max_threads = 1]&lt;br /&gt;
&lt;br /&gt;
subsection {* Refutación proposicional *}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;P ⟷ Q&amp;quot;&lt;br /&gt;
nitpick&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Se obtiene&lt;br /&gt;
      Nitpick found a counterexample:&lt;br /&gt;
        Free variables:&lt;br /&gt;
          P = True&lt;br /&gt;
          Q = False&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Skolemizaciónn *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Conjetura: Las funciones que tienen inversa son suprayectivas. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;∃g. ∀x. g (f x) = x ⟹ ∀y. ∃x. y = f x&amp;quot;&lt;br /&gt;
nitpick&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Se obtiene &lt;br /&gt;
      Nitpick found a counterexample for card &amp;#039;a = 2 and card &amp;#039;b = 1:&lt;br /&gt;
      &lt;br /&gt;
        Free variable:&lt;br /&gt;
          f = (λx. _)(b\&amp;lt;^bsub&amp;gt;1\&amp;lt;^esub&amp;gt; := a\&amp;lt;^bsub&amp;gt;1\&amp;lt;^esub&amp;gt;)&lt;br /&gt;
        Skolem constants:&lt;br /&gt;
          g = (λx. _)(a\&amp;lt;^bsub&amp;gt;1\&amp;lt;^esub&amp;gt; := b\&amp;lt;^bsub&amp;gt;1\&amp;lt;^esub&amp;gt;, a\&amp;lt;^bsub&amp;gt;2\&amp;lt;^esub&amp;gt; := b\&amp;lt;^bsub&amp;gt;1\&amp;lt;^esub&amp;gt;)&lt;br /&gt;
          y = a\&amp;lt;^bsub&amp;gt;2\&amp;lt;^esub&amp;gt;&lt;br /&gt;
  Significa que que Nitpick ha encontrado un contraejemplo donde&lt;br /&gt;
  · A={a\&amp;lt;^bsub&amp;gt;1\&amp;lt;^esub&amp;gt;,a\&amp;lt;^bsub&amp;gt;2\&amp;lt;^esub&amp;gt;}&lt;br /&gt;
  · B={b\&amp;lt;^bsub&amp;gt;1\&amp;lt;^esub&amp;gt;}&lt;br /&gt;
  · f: B → A tal que f(b\&amp;lt;^sub&amp;gt;1)=a\&amp;lt;^sub&amp;gt;1&lt;br /&gt;
  Entonces, f tiene inversa (la función g: A → B tal que g(a\&amp;lt;^sub&amp;gt;1)=b\&amp;lt;^sub&amp;gt;1 y&lt;br /&gt;
  g(a\&amp;lt;^sub&amp;gt;2)=b\&amp;lt;^sub&amp;gt;1), pero no es suprayectiva (el elemento a\&amp;lt;^sub&amp;gt;2 no tiene antiimagen).&lt;br /&gt;
*} &lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_6&amp;diff=333</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_6&amp;diff=333"/>
		<updated>2021-07-24T15:21:41Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Texto reemplazado: «&amp;quot;isar&amp;quot;» por «&amp;quot;isabelle&amp;quot;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* 6ª relación de ejercicios *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Número de elementos válidos *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     cuentaP :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ nat&amp;quot;&lt;br /&gt;
  tal que (cuentaP Q xs) es el número de elementos de la lista xs que&lt;br /&gt;
  satisfacen el predicado Q. Por ejemplo,   &lt;br /&gt;
     cuentaP (λx. 2&amp;lt;x) [1,3,4,0,5] = 3&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
primrec cuentaP :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;cuentaP Q [] = 0&amp;quot;&lt;br /&gt;
| &amp;quot;cuentaP Q (x#xs) = (if Q x then 1 + cuentaP Q xs else cuentaP Q xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar o refutar:&lt;br /&gt;
     cuentaP P (xs @ ys) = cuentaP P xs + cuentaP P ys*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
Se puede demostrar tal como se indica a continuación&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;cuentaP P (xs @ ys) = cuentaP P xs + cuentaP P ys&amp;quot;&lt;br /&gt;
by (induct xs arbitrary: ys) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar que el número de elementos de una lista que&lt;br /&gt;
  cumplen una determinada propiedad es el mismo que el de esa lista&lt;br /&gt;
  invertida. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
Para demostrar el resultado propuesto en este ejercicio&lt;br /&gt;
he necesitado formular y demostrar un lema auxiliar.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma cuentaP_almoh_snoc: &amp;quot;cuentaP Q (x#xs)= cuentaP Q (snoc xs x)&amp;quot;(is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P []&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
  fix x xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs&amp;quot;&lt;br /&gt;
  thus &amp;quot;?P (x#xs)&amp;quot;&lt;br /&gt;
  proof (cases &amp;quot;Q x&amp;quot;)&lt;br /&gt;
    case True thus &amp;quot;?thesis&amp;quot; using HI by auto&lt;br /&gt;
    next&lt;br /&gt;
    case False thus &amp;quot;?thesis&amp;quot; using HI by auto&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
En la demostración de este resultado, además del lema&lt;br /&gt;
auxiliar anterior, he debido introducir en las líneas&lt;br /&gt;
2 y 10 una proposición teoremática adicional sin la&lt;br /&gt;
cual el sistema no me aceptaba el razonamiento indicado.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;cuentaP Q xs = cuentaP Q (inversa xs)&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P []&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
  fix x xs&lt;br /&gt;
  assume 1: &amp;quot;?P xs&amp;quot;&lt;br /&gt;
  thus &amp;quot;?P (x#xs)&amp;quot;&lt;br /&gt;
  proof (cases &amp;quot;Q x&amp;quot;)&lt;br /&gt;
    case True thus &amp;quot;?thesis&amp;quot;&lt;br /&gt;
    proof -&lt;br /&gt;
    have 2: &amp;quot;snoc (inversa xs) x = (inversa xs) @ [x]&amp;quot; by (rule snoc_append)&lt;br /&gt;
    from True have 3: &amp;quot;cuentaP Q (x#xs) = 1 + cuentaP Q xs&amp;quot; by auto&lt;br /&gt;
    also have 4: &amp;quot;... = 1 + cuentaP Q (inversa xs)&amp;quot; using 1 by auto&lt;br /&gt;
    also have 5: &amp;quot;... = cuentaP Q (x#(inversa xs))&amp;quot; using 1 and True by auto&lt;br /&gt;
    also have 6: &amp;quot;... = cuentaP Q (snoc (inversa xs) x)&amp;quot; by (rule cuentaP_almoh_snoc)&lt;br /&gt;
    also have 7: &amp;quot;... = cuentaP Q ((inversa xs) @ [x])&amp;quot; using 2 by auto&lt;br /&gt;
    also have 8: &amp;quot;... = cuentaP Q (inversa (x#xs))&amp;quot; by auto&lt;br /&gt;
    finally show 9: &amp;quot;cuentaP Q (x#xs) = cuentaP Q (inversa (x#xs))&amp;quot; by auto&lt;br /&gt;
    qed&lt;br /&gt;
    next&lt;br /&gt;
    case False thus &amp;quot;?thesis&amp;quot;&lt;br /&gt;
    proof -&lt;br /&gt;
    have 10: &amp;quot;snoc (inversa xs) x = (inversa xs) @ [x]&amp;quot; by (rule snoc_append)&lt;br /&gt;
    from False have 11: &amp;quot;cuentaP Q (x#xs) =cuentaP Q xs&amp;quot;  by auto&lt;br /&gt;
    also have 12: &amp;quot;... = cuentaP Q (inversa xs)&amp;quot; using 1 by auto&lt;br /&gt;
    also have 13: &amp;quot;... = cuentaP Q (x#(inversa xs))&amp;quot; using 1 and False by auto&lt;br /&gt;
    also have 14: &amp;quot;... = cuentaP Q (snoc (inversa xs) x)&amp;quot; by (rule cuentaP_almoh_snoc)&lt;br /&gt;
    also have 15: &amp;quot;... = cuentaP Q ((inversa xs) @ [x])&amp;quot; using 10 by auto&lt;br /&gt;
    also have 16: &amp;quot;... = cuentaP Q (inversa (x#xs))&amp;quot; by auto&lt;br /&gt;
    finally show 16: &amp;quot;cuentaP Q (x#xs) = cuentaP Q (inversa (x#xs))&amp;quot; by auto&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Encontrar y demostrar una relación entre las funciones&lt;br /&gt;
  filter y  cuentaP. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
Relación: El número de elementos de xs que cumplen la propiedad P será el número de elementos&lt;br /&gt;
que contendrá la lista resultante de aplicar el filtro P sobre xs.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;cuentaP P xs = length (filter P xs)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_5&amp;diff=332</id>
		<title>Relación 5</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_5&amp;diff=332"/>
		<updated>2018-07-16T07:51:51Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Texto reemplazado: «&amp;quot;isar&amp;quot;» por «&amp;quot;isabelle&amp;quot;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* 5ª relación de ejercicios *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_5&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Menor posición válida *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función&lt;br /&gt;
     menorValida :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ nat&amp;quot;&lt;br /&gt;
  tal que (menorValida p xs) es el índice del primer elemento de una&lt;br /&gt;
  lista xs que satisface el predicado  p y es la longitud de xs si&lt;br /&gt;
  ningún elemento satisface el predicado p. Por ejemplo, &lt;br /&gt;
     menorValida (λx. 4&amp;lt;x) [1::nat, 3, 5, 3, 1]     = 2&lt;br /&gt;
     menorValida (λx. 6&amp;lt;x) [1::nat, 3, 5, 3, 1]     = 5&lt;br /&gt;
     menorValida (λx. 1&amp;lt;length x) [[], [1, 2], [3]] = 1&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
primrec menorValida :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;menorValida P [] = 0&amp;quot; &lt;br /&gt;
  | &amp;quot;menorValida P (x#xs) = (if P x then 0 else ((menorValida P xs)+1))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar que menorValida devuelve la longitud de la&lt;br /&gt;
  lista syss ningún elemento satisface el predicado dado.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;menorValida (λx. 6&amp;lt;x) [1::nat, 3, 5, 3, 1] = 5&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar si n es el valor de (menorValida P xs),&lt;br /&gt;
  entonces ninguno de los primeros n elementos de la lista xs verifica&lt;br /&gt;
  la propiedad P. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
{* Una posible opcion inicial es poner un ejemplo en el que no se cumpla&lt;br /&gt;
e intentar sacar un contraejemplo&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;menorValida (λx. 4&amp;lt;x) [1::nat, 2, 3, 4, 7] = 5&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
{* Duda: Utilizando la palabra clave &amp;quot;quickcheck&amp;quot; el sistema avisa de que&lt;br /&gt;
ha encontrado un contraejemplo, pero no muestra nada, ¿ha encontrado&lt;br /&gt;
realmente un contraejemplo? *}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. ¿Cómo se puede relacionar &lt;br /&gt;
    &amp;quot;menorValida (λ x. P x ∨ Q x) xs&amp;quot; &lt;br /&gt;
  con &lt;br /&gt;
    &amp;quot;menorValida P xs&amp;quot; y &amp;quot;menorValida Q xs&amp;quot;? &lt;br /&gt;
  ¿Se puede decir algo parecido con la conjunción de P y Q?  &lt;br /&gt;
  Prueba tus conjeturas.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La relación es la siguiente: La menor posición de los elementos que&lt;br /&gt;
  verifican la propiedad &amp;quot;P ∨ Q&amp;quot; es el mínimo de la menor posición de&lt;br /&gt;
  los elementos que verifican P y de la menor posición de los elementos&lt;br /&gt;
  que verifican Q.  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Si P implica Q, ¿qué relación puede deducirse entre &lt;br /&gt;
  &amp;quot;menorValida P xs&amp;quot; y &amp;quot;menorValida Q xs&amp;quot;?&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_9&amp;diff=330</id>
		<title>Rel 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_9&amp;diff=330"/>
		<updated>2018-07-16T07:51:39Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
theory Relacion_9&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
section {* Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
text {* Los ejercicios de esta relación deben de resolverse usando sólo&lt;br /&gt;
  las reglas básicas de la deducción natural proposicional: &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;
*}&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;
lemma ejercicio_1:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;q⟶r&amp;quot; and &lt;br /&gt;
          3: &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶(q⟶r)&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p⟶q&amp;quot; and  &lt;br /&gt;
          3: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;q⟶r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  &amp;quot;p⟶(q⟶r) ⟹ q⟶(p⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  &amp;quot;p⟶(q⟶r) ⟹ (p⟶q)⟶(p⟶r)&amp;quot;&lt;br /&gt;
oops &lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  &amp;quot;p ⟹ q⟶p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_8:&lt;br /&gt;
  &amp;quot;p⟶(q⟶p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  &amp;quot;p⟶q ⟹ (q⟶r)⟶(p⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  &amp;quot;p⟶(q⟶(r⟶s)) ⟹ r⟶(q⟶(p⟶s))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_11:&lt;br /&gt;
  &amp;quot;(p⟶(q⟶r))⟶((p⟶q)⟶(p⟶r))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  &amp;quot;(p⟶q)⟶r ⟹ p⟶(q⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  &amp;quot;⟦p; q⟧ ⟹ p∧q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  &amp;quot;p∧q ⟹ p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  &amp;quot;p∧q ⟹ q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  &amp;quot;p∧(q∧r) ⟹ (p∧q)∧r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  &amp;quot;(p∧q)∧r ⟹ p∧(q∧r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  &amp;quot;p∧q ⟹ p⟶q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  &amp;quot;(p⟶q)∧(p⟶r) ⟹ p⟶q∧r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  &amp;quot;p⟶q∧r ⟹ (p⟶q)∧(p⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  &amp;quot;p⟶(q⟶r) ⟹ p∧q⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  &amp;quot;p∧q⟶r ⟹ p⟶(q⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  &amp;quot;(p⟶q)⟶r ⟹ p∧q⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_24:&lt;br /&gt;
  &amp;quot;p∧(q⟶r) ⟹ (p⟶q)⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_25:&lt;br /&gt;
  &amp;quot;p ⟹ p∨q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_26:&lt;br /&gt;
  &amp;quot;q ⟹ p∨q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_27:&lt;br /&gt;
  &amp;quot;p∨q ⟹ q∨p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_28:&lt;br /&gt;
  &amp;quot;q⟶r ⟹ p∨q⟶p∨r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_29:&lt;br /&gt;
  &amp;quot;p∨p ⟹ p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_30:&lt;br /&gt;
  &amp;quot;p ⟹ p∨p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_31:&lt;br /&gt;
  &amp;quot;p∨(q∨r) ⟹ (p∨q)∨r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_32:&lt;br /&gt;
  &amp;quot;(p∨q)∨r ⟹ p∨(q∨r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_33:&lt;br /&gt;
  &amp;quot;p∧(q∨r) ⟹ (p∧q)∨(p∧r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_34:&lt;br /&gt;
  &amp;quot;(p∧q)∨(p∧r) ⟹ p∧(q∨r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_35:&lt;br /&gt;
  &amp;quot;p∨(q∧r) ⟹ (p∨q)∧(p∨r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_36:&lt;br /&gt;
  &amp;quot;(p∨q)∧(p∨r) ⟹ p∨(q∧r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_37:&lt;br /&gt;
  &amp;quot;(p⟶r)∧(q⟶r) ⟹ p∨q⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_38:&lt;br /&gt;
  &amp;quot;p∨q⟶r ⟹ (p⟶r)∧(q⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_39:&lt;br /&gt;
  &amp;quot;p ⟹ ¬¬p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_40:&lt;br /&gt;
  &amp;quot;¬p ⟹ p⟶q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_41:&lt;br /&gt;
  &amp;quot;p⟶q ⟹ ¬q⟶¬p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_42:&lt;br /&gt;
  &amp;quot;⟦p∨q; ¬q⟧ ⟹ p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_43:&lt;br /&gt;
  &amp;quot;⟦p∨q; ¬p⟧ ⟹ q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_44:&lt;br /&gt;
  &amp;quot;p∨q ⟹ ¬(¬p∧¬q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_45:&lt;br /&gt;
  &amp;quot;p∧q ⟹ ¬(¬p∨¬q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_46:&lt;br /&gt;
  &amp;quot;¬(p∨q) ⟹ ¬p∧¬q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_47:&lt;br /&gt;
  &amp;quot;¬p∧¬q ⟹ ¬(p∨q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_48:&lt;br /&gt;
  &amp;quot;¬p∨¬q ⟹ ¬(p∧q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_49:&lt;br /&gt;
  &amp;quot;¬(p∧¬p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_50:&lt;br /&gt;
  &amp;quot;p∧¬p ⟹ q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_51:&lt;br /&gt;
  &amp;quot;¬¬p ⟹ p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_52:&lt;br /&gt;
  &amp;quot;p∨¬p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_53:&lt;br /&gt;
  &amp;quot;((p⟶q)⟶p)⟶p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_54:&lt;br /&gt;
  &amp;quot;¬q⟶¬p ⟹ p⟶q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_55:&lt;br /&gt;
  &amp;quot;¬(¬p∧¬q) ⟹ p∨q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_56:&lt;br /&gt;
  &amp;quot;¬(¬p∨¬q) ⟹ p∧q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_57:&lt;br /&gt;
  &amp;quot;¬(p∧q) ⟹ ¬p∨¬q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_58:&amp;quot;(p⟶q)∨(q⟶p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_2&amp;diff=331</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_2&amp;diff=331"/>
		<updated>2018-07-16T07:51:39Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Texto reemplazado: «&amp;quot;isar&amp;quot;» por «&amp;quot;isabelle&amp;quot;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* 2ª relación de ejercicios *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_2&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Demostrar o refutar los siguientes lemas usando sólo las reglas&lt;br /&gt;
  básicas de deducción natural de la lógica proposicional y de la lógica&lt;br /&gt;
  de predicados (allI, allE, exI y exE). &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(∃x.∀y. P x y) ⟶ (∀y.∃x. P x y)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;∃x. ∀y. P x y&amp;quot;&lt;br /&gt;
  show &amp;quot;∀y. ∃x. P x y&amp;quot;&lt;br /&gt;
  proof (rule allI)&lt;br /&gt;
    from 1 obtain &amp;quot;x&amp;quot; where 2: &amp;quot;∀y. P x y&amp;quot; by (rule exE)&lt;br /&gt;
    fix y&lt;br /&gt;
    from 2 have 3: &amp;quot;P x y&amp;quot; by (rule allE)&lt;br /&gt;
    from 3 show 4: &amp;quot;∃x. P x y&amp;quot; by (rule exI)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(∀x. P x ⟶ Q) = ((∃x. P x) ⟶ Q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
 { assume 1: &amp;quot;∀x. P x ⟶ Q&amp;quot;&lt;br /&gt;
   show &amp;quot;(∃x. P x) ⟶ Q&amp;quot;&lt;br /&gt;
   proof&lt;br /&gt;
     assume &amp;quot;∃x. P x&amp;quot;&lt;br /&gt;
     then obtain a where &amp;quot;P a&amp;quot; by (rule exE)&lt;br /&gt;
     have &amp;quot;P a ⟶ Q&amp;quot; using 1 by (rule allE)&lt;br /&gt;
     thus &amp;quot;Q&amp;quot; using `P a` by (rule mp)&lt;br /&gt;
   qed }&lt;br /&gt;
next&lt;br /&gt;
 { assume 2: &amp;quot;(∃x. P x) ⟶ Q&amp;quot;&lt;br /&gt;
   show &amp;quot;∀x. P x ⟶ Q&amp;quot;&lt;br /&gt;
   proof&lt;br /&gt;
     fix a&lt;br /&gt;
     show &amp;quot;P a ⟶ Q&amp;quot;&lt;br /&gt;
     proof&lt;br /&gt;
       assume &amp;quot;P a&amp;quot;&lt;br /&gt;
       hence 3: &amp;quot;∃x. P x&amp;quot; by (rule exI)&lt;br /&gt;
       from 2 and 3 show &amp;quot;Q&amp;quot; by (rule mp)&lt;br /&gt;
     qed&lt;br /&gt;
   qed }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;((∀ x. P x) ∧ (∀ x. Q x)) = (∀ x. (P x ∧ Q x))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  { assume 1: &amp;quot;(∀ x. P x) ∧ (∀ x. Q x)&amp;quot;&lt;br /&gt;
    show &amp;quot;∀ x. (P x ∧ Q x)&amp;quot;&lt;br /&gt;
    proof (rule allI)&lt;br /&gt;
      from 1 have 2: &amp;quot;∀ x. P x&amp;quot; by (rule conjE)&lt;br /&gt;
      from 1 have 3: &amp;quot;∀ x. Q x&amp;quot; by (rule conjE)&lt;br /&gt;
      fix a&lt;br /&gt;
      from 2 have 4: &amp;quot;P a&amp;quot; by (rule allE)&lt;br /&gt;
      from 3 have 5: &amp;quot;Q a&amp;quot; by (rule allE)&lt;br /&gt;
      from 4 and 5 show 6: &amp;quot;(P a) ∧ (Q a)&amp;quot; by (rule conjI)&lt;br /&gt;
    qed }&lt;br /&gt;
next&lt;br /&gt;
  { assume 7: &amp;quot;∀ x. (P x ∧ Q x)&amp;quot;&lt;br /&gt;
    show &amp;quot;(∀ x. P x) ∧ (∀ x. Q x)&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      show &amp;quot;(∀ x. P x)&amp;quot;&lt;br /&gt;
      proof (rule allI)&lt;br /&gt;
        fix a&lt;br /&gt;
        from 7 have 8: &amp;quot;P a ∧ Q a&amp;quot; by (rule allE)&lt;br /&gt;
        from 8 show &amp;quot;P a&amp;quot; by (rule conjE)&lt;br /&gt;
      qed&lt;br /&gt;
    next&lt;br /&gt;
      show &amp;quot;(∀ x. Q x)&amp;quot;&lt;br /&gt;
      proof (rule allI)&lt;br /&gt;
        fix a&lt;br /&gt;
        from 7 have 9: &amp;quot;P a ∧ Q a&amp;quot; by (rule allE)&lt;br /&gt;
        from 9 show &amp;quot;Q a&amp;quot; by (rule conjE)&lt;br /&gt;
      qed &lt;br /&gt;
    qed }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;((∀ x. P x) ∨ (∀ x. Q x)) = (∀ x. (P x ∨ Q x))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Esta fórmula de la lógica de predicados es falsa. La implicación de&lt;br /&gt;
  izquierda a derecha sí es cierta y a continuación la probamos:&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;((∀ x. P x) ∨ (∀ x. Q x)) ⟶ (∀ x. (P x ∨ Q x))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;(∀ x. P x) ∨ (∀ x. Q x)&amp;quot;&lt;br /&gt;
  show &amp;quot;∀ x. (P x ∨ Q x)&amp;quot;&lt;br /&gt;
  proof (rule allI)&lt;br /&gt;
    fix x&lt;br /&gt;
    note 1&lt;br /&gt;
    moreover{&lt;br /&gt;
      assume 11: &amp;quot;∀ x. P x&amp;quot;   &lt;br /&gt;
      from 11 have 111: &amp;quot;P x&amp;quot; by (rule allE)&lt;br /&gt;
      from 111 have &amp;quot;P x ∨ Q x&amp;quot; by (rule disjI1)}&lt;br /&gt;
    moreover{  &lt;br /&gt;
      assume 12: &amp;quot;∀ x. Q x&amp;quot;&lt;br /&gt;
      from 12 have 121: &amp;quot;Q x&amp;quot; by (rule allE)&lt;br /&gt;
      from 121 have &amp;quot;P x ∨ Q x&amp;quot; by (rule disjI2)}&lt;br /&gt;
    ultimately show &amp;quot;(P x ∨ Q x)&amp;quot; by (rule disjE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  La implicación de derecha a izquierda es falsa y a continuación&lt;br /&gt;
  construimos un contraejemplo. Supongamos un modelo en el que fuese&lt;br /&gt;
  verdadera: &lt;br /&gt;
    (∀ x. (P x ∨ Q x)) ∧ (∃x. ¬P x ) ∧ (∃x. ¬Q x),&lt;br /&gt;
  lo cual equivale a &lt;br /&gt;
    (∀ x. (P x ∨ Q x)) ∧ ¬(∀ x. P x ) ∧ ¬(∀ x. Q x)&lt;br /&gt;
  y esto es contradictorio con &lt;br /&gt;
    (∀ x. P x) ∨ (∀ x. Q x). &lt;br /&gt;
  Un ejemplo en lenguaje natural que ilustra esto es el siguiente: todos &lt;br /&gt;
  los números reales son algebraicos o trascendentes, pero de ello no&lt;br /&gt;
  podemos concluir que o bien todos los números reales son algebraicos o bien todos los&lt;br /&gt;
  números reales son trascendentes.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Comentario de J.A. Alonso: ¿Cómo se calcula un contraejemplo con Isabelle?&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;((∃ x. P x) ∨ (∃ x. Q x)) = (∃ x. (P x ∨ Q x))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  {assume 1:&amp;quot;((∃ x. P x) ∨ (∃ x. Q x))&amp;quot;&lt;br /&gt;
   show &amp;quot;(∃ x. (P x ∨ Q x))&amp;quot;&lt;br /&gt;
   proof -&lt;br /&gt;
     note 1&lt;br /&gt;
     moreover&lt;br /&gt;
     { assume 2: &amp;quot;(∃ x. P x)&amp;quot;&lt;br /&gt;
       obtain a where 3: &amp;quot;P a&amp;quot; using 2 by (rule exE)&lt;br /&gt;
       from 3 have 4: &amp;quot;P a ∨ Q a&amp;quot; .. &lt;br /&gt;
       from 4 have &amp;quot;(∃ x. (P x ∨ Q x))&amp;quot; by (rule exI) }&lt;br /&gt;
     moreover&lt;br /&gt;
     { assume 2: &amp;quot;(∃ x. Q x)&amp;quot;&lt;br /&gt;
       obtain a where 3: &amp;quot;Q a&amp;quot; using 2 by (rule exE)&lt;br /&gt;
       from 3 have 4: &amp;quot;P a ∨ Q a&amp;quot; .. &lt;br /&gt;
       from 4 have &amp;quot;(∃ x. (P x ∨ Q x))&amp;quot; by (rule exI) }&lt;br /&gt;
     ultimately show &amp;quot;(∃ x. (P x ∨ Q x))&amp;quot; by (rule disjE)  &lt;br /&gt;
   qed}&lt;br /&gt;
next&lt;br /&gt;
  {assume 1:&amp;quot;(∃ x. (P x ∨ Q x))&amp;quot;&lt;br /&gt;
   obtain a where 2: &amp;quot;P a ∨ Q a&amp;quot; using 1 by (rule exE)&lt;br /&gt;
   show &amp;quot;((∃ x. P x) ∨ (∃ x. Q x))&amp;quot; using 2&lt;br /&gt;
   proof &lt;br /&gt;
     { assume 3: &amp;quot;P a&amp;quot;&lt;br /&gt;
       from 3 have 4: &amp;quot;(∃ x. P x)&amp;quot; by (rule exI)&lt;br /&gt;
       from 4 show &amp;quot;((∃ x. P x) ∨ (∃ x. Q x))&amp;quot; .. }&lt;br /&gt;
     { assume 3: &amp;quot;Q a&amp;quot;&lt;br /&gt;
       from 3 have 4: &amp;quot;(∃ x. Q x)&amp;quot; by (rule exI)&lt;br /&gt;
       from 4 show &amp;quot;((∃ x. P x) ∨ (∃ x. Q x))&amp;quot; .. }&lt;br /&gt;
   qed }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(∀x. ∃y. P x y) ⟶ (∃y. ∀x. P x y)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Esta fórmula de la lógica de predicados es falsa y a continuación&lt;br /&gt;
  construimos un contraejemplo. Supongamos un modelo en el que fuese verdadera:&lt;br /&gt;
    (∀x.∃y. P x y) ∧ (∀x. P x x) ∧ (∀x.∀y. (¬(x = y) ⟶ ¬(P y x))) ∧ (∃x.∃y. (¬(x = y))) &lt;br /&gt;
  y esto es contradictorio con &lt;br /&gt;
    (∃y. ∀x. P x y).&lt;br /&gt;
  Si interpretamos P como &amp;lt;&amp;lt;tener exactamente los mismos padres y los&lt;br /&gt;
  mismos hermanos que&amp;gt;&amp;gt; es obvio que la implicación es falsa. Un&lt;br /&gt;
  contraejemplo más conocido se obtiene interpretando P como la relación&lt;br /&gt;
  &amp;lt;&amp;lt;menor o igual que&amp;gt;&amp;gt; sobre los números reales, de modo que el&lt;br /&gt;
  antecedente indicaría que dichos números no están acotados&lt;br /&gt;
  superiormente, mientras que el consecuente indicaría que el conjunto&lt;br /&gt;
  de los reales tiene al menos una cota superior.&lt;br /&gt;
 *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Comentario de J.A. Alonso: ¿Cómo se calcula un contraejemplo con Isabelle?&lt;br /&gt;
 &lt;br /&gt;
 Simplemente ejecutando un lema o teorema para el cual se pueda encontrar un&lt;br /&gt;
 contraejemplo, isabelle automáticamente te lo mostrará. Para que el sistema&lt;br /&gt;
 calcule un contraejemplo directamente también es posible utilizar la palabra&lt;br /&gt;
 reservada &amp;quot;refute&amp;quot;&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La forma más corta y más automática es la que sigue&amp;quot;&lt;br /&gt;
lemma &amp;quot;(¬ (∀ x. P x)) = (∃ x. ¬ P x)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_7&amp;diff=329</id>
		<title>Rel 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_7&amp;diff=329"/>
		<updated>2018-07-16T07:51:11Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* 7ª relación de ejercicios *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_7_sol&lt;br /&gt;
imports Main Efficient_Nat&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Contador de occurrencias *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     veces :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ nat&amp;quot;&lt;br /&gt;
  tal que (veces x ys) es el número de occurrencias del elemento x en la&lt;br /&gt;
  lista ys. Por ejemplo, &lt;br /&gt;
    veces (2::nat) [2,1,2,5,2] = 3&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar o refutar:&lt;br /&gt;
     veces a (xs @ ys) = veces a xs + veces a ys&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*} &lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar o refutar:&lt;br /&gt;
     veces a xs = veces a (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*} &lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
    &amp;quot;veces a xs ≤ length xs&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Sabiendo que la función map aplica una función a todos los&lt;br /&gt;
  elementos de una lista: &lt;br /&gt;
     map f [x\&amp;lt;^isub&amp;gt;1,…,x\&amp;lt;^isub&amp;gt;n] = [f x\&amp;lt;^isub&amp;gt;1,…,f x\&amp;lt;^isub&amp;gt;n], &lt;br /&gt;
  demostrar o refutar&lt;br /&gt;
     veces a (map f xs) = veces (f a) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. La función &lt;br /&gt;
     filter :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; &lt;br /&gt;
  está definida por&lt;br /&gt;
     filter P []       = []&lt;br /&gt;
     filter P (x # xs) = (if P x then x # filter P xs else filter P xs)&lt;br /&gt;
  Encontrar una expresión e que no contenga filter tal que se verifique&lt;br /&gt;
  la siguiente propiedad: &lt;br /&gt;
     veces a (filter P xs) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Usando veces, definir la función &lt;br /&gt;
     borraDups :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot;&lt;br /&gt;
  tal que (borraDups xs) es la lista obtenida eliminando los elementos&lt;br /&gt;
  duplicados de la lista xs. Por ejemplo,  &lt;br /&gt;
     borraDups [1::nat,2,4,2,3] = [1,4,2,3]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borraDups es equivalente a la predefinida remdups. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Encontrar una expresión e que no contenga la función&lt;br /&gt;
  borraDups tal que se verifique &lt;br /&gt;
     veces x (borraDups xs) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Usando la función &amp;quot;veces&amp;quot;, definir la función &lt;br /&gt;
     distintos :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot;&lt;br /&gt;
  tal que (distintos xs) se verifica si cada elemento de xs aparece tan&lt;br /&gt;
  solo una vez. Por ejemplo, &lt;br /&gt;
     distintos [1,4,3]&lt;br /&gt;
     ¬ distintos [1,4,1]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función &amp;quot;distintos&amp;quot; es equivalente a la predefinida &amp;quot;distinct&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que el valor de &amp;quot;borraDups&amp;quot; verifica &amp;quot;distintos&amp;quot;. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_1&amp;diff=328</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_1&amp;diff=328"/>
		<updated>2018-07-16T07:50:54Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Texto reemplazado: «&amp;quot;isar&amp;quot;» por «&amp;quot;isabelle&amp;quot;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* 1ª relación de ejercicios *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_1&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Demostrar los siguientes lemas usando sólo las reglas básicas de&lt;br /&gt;
  deducción natural de la lógica proposicional.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma ej1_d1: &amp;quot;A ⟶ A&amp;quot;&lt;br /&gt;
by (rule imp_refl)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Se puede hacer automáticamente&amp;quot;&lt;br /&gt;
lemma ej1_d2: &amp;quot;A ⟶  A&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Otra forma (más explicita)&amp;quot;&lt;br /&gt;
lemma ej1_d3: &amp;quot;A ⟶ A&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;A&amp;quot;&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ej2_d1:&lt;br /&gt;
  assumes 1:&amp;quot;A ∧ B&amp;quot; &lt;br /&gt;
  shows &amp;quot;B ∧ A&amp;quot; &lt;br /&gt;
proof -&lt;br /&gt;
  from 1 have 2:&amp;quot;A&amp;quot; by (rule conjunct1)&lt;br /&gt;
  from 1 have 3:&amp;quot;B&amp;quot; by (rule conjunct2)&lt;br /&gt;
  from 3 2 show &amp;quot;B ∧ A&amp;quot; by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  El ejercicio anterior hecho de un modo automático (dado que no es&lt;br /&gt;
  posible hacerlo por auto, es un buen candidato a que lo resuelvan&lt;br /&gt;
  otros demostradores automáticos proposicionales&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma ej2_d2:&lt;br /&gt;
  assumes 1:&amp;quot;A ∧ B&amp;quot; &lt;br /&gt;
  shows  &amp;quot;B ∧ A&amp;quot; &lt;br /&gt;
by (metis 1) &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Comentario de J.A. Alonso: El ejercicio 2 puede resolverse por&lt;br /&gt;
  auto. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma ej3_d1: &amp;quot;A ∧ B ⟶ A ∨ B&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;A ∧ B&amp;quot;&lt;br /&gt;
  hence &amp;quot;A&amp;quot; ..&lt;br /&gt;
  thus &amp;quot;A ∨ B&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Otra versión&amp;quot;&lt;br /&gt;
lemma ej3_d2: &amp;quot;A ∧ B ⟶ A ∨ B&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume 1: &amp;quot;A ∧ B&amp;quot;&lt;br /&gt;
  from 1 have 2: &amp;quot;A&amp;quot; by (rule conjunct1)&lt;br /&gt;
  from 2 show &amp;quot;A ∨ B&amp;quot; by (rule disjI1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ej4_d1:&lt;br /&gt;
  assumes 1:&amp;quot;(A ∨ B) ∨ C&amp;quot;&lt;br /&gt;
  shows &amp;quot;A ∨ (B ∨ C)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
note 1&lt;br /&gt;
 moreover&lt;br /&gt;
 { assume 2: &amp;quot;C&amp;quot;&lt;br /&gt;
   from 2 have 3:&amp;quot;B ∨ C&amp;quot; by (rule disjI2) &lt;br /&gt;
   from 3 have &amp;quot;A ∨ (B ∨ C)&amp;quot; by (rule disjI2)}&lt;br /&gt;
 moreover&lt;br /&gt;
 { assume 4: &amp;quot;A ∨ B&amp;quot;&lt;br /&gt;
   from 4 have &amp;quot;(A ∨ B) ∨ C&amp;quot; by (rule disjI1) }&lt;br /&gt;
ultimately show &amp;quot;A ∨ (B ∨ C) &amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Otra forma (más explícita)&amp;quot;&lt;br /&gt;
lemma ej4_d2: &amp;quot;(A ∨ B) ∨ C ⟶ A ∨ (B ∨ C)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume 1: &amp;quot;(A ∨ B) ∨ C&amp;quot;&lt;br /&gt;
  show &amp;quot;A ∨ (B ∨ C)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    note 1&lt;br /&gt;
    moreover{&lt;br /&gt;
      assume 2: &amp;quot;A ∨ B&amp;quot;&lt;br /&gt;
      have &amp;quot;A ∨ (B ∨ C)&amp;quot;&lt;br /&gt;
        proof -&lt;br /&gt;
          note 2&lt;br /&gt;
          moreover{&lt;br /&gt;
            assume 3: &amp;quot;A&amp;quot;&lt;br /&gt;
            from 3 have 4:&amp;quot;A ∨ (B ∨ C)&amp;quot; by (rule disjI1)&lt;br /&gt;
          }&lt;br /&gt;
          moreover{&lt;br /&gt;
            assume 5:&amp;quot;B&amp;quot;&lt;br /&gt;
            from 5 have 6: &amp;quot;B ∨ C&amp;quot; by (rule disjI1)&lt;br /&gt;
            from 6 have 7: &amp;quot;A ∨ (B ∨ C)&amp;quot; by (rule disjI2)&lt;br /&gt;
          }&lt;br /&gt;
          ultimately show &amp;quot;A ∨ (B ∨ C)&amp;quot; by (rule disjE)&lt;br /&gt;
        qed&lt;br /&gt;
      }&lt;br /&gt;
      moreover{&lt;br /&gt;
        assume 8: &amp;quot;C&amp;quot;&lt;br /&gt;
        from 8 have 9: &amp;quot;B ∨ C&amp;quot; by (rule disjI2)&lt;br /&gt;
        from 9 have &amp;quot;A ∨ (B ∨ C)&amp;quot; by (rule disjI2)&lt;br /&gt;
      }&lt;br /&gt;
      ultimately show &amp;quot;A ∨ (B ∨ C)&amp;quot; by (rule disjE)&lt;br /&gt;
    qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Comentario de J.A. Alonso: El enunciado de ej4_d2 no es exactamente&lt;br /&gt;
  el mismo que el original y la demostración es demasiado larga. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  La versión anterior de la propiedad asociativa de la disyunción (es&lt;br /&gt;
  decir, en forma de proposición implicativa) demostrada de forma muy&lt;br /&gt;
  automática y breve. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma ej4_d3: &amp;quot;(A ∨ B) ∨ C ⟶ A ∨ (B ∨ C)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Comentario de J.A. Alonso: El enunciado de ej4_d3 no es exactamente&lt;br /&gt;
  el mismo que el original.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Otra versión. la sentencia note no es necesaria.&amp;quot;&lt;br /&gt;
lemma ej4_d4: &amp;quot;(A ∨ B) ∨ C ⟶ A ∨ (B ∨ C)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume 1: &amp;quot;(A ∨ B) ∨ C&amp;quot;&lt;br /&gt;
   moreover&lt;br /&gt;
  { assume 4: &amp;quot;(A ∨ B)&amp;quot;&lt;br /&gt;
    moreover&lt;br /&gt;
    { assume 5: &amp;quot;A&amp;quot;&lt;br /&gt;
      from 5 have 6: &amp;quot;A ∨ (B ∨ C)&amp;quot; by (rule disjI1)}&lt;br /&gt;
    moreover&lt;br /&gt;
    { assume 7: &amp;quot;B&amp;quot;&lt;br /&gt;
      from 7 have 8: &amp;quot;(B ∨ C)&amp;quot; by (rule disjI1)&lt;br /&gt;
      from 8 have 9: &amp;quot;A ∨ (B ∨ C)&amp;quot; by (rule disjI2)}&lt;br /&gt;
    ultimately have &amp;quot;A ∨ (B ∨ C)&amp;quot; by (rule disjE)}&lt;br /&gt;
  moreover&lt;br /&gt;
  { assume 2: &amp;quot;C&amp;quot;&lt;br /&gt;
    from 2 have 3: &amp;quot;(B ∨ C)&amp;quot; by (rule disjI2)&lt;br /&gt;
    from 3 have &amp;quot;A ∨ (B ∨ C)&amp;quot; by (rule disjI2)}&lt;br /&gt;
  ultimately show &amp;quot;A ∨ (B ∨ C)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Comentario de J.A. Alonso: El enunciado de ej4_d4 no es exactamente&lt;br /&gt;
  el mismo que el original y la demostración es demasiado larga. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma ej5_aux:&lt;br /&gt;
  assumes &amp;quot;A&amp;quot;&lt;br /&gt;
  shows &amp;quot;B ⟶ A&amp;quot;&lt;br /&gt;
using assms &lt;br /&gt;
by simp&lt;br /&gt;
&lt;br /&gt;
lemma ej5_d1: &amp;quot;A ⟶ (B ⟶ A)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume 1: &amp;quot;A&amp;quot;&lt;br /&gt;
  from 1 show &amp;quot;B ⟶ A&amp;quot; by (rule ej5_aux)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Comentario de J.A. Alonso: En la prueba anterior puede eliminarse la&lt;br /&gt;
  etiqueta. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Éste también se puede obtener de forma totalmente automática.&amp;quot;&lt;br /&gt;
lemma ej5_d2: &amp;quot;A ⟶ (B ⟶ A)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej6_d1: &amp;quot;(A ⟶ (B ⟶ C)) ⟶ ((A ⟶ B) ⟶ (A ⟶ C))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume 1:&amp;quot;A ⟶ (B ⟶ C)&amp;quot;&lt;br /&gt;
  show &amp;quot;(A ⟶ B) ⟶ (A ⟶ C)&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume 2:&amp;quot;(A ⟶ B)&amp;quot;&lt;br /&gt;
      show &amp;quot;A ⟶ C&amp;quot;&lt;br /&gt;
      proof&lt;br /&gt;
        assume 3:&amp;quot;A&amp;quot;&lt;br /&gt;
        from 2 3 have 4:&amp;quot;B&amp;quot; by (rule mp)&lt;br /&gt;
        from 1 3 have 5:&amp;quot;B ⟶ C&amp;quot; by (rule mp)&lt;br /&gt;
        from 5 4 show &amp;quot;C&amp;quot; by (rule mp)&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Por simplificación es inmediata su justificación&amp;quot;&lt;br /&gt;
lemma ej6_d2: &amp;quot;(A ⟶ (B ⟶ C)) ⟶ ((A ⟶ B) ⟶ (A ⟶ C))&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej7_d1: &amp;quot;(A ⟶ B) ⟶ ((B ⟶ C) ⟶ (A ⟶ C))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume 1:&amp;quot;A ⟶ B&amp;quot;&lt;br /&gt;
  show &amp;quot;(B ⟶ C) ⟶ (A ⟶ C)&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    assume 2:&amp;quot;B ⟶ C&amp;quot;&lt;br /&gt;
    show &amp;quot;A ⟶ C&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume 3:&amp;quot;A&amp;quot;&lt;br /&gt;
      from 1 3 have 4:&amp;quot;B&amp;quot; by (rule mp)&lt;br /&gt;
      from 2 4 show &amp;quot;C&amp;quot; by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Por simplificación es inmediata su justificación&amp;quot;&lt;br /&gt;
lemma ej7_d2: &amp;quot;(A ⟶ B) ⟶ ((B ⟶ C) ⟶ (A ⟶ C))&amp;quot;&lt;br /&gt;
by simp&lt;br /&gt;
&lt;br /&gt;
lemma ej8_d1: &amp;quot;¬¬A ⟶ A&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume 1:&amp;quot;¬¬A&amp;quot;&lt;br /&gt;
  from 1 show &amp;quot;A&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Está claro que éste sale por auto y por simp&amp;quot;&lt;br /&gt;
lemma ej8_d2: &amp;quot;¬¬A ⟶ A&amp;quot;&lt;br /&gt;
by simp&lt;br /&gt;
&lt;br /&gt;
lemma ej9_d1: &amp;quot;A ⟶ ¬¬A&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume 1:&amp;quot;A&amp;quot;&lt;br /&gt;
  from 1 show &amp;quot;¬¬A&amp;quot; by (rule contrapos_pn)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Comentario de J.A. Alonso: Puede demostrase sin etiquetas.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma MT: -- &amp;quot;ej10&amp;quot;&lt;br /&gt;
  assumes 1:&amp;quot;F ⟶ G&amp;quot; and 2:&amp;quot;¬G&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬F&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 3:&amp;quot;F&amp;quot;&lt;br /&gt;
  from 1 and 3 have 4: &amp;quot;G&amp;quot; by (rule mp)&lt;br /&gt;
  from 2 and 4 show False by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ej11_d1: &amp;quot;(¬A ⟶ B) ⟶ (¬B ⟶ A)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume 1:&amp;quot;(¬A ⟶ B)&amp;quot;&lt;br /&gt;
  show &amp;quot;¬B ⟶ A&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume 2:&amp;quot;¬B&amp;quot;&lt;br /&gt;
    from 1 2 have 3:&amp;quot;¬¬A&amp;quot; by (rule MT)&lt;br /&gt;
    from 3 show &amp;quot;A&amp;quot; by (rule notnotD)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ej12_d1: &amp;quot;((A ⟶ B) ⟶ A) ⟶ A&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume 1: &amp;quot;(A ⟶ B) ⟶ A&amp;quot;&lt;br /&gt;
  have 8: &amp;quot;¬¬A&amp;quot;&lt;br /&gt;
  proof (rule notI)&lt;br /&gt;
    assume 2: &amp;quot;¬A&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;A ⟶ B&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 4: &amp;quot;A&amp;quot;&lt;br /&gt;
      from 2 and 4 show &amp;quot;B&amp;quot; by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    from 1 and 3 have 5: &amp;quot;A&amp;quot; by (rule mp)&lt;br /&gt;
    from 2 and 5 show False by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  from 8 show &amp;quot;A&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Éste sale por auto pero no por el método simp&amp;quot;&lt;br /&gt;
lemma ej12_d2: &amp;quot;((A ⟶ B) ⟶ A) ⟶ A&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej13_d1: &amp;quot;A ∨ ¬A&amp;quot;&lt;br /&gt;
proof cases&lt;br /&gt;
  assume &amp;quot;A&amp;quot; thus ?thesis ..&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;¬A&amp;quot; thus ?thesis ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Demostración aún más corta y automática&amp;quot;&lt;br /&gt;
lemma ej13_d2: &amp;quot;A ∨ ¬A&amp;quot;&lt;br /&gt;
by simp&lt;br /&gt;
&lt;br /&gt;
lemma ej14_d1: &amp;quot;(¬(A ∧ B)) = (¬A ∨ ¬B)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  {&lt;br /&gt;
  assume 1: &amp;quot;¬(A ∧ B)&amp;quot;&lt;br /&gt;
  have 2: &amp;quot;¬A ∨ A&amp;quot; by (rule excluded_middle)&lt;br /&gt;
  thus &amp;quot;¬A ∨ ¬B&amp;quot;&lt;br /&gt;
    proof (rule disjE)&lt;br /&gt;
      { assume 3: &amp;quot;¬A&amp;quot;&lt;br /&gt;
        thus  &amp;quot;¬A ∨ ¬B&amp;quot; by (rule disjI1) }&lt;br /&gt;
    next&lt;br /&gt;
      { assume 4: &amp;quot;A&amp;quot;&lt;br /&gt;
        have 5: &amp;quot;¬B ∨ B&amp;quot; by (rule excluded_middle)&lt;br /&gt;
        thus &amp;quot;¬A ∨ ¬B&amp;quot;&lt;br /&gt;
        proof (rule disjE)&lt;br /&gt;
          {assume 6: &amp;quot;¬B&amp;quot;&lt;br /&gt;
            thus &amp;quot;¬A ∨ ¬B&amp;quot; by (rule disjI2) }&lt;br /&gt;
          next&lt;br /&gt;
          {assume 7: &amp;quot;B&amp;quot;&lt;br /&gt;
             from 4 and 7 have 8: &amp;quot;A ∧ B&amp;quot; by (rule conjI)&lt;br /&gt;
             from 1 and 8 show &amp;quot;¬A ∨ ¬B&amp;quot; by (rule notE) }&lt;br /&gt;
        qed&lt;br /&gt;
      }      &lt;br /&gt;
    qed&lt;br /&gt;
  }&lt;br /&gt;
next&lt;br /&gt;
  { assume 1: &amp;quot;¬A ∨ ¬B&amp;quot;&lt;br /&gt;
    show &amp;quot;¬(A ∧ B)&amp;quot;&lt;br /&gt;
    proof (rule notI)&lt;br /&gt;
      assume 2: &amp;quot;A ∧ B&amp;quot;&lt;br /&gt;
      from 1 have 3:&amp;quot;¬A ∨ ¬B&amp;quot; .&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 4: &amp;quot;¬A&amp;quot;&lt;br /&gt;
        from 2 have 5:&amp;quot;A&amp;quot; by (rule conjunct1)&lt;br /&gt;
        from 4 and 5 have False by (rule notE) }&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 6: &amp;quot;¬B&amp;quot;&lt;br /&gt;
        from 2 have 7: &amp;quot;B&amp;quot; by (rule conjunct2)&lt;br /&gt;
        from 6 and 7 have False by (rule notE) }&lt;br /&gt;
      ultimately show False by (rule disjE)        &lt;br /&gt;
    qed&lt;br /&gt;
  }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Si no queremos entrar en detalles lo podríamos mandar a la &amp;#039;maza&amp;#039;&amp;quot;&lt;br /&gt;
lemma ej14_d2: &amp;quot;(¬(A ∧ B)) = (¬A ∨ ¬B)&amp;quot;&lt;br /&gt;
by metis&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_6&amp;diff=327</id>
		<title>Rel 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_6&amp;diff=327"/>
		<updated>2018-07-16T07:50:53Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* 6ª relación de ejercicios *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Número de elementos válidos *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     cuentaP :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ nat&amp;quot;&lt;br /&gt;
  tal que (cuentaP Q xs) es el número de elementos de la lista xs que&lt;br /&gt;
  satisfacen el predicado Q. Por ejemplo,   &lt;br /&gt;
     cuentaP (λx. 2&amp;lt;x) [1,3,4,0,5] = 3&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar o refutar:&lt;br /&gt;
     cuentaP P (xs @ ys) = cuentaP P xs + cuentaP P ys*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar que el número de elementos de una lista que&lt;br /&gt;
  cumplen una determinada propiedad es el mismo que el de esa lista&lt;br /&gt;
  invertida. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Encontrar y demostrar una relación entre las funciones&lt;br /&gt;
  filter y  cuentaP. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_11&amp;diff=326</id>
		<title>Rel 11</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_11&amp;diff=326"/>
		<updated>2018-07-16T07:50:42Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Texto reemplazado: «&amp;quot;isar&amp;quot;» por «&amp;quot;isabelle&amp;quot;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* Razonamiento sobre programas en Isabelle *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_11&lt;br /&gt;
imports Main Efficient_Nat&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* ----------------------------------------------------------------&lt;br /&gt;
  Ejercicio 1. Definir, por recursión, la función&lt;br /&gt;
     longitud :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&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;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar que &lt;br /&gt;
     longitud [4,2,5] = 3&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     fun intercambia :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot;&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;
     &amp;quot;intercambia (2,3) = (3,2)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar que &lt;br /&gt;
     intercambia (intercambia (x,y)) = (x,y)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir, por recursión, la función&lt;br /&gt;
     inversa :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&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 [3,2,5] = [5,2,3]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que &lt;br /&gt;
     inversa [x] = [x]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     repite :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  tal que . Por ejemplo,&lt;br /&gt;
     repite 3 5 = [5,5,5]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que &lt;br /&gt;
     longitud (repite n x) = n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     fun conc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que . Por ejemplo,&lt;br /&gt;
     conc [2,3] [4,3,5] = [2,3,4,3,5]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que &lt;br /&gt;
     conc xs (conc ys zs) = (conc xs ys) zs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Refutar que &lt;br /&gt;
     conc xs ys = conc ys xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que &lt;br /&gt;
     conc xs [] = xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar que &lt;br /&gt;
     longitud (conc xs ys) = longitud xs + longitud ys&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Definir la función&lt;br /&gt;
     coge :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&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 [3,7,5,4] = [3,7]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Definir la función&lt;br /&gt;
     elimina :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&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;
     elimina 2 [3,7,5,4] = [5,4]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar que &lt;br /&gt;
     conc (coge n xs) (elimina n xs) = xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Definir la función&lt;br /&gt;
     esVacia :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar que &lt;br /&gt;
     esVacia xs = esVacia (conc xs xs)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Definir la función&lt;br /&gt;
     inversaAc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inversaAc xs) es a inversa de xs calculada usando&lt;br /&gt;
  acumuladores. Por ejemplo, &lt;br /&gt;
     inversaAc [3,2,5] = [5,2,3]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Demostrar que &lt;br /&gt;
     inversaAcAux xs ys = (inversa xs)@ys&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Demostrar que &lt;br /&gt;
     inversaAc xs = inversa xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Definir la función&lt;br /&gt;
     sum :: &amp;quot;int list ⇒ int&amp;quot; &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. 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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Demostrar que &lt;br /&gt;
     sum (map (λx. 2*x) xs) = 2 * (sum xs)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Demostrar que &lt;br /&gt;
     longitud (map f xs) = longitud xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Definir la función&lt;br /&gt;
     sumaImpares :: &amp;quot;nat ⇒ nat&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Demostrar que &lt;br /&gt;
     sumaImpares n = n*n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Definir la función&lt;br /&gt;
     sumaPotenciasDeDosMasUno :: &amp;quot;nat ⇒ nat&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Demostrar que &lt;br /&gt;
     sumaPotenciasDeDosMasUno n = 2^(n+1)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. Definir la función&lt;br /&gt;
     copia :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot;&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 2 = [2,2,2]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Definir la función&lt;br /&gt;
     todos :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. 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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Definir la función&lt;br /&gt;
    factR :: &amp;quot;nat ⇒ nat&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Se considera la siguiente definición iterativa de la&lt;br /&gt;
  función factorial &lt;br /&gt;
     factI :: Integer -&amp;gt; Integer&lt;br /&gt;
     factI n = factI&amp;#039; n 1&lt;br /&gt;
     &lt;br /&gt;
     factI&amp;#039; :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
     factI&amp;#039; 0     x = x                  -- factI&amp;#039;.1&lt;br /&gt;
     factI&amp;#039; (n+1) x = factI&amp;#039; n (n+1)*x   -- factI&amp;#039;.2&lt;br /&gt;
  Comprobar con QuickCheck que factI y factR son equivalentes sobre los&lt;br /&gt;
  números naturales.&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
     &lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Demostrar que, para todo n y todo x, se tiene &lt;br /&gt;
     factI&amp;#039; n x = x * factR n&lt;br /&gt;
  y, como corolario, que&lt;br /&gt;
     factI n = factR n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Definir, recursivamente y sin usar (@). la función&lt;br /&gt;
     amplia :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot;&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 [2,5] 3 = [2,5,3]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Demostrar que &lt;br /&gt;
     amplia xs y = xs @ [y]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_3&amp;diff=325</id>
		<title>Relación 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_3&amp;diff=325"/>
		<updated>2018-07-16T07:50:35Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Texto reemplazado: «&amp;quot;isar&amp;quot;» por «&amp;quot;isabelle&amp;quot;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* 3ª relación de ejercicios *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_3&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Cons inverso *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir recursivamente la función &lt;br /&gt;
     snoc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (snoc xs a) es la lista obtenida al añadir el elemento a al&lt;br /&gt;
  final de la lista xs. Por ejemplo, &lt;br /&gt;
     value &amp;quot;snoc [2,5] (3::int)&amp;quot; == [2,5,3]&lt;br /&gt;
&lt;br /&gt;
  Nota: No usar @.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
primrec snoc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;snoc [] y = [y]&amp;quot;&lt;br /&gt;
| &amp;quot;snoc (x#xs) y = x#(snoc xs y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar el siguiente teorema &lt;br /&gt;
     snoc xs a = xs @ [a]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del lema es&amp;quot;&lt;br /&gt;
lemma &amp;quot;snoc xs a = xs @ [a]&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del lema es&amp;quot;&lt;br /&gt;
lemma snoc_append: &amp;quot;snoc xs a = xs @ [a]&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;snoc [] a = [] @ [a]&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
  fix b xs &lt;br /&gt;
  assume HI: &amp;quot;snoc xs a = xs @ [a]&amp;quot;&lt;br /&gt;
  thus &amp;quot;snoc (b # xs) a = (b # xs) @ [a]&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;snoc (b # xs) a = b#(snoc xs a)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... =  b#(xs @ [a])&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = (b#xs) @ [a]&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis .&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar el siguiente teorema &lt;br /&gt;
     rev (x # xs) = snoc (rev xs) x&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del teorema es&amp;quot;&lt;br /&gt;
theorem rev_cons_auto: &amp;quot;rev (x # xs) = snoc (rev xs) x&amp;quot;&lt;br /&gt;
by (simp add:snoc_append)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del teorema es&amp;quot;&lt;br /&gt;
theorem rev_cons: &amp;quot;rev (x # xs) = snoc (rev xs) x&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
 have &amp;quot;rev(x#xs)=(rev xs) @ [x]&amp;quot; by simp &lt;br /&gt;
 also have &amp;quot;... = snoc (rev xs) x&amp;quot; by (simp add:snoc_append)&lt;br /&gt;
 finally show ?thesis .  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
section {* Cuantificadores sobre listas *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. 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 la lista &lt;br /&gt;
  xs cumplen la propiedad p. Por ejemplo, se verifica &lt;br /&gt;
     todos (λx. 1&amp;lt;length x) [[2,1,4],[1,3]]&lt;br /&gt;
     ¬ todos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función todos es equivalente a la predefinida list_all. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
primrec 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;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     algunos :: (&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (algunos p xs) se verifica si algunos elementos de la lista &lt;br /&gt;
  xs cumplen la propiedad p. Por ejemplo, se verifica &lt;br /&gt;
     algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&lt;br /&gt;
     ¬ algunos (λx. 1&amp;lt;length x) [[],[3]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Nota: La función algunos es equivalente a la predefinida list_ex. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
primrec algunos :: &amp;quot;(&amp;#039;a =&amp;gt; bool) =&amp;gt; &amp;#039;a list =&amp;gt; bool&amp;quot; where&lt;br /&gt;
  &amp;quot;algunos P [] = False&amp;quot;&lt;br /&gt;
  | &amp;quot;algunos P (x#xs) = (P x ∨ algunos P xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar o refutar: &lt;br /&gt;
     todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;todos (λx. P x ∧ Q x) [] = (todos P [] ∧ todos Q [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume 1:  &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
  thus &amp;quot;todos (λx. P x ∧ Q x) (a # xs) = (todos P (a # xs) ∧ todos Q (a # xs))&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have 2: &amp;quot;todos (λx. P x ∧ Q x) (a # xs) = ((P a ∧ Q a) ∧ (todos (λx. P x ∧ Q x) xs))&amp;quot; by simp&lt;br /&gt;
    also have 3: &amp;quot;... = ((P a ∧ Q a) ∧ (todos P xs ∧ todos Q xs))&amp;quot; using 1 by simp&lt;br /&gt;
    also have 4: &amp;quot;... = ((P a ∧ todos P xs) ∧ (Q a ∧ todos Q xs))&amp;quot; by blast&lt;br /&gt;
    also have 5: &amp;quot;... = ((todos P (a # xs) ∧ todos Q (a # xs)))&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis .&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar o refutar: &lt;br /&gt;
     todos P (x @ y) = (todos P x ∧ todos P y)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
by (induct x) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma todos_append [simp]: &lt;br /&gt;
  &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
proof (induct x)&lt;br /&gt;
  show &amp;quot;todos P ([] @ y) = (todos P [] ∧ todos P y)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a x y&lt;br /&gt;
  assume 1: &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
  thus &amp;quot;todos P ((a # x) @ y) = (todos P (a # x) ∧ todos P y)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;(todos P ((a # x) @ y)) = (P a ∧ todos P (x @ y))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (P a ∧ todos P x ∧ todos P y)&amp;quot; using 1 by simp&lt;br /&gt;
    also have &amp;quot;... = (todos P (a #x) ∧ todos P y)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis .&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar o refutar: &lt;br /&gt;
     todos P (rev xs) = todos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;todos P (rev []) = todos P []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume 1: &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
  thus &amp;quot;todos P (rev (a # xs)) = todos P (a # xs)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;todos P (rev (a # xs)) = todos P (rev (xs) @ [a])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (todos P (rev (xs)) ∧ todos P [a])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (todos P xs ∧ todos P [a])&amp;quot; using 1 by simp&lt;br /&gt;
    also have &amp;quot;... = (todos P [a] ∧ todos P xs)&amp;quot; by blast&lt;br /&gt;
    also have &amp;quot;... = todos P ([a] @ xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = todos P (a # xs)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis .&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar o refutar:&lt;br /&gt;
    algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Se busca un contraejemplo con nitpick&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
El contraejemplo que encuentra Quickcheck es (retocando su codificación&lt;br /&gt;
para que no haya problemas al exportarlo a Isabelle):&lt;br /&gt;
  P = {a1}&lt;br /&gt;
  Q = {a2}&lt;br /&gt;
  xs = [a1, a2]&lt;br /&gt;
El contraejemplo que encuentra Nitpick se aparta del anterior en algunos&lt;br /&gt;
detalles:&lt;br /&gt;
  P = {a1, a2}&lt;br /&gt;
  Q = {a3}&lt;br /&gt;
  xs = [a3, a2]&lt;br /&gt;
Refute sin embargo agota el tiempo sin llegar a encontrar un contraejemplo.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar o refutar: &lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P ∘ f) xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar o refutar: &lt;br /&gt;
     algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma algunos_append: &lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos P ([] @ ys) = (algunos P [] ∨ algunos P ys)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume 1: &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
  thus &amp;quot;algunos P ((a # xs) @ ys) = (algunos P (a # xs) ∨ algunos P ys)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;algunos P ((a # xs) @ ys) = (P a ∨ algunos P (xs @ ys))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (P a ∨ (algunos P xs ∨ algunos P ys))&amp;quot; using 1 by simp&lt;br /&gt;
    also have &amp;quot;... = ((P a ∨ algunos P xs) ∨ algunos P ys)&amp;quot; by blast&lt;br /&gt;
    also have &amp;quot;... = (algunos P (a#xs) ∨ algunos P ys)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis .&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar: &lt;br /&gt;
     algunos P (rev xs) = algunos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:algunos_append)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; algunos P (rev []) = algunos P []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume 1: &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
  thus &amp;quot;algunos P (rev (a # xs)) = algunos P (a # xs)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;algunos P (rev (a # xs)) = algunos P (rev (xs) @ [a])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (algunos P (rev (xs)) ∨ algunos P ([a]))&amp;quot; by (simp add:algunos_append)&lt;br /&gt;
    also have &amp;quot;... = (algunos P xs ∨ algunos P [a])&amp;quot; using 1 by simp&lt;br /&gt;
    also have &amp;quot;... = (algunos P [a] ∨ algunos P xs)&amp;quot; by blast&lt;br /&gt;
    also have &amp;quot;... = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis .&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Encontrar un término no trivial Z tal que sea cierta la &lt;br /&gt;
  siguiente ecuación:&lt;br /&gt;
     algunos (λx. P x ∨ Q x) xs = Z&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Solución: La ecuación se verifica eligiendo como Z el término  &lt;br /&gt;
     algunos P xs ∨ algunos Q xs&lt;br /&gt;
  En efecto,&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;De forma estructurada&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos (λx. P x ∨ Q x) [] = (algunos P [] ∨ algunos Q [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume 1: &amp;quot;algunos (λx. P x ∨ Q x) xs = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
  thus &amp;quot;algunos (λx. P x ∨ Q x) (a # xs) = (algunos P (a # xs) ∨ algunos Q (a # xs))&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;algunos (λx. P x ∨ Q x) (a # xs) = ((P a ∨ Q a) ∨ (algunos (λx. P x ∨ Q x) xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = ((P a ∨ Q a) ∨ (algunos P xs ∨ algunos Q xs))&amp;quot; using 1 by auto&lt;br /&gt;
    also have &amp;quot;... = ((P a ∨ algunos P xs) ∨ (Q a ∨ algunos Q xs))&amp;quot; by auto&lt;br /&gt;
    also have &amp;quot;... = (algunos P (a # xs) ∨ algunos Q (a # xs))&amp;quot; by auto&lt;br /&gt;
    finally show ?thesis by auto&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Definir la funcion primitiva recursiva &lt;br /&gt;
     estaEn :: &amp;#039;a ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (estaEn x xs) se verifica si el elemento x está en la lista&lt;br /&gt;
  xs. Por ejemplo, &lt;br /&gt;
     estaEn (2::nat) [3,2,4] = True&lt;br /&gt;
     estaEn (1::nat) [3,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
primrec estaEn :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;estaEn x []     = False&amp;quot;&lt;br /&gt;
| &amp;quot;estaEn x (a#xs) = (x=a ∨ estaEn x xs)&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Expresar la relación existente entre estaEn y algunos. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Solución: La relación es:&lt;br /&gt;
&amp;quot;estaEn x xs ⟶ algunos (λx. True ) xs&amp;quot;.&lt;br /&gt;
  En efecto,  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn x xs ⟶ algunos (λx. True ) xs&amp;quot;&lt;br /&gt;
by (induct xs arbitrary: x) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Definir la función primitiva recursiva &lt;br /&gt;
     sinDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (sinDuplicados xs) se verifica si la lista xs no contiene&lt;br /&gt;
  duplicados. Por ejemplo,  &lt;br /&gt;
     sinDuplicados [1::nat,4,2]   = True&lt;br /&gt;
     sinDuplicados [1::nat,4,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
primrec sinDuplicados :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (a#xs) = ((¬ (estaEn a xs)) ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Definir la función primitiva recursiva &lt;br /&gt;
     borraDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (borraDuplicados xs) es la lista obtenida eliminando los&lt;br /&gt;
  elementos duplicados de la lista xs. Por ejemplo, &lt;br /&gt;
     borraDuplicados [1::nat,2,4,2,3] = [1,4,2,3]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borraDuplicados es equivalente a la predefinida remdups. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
primrec borraDuplicados :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados []     = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados (a#xs) = &lt;br /&gt;
  (if estaEn a xs &lt;br /&gt;
   then borraDuplicados xs &lt;br /&gt;
   else (a#borraDuplicados xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  El tipo correspondiente al conjunto imagen de la función definida&lt;br /&gt;
  no coincide con el indicado en la declaración de tipos del enunciado,&lt;br /&gt;
  dado que en él aparece erróneamente la salida de tipo bool, mientras&lt;br /&gt;
  que del resto del texto se deduce que la salida es una lista de&lt;br /&gt;
  elementos de tipo &amp;#039;a. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar o refutar:&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma length_borraDuplicados: &lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Demostrar o refutar: &lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados_auto: &lt;br /&gt;
  &amp;quot;estaEn a (borraDuplicados xs) = estaEn a xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados: &lt;br /&gt;
  &amp;quot;estaEn a (borraDuplicados xs) = estaEn a xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Demostrar o refutar: &lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática&amp;quot;&lt;br /&gt;
lemma &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
by (induct xs arbitrary: x) (auto simp add: estaEn_borraDuplicados_auto)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Demostrar o refutar:&lt;br /&gt;
    borraDuplicados (rev xs) = rev (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
La igualdad propuesta es falsa.&lt;br /&gt;
El contraejemplo que encuentra Quickcheck es (retocando su&lt;br /&gt;
codificación para que no haya problemas al exportarlo a Isabelle):&lt;br /&gt;
xs = [a1, a2, a1].&lt;br /&gt;
En este caso Nitpick encuentra el mismo contraejemplo.&lt;br /&gt;
Por su parte, Refute de nuevo no encuentra contraejemplo alguno.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borraDuplicados (rev xs) = rev (borraDuplicados xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_5&amp;diff=324</id>
		<title>Rel 5</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_5&amp;diff=324"/>
		<updated>2018-07-16T07:50:34Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* 5ª relación de ejercicios *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_5&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Menor posición válida *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función&lt;br /&gt;
     menorValida :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ nat&amp;quot;&lt;br /&gt;
  tal que (menorValida p xs) es el índice del primer elemento de una&lt;br /&gt;
  lista xs que satisface el predicado  p y es la longitud de xs si&lt;br /&gt;
  ningún elemento satisface el predicado p. Por ejemplo, &lt;br /&gt;
     menorValida (λx. 4&amp;lt;x) [1::nat, 3, 5, 3, 1]     = 2&lt;br /&gt;
     menorValida (λx. 6&amp;lt;x) [1::nat, 3, 5, 3, 1]     = 5&lt;br /&gt;
     menorValida (λx. 1&amp;lt;length x) [[], [1, 2], [3]] = 1&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar que menorValida devuelve la longitud de la&lt;br /&gt;
  lista syss ningún elemento satisface el predicado dado.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar si n es el valor de (menorValida P xs),&lt;br /&gt;
  entonces ninguno de los primeros n elementos de la lista xs verifica&lt;br /&gt;
  la propiedad P. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. ¿Cómo se puede relacionar &lt;br /&gt;
    &amp;quot;menorValida (λ x. P x ∨ Q x) xs&amp;quot; &lt;br /&gt;
  con &lt;br /&gt;
    &amp;quot;menorValida P xs&amp;quot; y &amp;quot;menorValida Q xs&amp;quot;? &lt;br /&gt;
  ¿Se puede decir algo parecido con la conjunción de P y Q?  &lt;br /&gt;
  Prueba tus conjeturas.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La relación es la siguiente: La menor posición de los elementos que&lt;br /&gt;
  verifican la propiedad &amp;quot;P ∨ Q&amp;quot; es el mínimo de la menor posición de&lt;br /&gt;
  los elementos que verifican P y de la menor posición de los elementos&lt;br /&gt;
  que verifican Q.  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Si P implica Q, ¿qué relación puede deducirse entre &lt;br /&gt;
  &amp;quot;menorValida P xs&amp;quot; y &amp;quot;menorValida Q xs&amp;quot;?&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_4&amp;diff=323</id>
		<title>Rel 4</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_4&amp;diff=323"/>
		<updated>2018-07-16T07:50:14Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* 4ª relación de ejercicios *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_4&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar o refutar: &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma sust_append_auto: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs @ ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar o refutar: &lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
theorem &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
theorem rev_sust: &lt;br /&gt;
  &amp;quot;rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar o refutar: &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
theorem &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
theorem &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar o refutar:&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
theorem &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
theorem &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar o refutar:&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
theorem &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
theorem borraTodas_borra:&lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
    &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar o refutar: &lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
theorem &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
theorem &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar el teorema: &lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
theorem &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
theorem &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar:&lt;br /&gt;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
theorem &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
theorem sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar o refutar el teorema: &lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma borraTodas_append: &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar o refutar el teorema: &lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
theorem &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
theorem &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_1a&amp;diff=322</id>
		<title>Relación 1a</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_1a&amp;diff=322"/>
		<updated>2018-07-16T07:50:07Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Texto reemplazado: «&amp;quot;isar&amp;quot;» por «&amp;quot;isabelle&amp;quot;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En esta teoría se presentan los ejemplos del tema de deducción natural proposicional siguiendo la presentación de Huth y Ryan en su libro [http://www.cs.bham.ac.uk/research/projects/lics Logic in Computer Science] y, más concretamente, a la forma como se explica en la asignatura de [http://www.cs.us.es/~jalonso/cursos/li-10 Lógica informática] y que puede verse en  &lt;br /&gt;
las [http://www.cs.us.es/~jalonso/cursos/li-10/temas/tema-2.pdf transparencias del tema 2].&lt;br /&gt;
 &lt;br /&gt;
La página al lado de cada teorema indica la página de las anteriorestransparencias donde se encuentra la demostración.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory LogicaProposicional&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Reglas de la conjunción *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de introducción de la conjunción es&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  Las reglas de eliminación de la conjunción son&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 4&amp;quot; &lt;br /&gt;
  assumes 1: &amp;quot;p ∧ q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;r&amp;quot; &lt;br /&gt;
  shows &amp;quot;q ∧ r&amp;quot;     &lt;br /&gt;
proof -&lt;br /&gt;
  have 3: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;q ∧ r&amp;quot; using 3 2 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;(p ∧ q) ∧ r&amp;quot; and &lt;br /&gt;
          2: &amp;quot;s ∧ t&amp;quot; &lt;br /&gt;
  shows &amp;quot;q ∧ s&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 3: &amp;quot;p ∧ q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 3 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;s&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  show &amp;quot;q ∧ s&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Reglas de la doble negación *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de eliminación de la doble negación es&lt;br /&gt;
  · notnotD: ¬¬ P ⟹ P&lt;br /&gt;
  Para ajustarnos al tema de LI vamos a introducir la siguiente regla de&lt;br /&gt;
  introducción de la doble negación&lt;br /&gt;
  . notnotI: P ⟹ ¬¬ P&lt;br /&gt;
  que, de momento, no detallamos su demostració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 -- &amp;quot;p. 5&amp;quot; &lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot; and &lt;br /&gt;
          2: &amp;quot;¬¬(q ∧ r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬¬p ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 3: &amp;quot;¬¬p&amp;quot; using 1 by (rule notnotI)&lt;br /&gt;
  have 4: &amp;quot;q ∧ r&amp;quot; using 2 by (rule notnotD)&lt;br /&gt;
  have 5: &amp;quot;r&amp;quot; using 4 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;¬¬p ∧ r&amp;quot; using 3 5 by (rule conjI)&lt;br /&gt;
qed        &lt;br /&gt;
&lt;br /&gt;
section {* Regla de eliminación del condicional *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de eliminación del condicional es la regla del modus ponens&lt;br /&gt;
  · mp: ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 6&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;¬p ∧ q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;¬p ∧ q ⟶ r ∨ ¬p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r ∨ ¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  show &amp;quot;r ∨ ¬p&amp;quot; using 2 1 by (rule mp)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 6&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p ⟶ q&amp;quot; and &lt;br /&gt;
          3: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 2 1 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;q ⟶ r&amp;quot; using 3 1 by (rule mp)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 5 4 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Regla derivada del modus tollens *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Para ajustarnos al tema de LI vamos a introducir la regla del modus&lt;br /&gt;
  tollens&lt;br /&gt;
  · mt: ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  sin, de momento, detallar su demostración.&lt;br /&gt;
*}&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;
lemma -- &amp;quot;p. 7&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p&amp;quot; and &lt;br /&gt;
          3: &amp;quot;¬r&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
  show &amp;quot;¬q&amp;quot; using 4 3 by (rule mt)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 7&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;¬p ⟶ q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 3: &amp;quot;¬¬p&amp;quot; using 1 2 by (rule mt)&lt;br /&gt;
  show &amp;quot;p&amp;quot; using 3 by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ ¬q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 3: &amp;quot;¬¬q&amp;quot; using 2 by (rule notnotI)&lt;br /&gt;
  show &amp;quot;¬p&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Regla de introducción del condicional *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de introducción del condicional es&lt;br /&gt;
  · impI: (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 8&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 3: &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;¬p&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
  } thus &amp;quot;¬q ⟶ ¬p&amp;quot; by (rule impI)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 8&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 3: &amp;quot;¬q&amp;quot;&lt;br /&gt;
  show &amp;quot;¬p&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 8&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume 3: &amp;quot;¬q&amp;quot;&lt;br /&gt;
  show &amp;quot;¬p&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 9&amp;quot;&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 &amp;quot;¬¬q&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
  } thus &amp;quot;p ⟶ ¬¬q&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 9&amp;quot;&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 (rule impI)&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;
  show &amp;quot;¬¬q&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 9&amp;quot;&lt;br /&gt;
  &amp;quot;p ⟶ p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 10&amp;quot;&lt;br /&gt;
  &amp;quot;(q ⟶ r) ⟶ ((¬q ⟶ ¬p) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 1: &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
    { assume 2: &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
      { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 4: &amp;quot;¬¬p&amp;quot; using 3 by (rule notnotI)&lt;br /&gt;
        have 5: &amp;quot;¬¬q&amp;quot; using 2 4 by (rule mt)&lt;br /&gt;
        have 6: &amp;quot;q&amp;quot; using 5 by (rule notnotD)&lt;br /&gt;
        have &amp;quot;r&amp;quot; using 1 6 by (rule mp) &lt;br /&gt;
      } hence &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
    } hence &amp;quot;(¬q ⟶ ¬p) ⟶ p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
  } thus &amp;quot;(q ⟶ r) ⟶ ((¬q ⟶ ¬p) ⟶ p ⟶ r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 10&amp;quot;&lt;br /&gt;
  &amp;quot;(q ⟶ r) ⟶ ((¬q ⟶ ¬p) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;(¬q ⟶ ¬p) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 2: &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
      show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
        proof (rule impI)&lt;br /&gt;
          assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
          have 4: &amp;quot;¬¬p&amp;quot; using 3 by (rule notnotI)&lt;br /&gt;
          have 5: &amp;quot;¬¬q&amp;quot; using 2 4 by (rule mt)&lt;br /&gt;
          have 6: &amp;quot;q&amp;quot; using 5 by (rule notnotD)&lt;br /&gt;
          show &amp;quot;r&amp;quot; using 1 6 by (rule mp)&lt;br /&gt;
        qed&lt;br /&gt;
    qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;p ∧ q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;p ∧ q&amp;quot; using 2 3 by (rule conjI)&lt;br /&gt;
      show &amp;quot;r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ r ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ r&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;r&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;q ∧ r&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Reglas de la disyunción *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Las reglas de la introducción de la disyunción son&lt;br /&gt;
  · disjI1: P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2: Q ⟹ P ∨ Q&lt;br /&gt;
  La regla de elimación de la disyunción es&lt;br /&gt;
  · disjE:  ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 11&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
using 1&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
    show &amp;quot;q ∨ p&amp;quot; using 2 by (rule disjI2) }&lt;br /&gt;
next&lt;br /&gt;
  { assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;q ∨ p&amp;quot; using 3 by (rule disjI1) }&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 12&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  thus &amp;quot;p ∨ r&amp;quot;&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      show &amp;quot;p ∨ r&amp;quot; using 3 by (rule disjI1) }&lt;br /&gt;
  next&lt;br /&gt;
    { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 5: &amp;quot;r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
      show &amp;quot;p ∨ r&amp;quot; using 5 by (rule disjI2) }&lt;br /&gt;
  qed&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;(p ∨ q) ∨ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
using 1&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  { assume 2: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    thus &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
    proof (rule disjE)&lt;br /&gt;
      { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
        show &amp;quot;p ∨ (q ∨ r)&amp;quot; using 3 by (rule disjI1) }&lt;br /&gt;
    next&lt;br /&gt;
      { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
        have 5: &amp;quot;q ∨ r&amp;quot; using 4 by (rule disjI1)&lt;br /&gt;
        show &amp;quot;p ∨ (q ∨ r)&amp;quot; using 5 by (rule disjI2) }&lt;br /&gt;
    qed }&lt;br /&gt;
next&lt;br /&gt;
  { assume 6: &amp;quot;r&amp;quot;&lt;br /&gt;
    have 7: &amp;quot;q ∨ r&amp;quot; using 6 by (rule disjI2)&lt;br /&gt;
    show &amp;quot;p ∨ (q ∨ r)&amp;quot; using 7 by (rule disjI2) }&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;p ∧ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: &amp;quot;p&amp;quot; using 1 ..&lt;br /&gt;
  have &amp;quot;q ∨ r&amp;quot; using 1 ..&lt;br /&gt;
  thus &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot;&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    { assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
      have &amp;quot;p ∧ q&amp;quot; using 2 3 by (rule conjI)&lt;br /&gt;
      thus &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; by (rule disjI1) }&lt;br /&gt;
  next&lt;br /&gt;
    { assume 4: &amp;quot;r&amp;quot;&lt;br /&gt;
      have &amp;quot;p ∧ r&amp;quot; using 2 4 by (rule conjI)&lt;br /&gt;
      thus &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; by (rule disjI2) }&lt;br /&gt;
  qed&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
section {* Regla de copia *}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 13&amp;quot;&lt;br /&gt;
  &amp;quot;p ⟶ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ p&amp;quot; &lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p&amp;quot; using 1 by this&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 13&amp;quot;&lt;br /&gt;
  &amp;quot;p ⟶ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  thus &amp;quot;q ⟶ p&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Reglas de la negación *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de eliminación de lo falso es&lt;br /&gt;
  · FalseE: False ⟹ P&lt;br /&gt;
  La regla de eliminación de la negación es&lt;br /&gt;
  · notE: ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  La regla de introducción de la negación es&lt;br /&gt;
  · notI: (P ⟹ False) ⟹ ¬P&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 15&amp;quot;&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;
  note 1&lt;br /&gt;
  thus &amp;quot;q&amp;quot;&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    { assume 3: &amp;quot;¬p&amp;quot;&lt;br /&gt;
      show &amp;quot;q&amp;quot; using 3 2 by (rule notE) }&lt;br /&gt;
  next&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      thus &amp;quot;q&amp;quot; by this}&lt;br /&gt;
  qed&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 16&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p ⟶ ¬q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬p&amp;quot;    &lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;¬q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
  show False using 5 4 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma  &lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ ¬p&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬p&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;¬p&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
  show False using 3 2 by (rule notE)&lt;br /&gt;
qed   &lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;p ∧ ¬q ⟶ r&amp;quot; and &lt;br /&gt;
          2: &amp;quot;¬r&amp;quot; and &lt;br /&gt;
          3: &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;q&amp;quot;    &lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬¬q&amp;quot;&lt;br /&gt;
  proof (rule notI)&lt;br /&gt;
    assume 4: &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have 5: &amp;quot;p ∧ ¬q&amp;quot; using 3 4 by (rule conjI)&lt;br /&gt;
    have 6: &amp;quot;r&amp;quot; using 1 5 by (rule mp)&lt;br /&gt;
    show False using 2 6 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  thus &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p&amp;quot; and &lt;br /&gt;
          3: &amp;quot;¬r&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬q&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
  have 5: &amp;quot;q ⟶ r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
  have 6: &amp;quot;r&amp;quot; using 5 4 by (rule mp)&lt;br /&gt;
  show False using 3 6 by (rule notE)&lt;br /&gt;
qed   &lt;br /&gt;
&lt;br /&gt;
section {* Reglas del bicondicional *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de introducción del bicondicional es&lt;br /&gt;
  · iffI: ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  Las reglas de eliminación del bicondicional son&lt;br /&gt;
  · iffD1: ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2: ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 17&amp;quot;&lt;br /&gt;
  &amp;quot;(p ∧ q) = (q ∧ p)&amp;quot;&lt;br /&gt;
proof (rule iffI)&lt;br /&gt;
  { assume 1: &amp;quot;p ∧ q&amp;quot;&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;q ∧ p&amp;quot; using 3 2 by (rule conjI) }&lt;br /&gt;
next&lt;br /&gt;
  { assume 4: &amp;quot;q ∧ p&amp;quot;&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot; using 4 by (rule conjunct1)&lt;br /&gt;
    have 6: &amp;quot;p&amp;quot; using 4 by (rule conjunct2)&lt;br /&gt;
    show &amp;quot;p ∧ q&amp;quot; using 6 5 by (rule conjI) }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 18&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;p = q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p ∨ q&amp;quot;  &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
using 2&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 1 3 by (rule iffD1)&lt;br /&gt;
    show &amp;quot;p ∧ q&amp;quot; using 3 4 by (rule conjI) }&lt;br /&gt;
next&lt;br /&gt;
  { assume 5: &amp;quot;q&amp;quot;&lt;br /&gt;
    have 6: &amp;quot;p&amp;quot; using 1 5 by (rule iffD2)&lt;br /&gt;
    show &amp;quot;p ∧ q&amp;quot; using 6 5 by (rule conjI) }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Reglas derivadas *}&lt;br /&gt;
&lt;br /&gt;
subsection {* Regla del modus tollens *}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 20&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;F ⟶ G&amp;quot; and &lt;br /&gt;
          2: &amp;quot;¬G&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬F&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 3: &amp;quot;F&amp;quot;&lt;br /&gt;
  have 4: &amp;quot;G&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  show False using 2 4 by (rule notE)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
subsection {* Regla de la introducción de la doble negación *}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 21&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;F&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬¬F&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 2: &amp;quot;¬F&amp;quot;&lt;br /&gt;
  show False using 2 1 by (rule notE)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
subsection {* Regla de reducción al absurdo *}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 22&amp;quot; &lt;br /&gt;
  assumes 1: &amp;quot;¬F ⟶ False&amp;quot; &lt;br /&gt;
  shows &amp;quot;F&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: &amp;quot;¬¬F&amp;quot;&lt;br /&gt;
  proof (rule notI)&lt;br /&gt;
    assume 3: &amp;quot;¬F&amp;quot;&lt;br /&gt;
    show False using 1 3 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
  show &amp;quot;F&amp;quot; using 2 by (rule notnotD)&lt;br /&gt;
qed   &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de reducción al absurdo en Isabelle se correponde con la&lt;br /&gt;
  regla de contradicción &lt;br /&gt;
  · ccontr: (¬P ⟹ False) ⟹ P&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Ley del tercio excluso *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La ley del tercio excluso es &lt;br /&gt;
  · excluded_middle: ¬P ∨ P&lt;br /&gt;
  Puede demostrarse como se muestra a continuación.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 23&amp;quot;&lt;br /&gt;
  &amp;quot;F ∨ ¬F&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 1: &amp;quot;¬(F ∨ ¬F)&amp;quot;&lt;br /&gt;
  thus False&lt;br /&gt;
  proof (rule notE)&lt;br /&gt;
    show &amp;quot;F ∨ ¬F&amp;quot;&lt;br /&gt;
    proof (rule disjI2)&lt;br /&gt;
      show &amp;quot;¬F&amp;quot;&lt;br /&gt;
      proof (rule notI)&lt;br /&gt;
        assume 2: &amp;quot;F&amp;quot;&lt;br /&gt;
        hence 3: &amp;quot;F ∨ ¬F&amp;quot; by (rule disjI1)&lt;br /&gt;
        show False using 1 3 by (rule notE)&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
    &lt;br /&gt;
lemma -- &amp;quot;p. 24&amp;quot;&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 &amp;quot;¬p ∨ p&amp;quot; by (rule excluded_middle)&lt;br /&gt;
  thus &amp;quot;¬p ∨ q&amp;quot;&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
      thus &amp;quot;¬p ∨ q&amp;quot; by (rule disjI1) }&lt;br /&gt;
  next&lt;br /&gt;
    { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
      have &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
      thus &amp;quot;¬p ∨ q&amp;quot; by (rule disjI2) }&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>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_3&amp;diff=320</id>
		<title>Rel 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_3&amp;diff=320"/>
		<updated>2018-07-16T07:49:51Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* 3ª relación de ejercicios *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_3&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Cons inverso *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir recursivamente la función &lt;br /&gt;
     snoc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (snoc xs a) es la lista obtenida al añadir el elemento a al&lt;br /&gt;
  final de la lista xs. Por ejemplo, &lt;br /&gt;
     value &amp;quot;snoc [2,5] (3::int)&amp;quot; == [2,5,3]&lt;br /&gt;
&lt;br /&gt;
  Nota: No usar @.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar el siguiente teorema &lt;br /&gt;
     snoc xs a = xs @ [a]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del lema es&amp;quot;&lt;br /&gt;
lemma &amp;quot;snoc xs a = xs @ [a]&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del lema es&amp;quot;&lt;br /&gt;
lemma snoc_append: &amp;quot;snoc xs a = xs @ [a]&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar el siguiente teorema &lt;br /&gt;
     rev (x # xs) = snoc (rev xs) x&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del teorema es&amp;quot;&lt;br /&gt;
theorem rev_cons_auto: &amp;quot;rev (x # xs) = snoc (rev xs) x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del teorema es&amp;quot;&lt;br /&gt;
theorem rev_cons: &amp;quot;rev (x # xs) = snoc (rev xs) x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
section {* Cuantificadores sobre listas *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. 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 la lista &lt;br /&gt;
  xs cumplen la propiedad p. Por ejemplo, se verifica &lt;br /&gt;
     todos (λx. 1&amp;lt;length x) [[2,1,4],[1,3]]&lt;br /&gt;
     ¬ todos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función todos es equivalente a la predefinida list_all. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     algunos :: (&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (algunos p xs) se verifica si algunos elementos de la lista &lt;br /&gt;
  xs cumplen la propiedad p. Por ejemplo, se verifica &lt;br /&gt;
     algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&lt;br /&gt;
     ¬ algunos (λx. 1&amp;lt;length x) [[],[3]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Nota: La función algunos es equivalente a la predefinida list_ex. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar o refutar: &lt;br /&gt;
     todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar o refutar: &lt;br /&gt;
     todos P (x @ y) = (todos P x ∧ todos P y)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma todos_append [simp]: &lt;br /&gt;
  &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar o refutar: &lt;br /&gt;
     todos P (rev xs) = todos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar o refutar:&lt;br /&gt;
    algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Se busca un contraejemplo con nitpick&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El contraejemplo encontrado es&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar o refutar: &lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P ∘ f) xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar o refutar: &lt;br /&gt;
     algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma algunos_append: &lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar: &lt;br /&gt;
     algunos P (rev xs) = algunos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Encontrar un término no trivial Z tal que sea cierta la &lt;br /&gt;
  siguiente ecuación:&lt;br /&gt;
     algunos (λx. P x ∨ Q x) xs = Z&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Solución: La ecuación se verifica eligiendo como Z el término  &lt;br /&gt;
     algunos P xs ∨ algunos Q xs&lt;br /&gt;
  En efecto,&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;De forma estructurada&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
     &lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Definir la funcion primitiva recursiva &lt;br /&gt;
     estaEn :: &amp;#039;a ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (estaEn x xs) se verifica si el elemento x está en la lista&lt;br /&gt;
  xs. Por ejemplo, &lt;br /&gt;
     estaEn (2::nat) [3,2,4] = True&lt;br /&gt;
     estaEn (1::nat) [3,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Expresar la relación existente entre estaEn y algunos. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Solución: La relación es &lt;br /&gt;
&lt;br /&gt;
  En efecto,  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Definir la función primitiva recursiva &lt;br /&gt;
     sinDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (sinDuplicados xs) se verifica si la lista xs no contiene&lt;br /&gt;
  duplicados. Por ejemplo,  &lt;br /&gt;
     sinDuplicados [1::nat,4,2]   = True&lt;br /&gt;
     sinDuplicados [1::nat,4,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Definir la función primitiva recursiva &lt;br /&gt;
     borraDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (borraDuplicados xs) es la lista obtenida eliminando los&lt;br /&gt;
  elementos duplicados de la lista xs. Por ejemplo, &lt;br /&gt;
     borraDuplicados [1::nat,2,4,2,3] = [1,4,2,3]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borraDuplicados es equivalente a la predefinida remdups. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar o refutar:&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma length_borraDuplicados: &lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Demostrar o refutar: &lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados_auto: &lt;br /&gt;
  &amp;quot;estaEn a (borraDuplicados xs) = estaEn a xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados: &lt;br /&gt;
  &amp;quot;estaEn a (borraDuplicados xs) = estaEn a xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Demostrar o refutar: &lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática&amp;quot;&lt;br /&gt;
lemma &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Demostrar o refutar:&lt;br /&gt;
    borraDuplicados (rev xs) = rev (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borraDuplicados (rev xs) = rev (borraDuplicados xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_11&amp;diff=321</id>
		<title>Relación 11</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_11&amp;diff=321"/>
		<updated>2018-07-16T07:49:51Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Texto reemplazado: «&amp;quot;isar&amp;quot;» por «&amp;quot;isabelle&amp;quot;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* Razonamiento sobre programas en Isabelle *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_11&lt;br /&gt;
imports Main Efficient_Nat&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* ----------------------------------------------------------------&lt;br /&gt;
  Ejercicio 1. Definir, por recursión, la función&lt;br /&gt;
     longitud :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&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;
primrec suma :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;suma [] = 0&amp;quot;&lt;br /&gt;
| &amp;quot;suma (x#xs) = x + suma xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar que &lt;br /&gt;
     longitud [4,2,5] = 3&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;longitud [4,2,5] = 3&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     fun intercambia :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot;&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;
     &amp;quot;intercambia (2,3) = (3,2)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
primrec intercambia :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia (x,y) = (y,x)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar que &lt;br /&gt;
     intercambia (intercambia (x,y)) = (x,y)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;intercambia (intercambia (x,y)) = (x,y)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir, por recursión, la función&lt;br /&gt;
     inversa :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&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 [3,2,5] = [5,2,3]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
primrec 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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que &lt;br /&gt;
     inversa [x] = [x]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;inversa [x] = [x]&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     repite :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  tal que . Por ejemplo,&lt;br /&gt;
     repite 3 5 = [5,5,5]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text{*&lt;br /&gt;
&lt;br /&gt;
primrec 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;
despues de muchas pruebas no entiendo por que no la acepta.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que &lt;br /&gt;
     longitud (repite n x) = n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     fun conc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que . Por ejemplo,&lt;br /&gt;
     conc [2,3] [4,3,5] = [2,3,4,3,5]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
primrec conc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc [] xs = xs&amp;quot;&lt;br /&gt;
  |&amp;quot;conc (x#xs) xt = x#(conc xs xt)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que &lt;br /&gt;
     conc xs (conc ys zs) = (conc xs ys) zs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;conc xs (conc ys zs) = conc (conc xs ys) zs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Refutar que &lt;br /&gt;
     conc xs ys = conc ys xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;conc xs ys = conc ys xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text{*&lt;br /&gt;
refute no es capaz de encontrar nada para refutarlo. Es obvio, nada mas cargar el lemma quickcheck te da un contraejemplo.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que &lt;br /&gt;
     conc xs [] = xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;conc xs [] = xs&amp;quot;&lt;br /&gt;
by (induct xs) auto &lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar que &lt;br /&gt;
     longitud (conc xs ys) = longitud xs + longitud ys&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;longitud (conc xs ys) = longitud xs + longitud ys&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Definir la función&lt;br /&gt;
     coge :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&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 [3,7,5,4] = [3,7]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text{*&lt;br /&gt;
&lt;br /&gt;
me ocurre lo mismo que con la funcion repite del ejercicio 7, hay algo que no se hacer bien.&lt;br /&gt;
&lt;br /&gt;
primrec 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 (suc n) (x#xs) = x#(coge n xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Definir la función&lt;br /&gt;
     elimina :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&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;
     elimina 2 [3,7,5,4] = [5,4]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar que &lt;br /&gt;
     conc (coge n xs) (elimina n xs) = xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Definir la función&lt;br /&gt;
     esVacia :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar que &lt;br /&gt;
     esVacia xs = esVacia (conc xs xs)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Definir la función&lt;br /&gt;
     inversaAc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inversaAc xs) es a inversa de xs calculada usando&lt;br /&gt;
  acumuladores. Por ejemplo, &lt;br /&gt;
     inversaAc [3,2,5] = [5,2,3]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Demostrar que &lt;br /&gt;
     inversaAcAux xs ys = (inversa xs)@ys&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Demostrar que &lt;br /&gt;
     inversaAc xs = inversa xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Definir la función&lt;br /&gt;
     sum :: &amp;quot;int list ⇒ int&amp;quot; &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. 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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Demostrar que &lt;br /&gt;
     sum (map (λx. 2*x) xs) = 2 * (sum xs)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Demostrar que &lt;br /&gt;
     longitud (map f xs) = longitud xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Definir la función&lt;br /&gt;
     sumaImpares :: &amp;quot;nat ⇒ nat&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Demostrar que &lt;br /&gt;
     sumaImpares n = n*n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Definir la función&lt;br /&gt;
     sumaPotenciasDeDosMasUno :: &amp;quot;nat ⇒ nat&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Demostrar que &lt;br /&gt;
     sumaPotenciasDeDosMasUno n = 2^(n+1)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. Definir la función&lt;br /&gt;
     copia :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot;&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 2 = [2,2,2]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Definir la función&lt;br /&gt;
     todos :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. 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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Definir la función&lt;br /&gt;
    factR :: &amp;quot;nat ⇒ nat&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Se considera la siguiente definición iterativa de la&lt;br /&gt;
  función factorial &lt;br /&gt;
     factI :: Integer -&amp;gt; Integer&lt;br /&gt;
     factI n = factI&amp;#039; n 1&lt;br /&gt;
     &lt;br /&gt;
     factI&amp;#039; :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
     factI&amp;#039; 0     x = x                  -- factI&amp;#039;.1&lt;br /&gt;
     factI&amp;#039; (n+1) x = factI&amp;#039; n (n+1)*x   -- factI&amp;#039;.2&lt;br /&gt;
  Comprobar con QuickCheck que factI y factR son equivalentes sobre los&lt;br /&gt;
  números naturales.&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
     &lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Demostrar que, para todo n y todo x, se tiene &lt;br /&gt;
     factI&amp;#039; n x = x * factR n&lt;br /&gt;
  y, como corolario, que&lt;br /&gt;
     factI n = factR n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Definir, recursivamente y sin usar (@). la función&lt;br /&gt;
     amplia :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot;&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 [2,5] 3 = [2,5,3]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Demostrar que &lt;br /&gt;
     amplia xs y = xs @ [y]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_8&amp;diff=319</id>
		<title>Rel 8</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_8&amp;diff=319"/>
		<updated>2018-07-16T07:49:38Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Texto reemplazado: «&amp;quot;isar&amp;quot;» por «&amp;quot;isabelle&amp;quot;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
theory Relacion_8&lt;br /&gt;
imports Main Efficient_Nat Relacion_3&lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
section {* Suma y aplanamiento de listas *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     suma :: &amp;quot;nat list ⇒ nat&amp;quot; &lt;br /&gt;
  tal que (suma xs) es la suma de los elementos de la lista de números&lt;br /&gt;
  naturales xs. Por ejemplo, &lt;br /&gt;
     suma [3::nat,2,4] = 9&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     aplana :: &amp;quot;&amp;#039;a list list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (aplana xss) es la obtenida concatenando los miembros de la &lt;br /&gt;
  lista de listas &amp;quot;xss&amp;quot;. Por ejemplo,&lt;br /&gt;
     aplana [[2,3], [4,5], [7,9]] = [2,3,4,5,7,9]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar o refutar&lt;br /&gt;
     length (aplana xs) = suma (map length xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar&lt;br /&gt;
     suma (xs @ ys) = suma xs + suma ys&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar&lt;br /&gt;
     aplana (xs @ ys) = (aplana xs) @ (aplana ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar o refutar&lt;br /&gt;
     aplana (map rev (rev xs)) = rev (aplana xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar o refutar&lt;br /&gt;
     aplana (rev (map rev xs)) = rev (aplana xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar o refutar&lt;br /&gt;
     list_all (list_all P) xs = list_all P (aplana xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar o refutar&lt;br /&gt;
     aplana (rev xs) = aplana xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar o refutar&lt;br /&gt;
     suma (rev xs) = suma xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Buscar un predicado P para que se verifique la siguiente &lt;br /&gt;
  propiedad &lt;br /&gt;
     list_all P xs ⟶ length xs ≤ suma xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     algunos (algunos P) xs = algunos P (aplana xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Redefinir, usando la función list_all, la función&lt;br /&gt;
  algunos. Llamar la nueva función algunos2 y demostrar que es &lt;br /&gt;
  equivalente a algunos.  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_9&amp;diff=318</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_9&amp;diff=318"/>
		<updated>2018-07-16T07:49:29Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Texto reemplazado: «&amp;quot;isar&amp;quot;» por «&amp;quot;isabelle&amp;quot;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
theory Relacion_9&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
section {* Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
text {* Los ejercicios de esta relación deben de resolverse usando sólo&lt;br /&gt;
  las reglas básicas de la deducción natural proposicional: &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;
*}&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;
lemma ejercicio_1:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;  &lt;br /&gt;
proof -&lt;br /&gt;
from 1 and 2 show &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_1b:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;  &lt;br /&gt;
proof -&lt;br /&gt;
  from 1 and 2 have q: &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
  from q show &amp;quot;q&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;q⟶r&amp;quot; and &lt;br /&gt;
          3: &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  from 1 and 3 have 4:&amp;quot;q&amp;quot; by (rule ejercicio_1)&lt;br /&gt;
  from 2 and 4 have 5:&amp;quot;r&amp;quot; by (rule ejercicio_1)&lt;br /&gt;
  from 5 show &amp;quot;r&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶(q⟶r)&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p⟶q&amp;quot; and  &lt;br /&gt;
          3: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  from 1 and 3 have qr:&amp;quot;q⟶r&amp;quot; by (rule ejercicio_1)&lt;br /&gt;
  from 2 and qr and 3 have r:&amp;quot;r&amp;quot; by (rule ejercicio_2)&lt;br /&gt;
  from r show &amp;quot;r&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;q⟶r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p⟶r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume p:&amp;quot;p&amp;quot;&lt;br /&gt;
  from 1 and 2 and p have r:&amp;quot;r&amp;quot; by (rule ejercicio_2)&lt;br /&gt;
  from r show &amp;quot;r&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶(q⟶r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q⟶(p⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶(q⟶r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;(p⟶q)⟶(p⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;q⟶p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_8:&lt;br /&gt;
  &amp;quot;p⟶(q⟶p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q&amp;quot;  &lt;br /&gt;
  shows &amp;quot;(q⟶r)⟶(p⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶(q⟶(r⟶s))&amp;quot;&lt;br /&gt;
  shows &amp;quot;r⟶(q⟶(p⟶s))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_11:&lt;br /&gt;
  &amp;quot;(p⟶(q⟶r))⟶((p⟶q)⟶(p⟶r))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes 1: &amp;quot;(p⟶q)⟶r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p⟶(q⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot; and  &lt;br /&gt;
          2: &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∧q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes 1: &amp;quot;p∧q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes 1: &amp;quot;p∧q&amp;quot; &lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes 1: &amp;quot;p∧(q∧r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p∧q)∧r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes 1: &amp;quot;(p∧q)∧r&amp;quot;&lt;br /&gt;
  shows &amp;quot;p∧(q∧r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes 1: &amp;quot;p∧q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes 1: &amp;quot;(p⟶q)∧(p⟶r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;p⟶q∧r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q∧r&amp;quot; &lt;br /&gt;
  shows &amp;quot;(p⟶q)∧(p⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶(q⟶r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∧q⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes 1: &amp;quot;p∧q⟶r&amp;quot;  &lt;br /&gt;
  shows &amp;quot;p⟶(q⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes 1: &amp;quot;(p⟶q)⟶r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∧q⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_24:&lt;br /&gt;
  assumes 1: &amp;quot;p∧(q⟶r)&amp;quot;  &lt;br /&gt;
  shows &amp;quot;(p⟶q)⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_25:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∨q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_26:&lt;br /&gt;
  assumes 1: &amp;quot;q&amp;quot;  &lt;br /&gt;
  shows &amp;quot;p∨q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_27:&lt;br /&gt;
  assumes 1: &amp;quot;p∨q&amp;quot; &lt;br /&gt;
  shows &amp;quot;q∨p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_28:&lt;br /&gt;
  assumes 1: &amp;quot;q⟶r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∨q⟶p∨r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_29:&lt;br /&gt;
  assumes 1: &amp;quot;p∨p&amp;quot; &lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_30:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∨p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_31:&lt;br /&gt;
  assumes 1: &amp;quot;p∨(q∨r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p∨q)∨r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_32:&lt;br /&gt;
  assumes 1: &amp;quot;(p∨q)∨r&amp;quot;&lt;br /&gt;
  shows &amp;quot;p∨(q∨r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_33:&lt;br /&gt;
  assumes 1: &amp;quot;p∧(q∨r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;(p∧q)∨(p∧r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_34:&lt;br /&gt;
  assumes 1: &amp;quot;(p∧q)∨(p∧r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∧(q∨r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_35:&lt;br /&gt;
  assumes 1: &amp;quot;p∨(q∧r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p∨q)∧(p∨r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_36:&lt;br /&gt;
  assumes 1: &amp;quot;(p∨q)∧(p∨r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;p∨(q∧r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_37:&lt;br /&gt;
  assumes 1: &amp;quot;(p⟶r)∧(q⟶r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∨q⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_38:&lt;br /&gt;
  assumes 1: &amp;quot;p∨q⟶r&amp;quot;  &lt;br /&gt;
  shows &amp;quot;(p⟶r)∧(q⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_39:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_40:&lt;br /&gt;
  assumes 1: &amp;quot;¬p&amp;quot;  &lt;br /&gt;
  shows &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_41:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬q⟶¬p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_42:&lt;br /&gt;
  assumes 1: &amp;quot;p∨q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_43:&lt;br /&gt;
  assumes 1: &amp;quot;p∨q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_44:&lt;br /&gt;
  assumes 1: &amp;quot;p∨q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(¬p∧¬q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_45:&lt;br /&gt;
  assumes 1: &amp;quot;p∧q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(¬p∨¬q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_46:&lt;br /&gt;
  assumes 1: &amp;quot;¬(p∨q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬p∧¬q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_47:&lt;br /&gt;
  assumes 1: &amp;quot;¬p∧¬q&amp;quot;  &lt;br /&gt;
  shows &amp;quot;¬(p∨q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_48:&lt;br /&gt;
  assumes 1: &amp;quot;¬p∨¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p∧q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_49:&lt;br /&gt;
  &amp;quot;¬(p∧¬p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_50:&lt;br /&gt;
  assumes 1: &amp;quot;p∧¬p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_51:&lt;br /&gt;
  assumes 1: &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_52:&lt;br /&gt;
  &amp;quot;p∨¬p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_53:&lt;br /&gt;
  &amp;quot;((p⟶q)⟶p)⟶p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_54:&lt;br /&gt;
  assumes 1: &amp;quot;¬q⟶¬p&amp;quot;&lt;br /&gt;
  shows &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_55:&lt;br /&gt;
  assumes 1: &amp;quot;¬(¬p∧¬q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;p∨q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_56:&lt;br /&gt;
  assumes 1: &amp;quot;¬(¬p∨¬q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;p∧q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_57:&lt;br /&gt;
  assumes 1: &amp;quot;¬(p∧q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬p∨¬q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_58:&lt;br /&gt;
  &amp;quot;(p⟶q)∨(q⟶p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_2&amp;diff=317</id>
		<title>Rel 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_2&amp;diff=317"/>
		<updated>2018-07-16T07:49:28Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* 2ª relación de ejercicios *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_2&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Demostrar o refutar los siguientes lemas usando sólo las reglas&lt;br /&gt;
  básicas de deducción natural de la lógica proposicional y de la lógica&lt;br /&gt;
  de predicados (allI, allE, exI y exE). &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(∃x. ∀y. P x y) ⟶ (∀y. ∃x. P x y)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(∀x. P x ⟶ Q) = ((∃x. P x) ⟶ Q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;((∀ x. P x) ∧ (∀ x. Q x)) = (∀ x. (P x ∧ Q x))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;((∀ x. P x) ∨ (∀ x. Q x)) = (∀ x. (P x ∨ Q x))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;((∃ x. P x) ∨ (∃ x. Q x)) = (∃ x. (P x ∨ Q x))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(∀x. ∃y. P x y) ⟶ (∃y. ∀x. P x y)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(¬ (∀ x. P x)) = (∃ x. ¬ P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Deducci%C3%B3n_natural_en_l%C3%B3gica_de_primer_orden_con_Isabelle/Isar&amp;diff=315</id>
		<title>Deducción natural en lógica de primer orden con Isabelle/Isar</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Deducci%C3%B3n_natural_en_l%C3%B3gica_de_primer_orden_con_Isabelle/Isar&amp;diff=315"/>
		<updated>2018-07-16T07:48:47Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En esta teoría se presenta una formalización en Isabelle/Isar de los ejemplos del tema de deducción natural proposicional siguiendo la presentación de Huth y Ryan en su libro [http://www.cs.bham.ac.uk/research/projects/lics Logic in Computer Science] y, más concretamente, a la forma como se explica en la asignatura de [http://www.cs.us.es/~jalonso/cursos/li-10 Lógica informática] y que puede verse en las [http://www.cs.us.es/~jalonso/cursos/li-10/temas/tema-7.pdf transparencias del tema 7].&lt;br /&gt;
 &lt;br /&gt;
La páginas en los teorema indican la página de las anteriores transparencias donde se encuentra la demostración.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* Deducción natural en la lógica de primer orden *}&lt;br /&gt;
&lt;br /&gt;
theory LogicaDePrimerOrden&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Reglas del cuantificador universal *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de eliminación del cuantificador universal es&lt;br /&gt;
  · allI: ⟦∀x. P x; P x ⟹ R⟧ ⟹ R&lt;br /&gt;
  La regla de introducción del cuantificador universal es&lt;br /&gt;
  · allE: (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 10&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;P(c)&amp;quot; and &lt;br /&gt;
          2: &amp;quot;∀x. P(x) ⟶ ¬Q(x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬Q(c)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 3: &amp;quot;Q(c)&amp;quot;&lt;br /&gt;
  have &amp;quot;P(c) ⟶ ¬Q(c)&amp;quot; using 2 by (rule allE)&lt;br /&gt;
  hence &amp;quot;¬Q(c)&amp;quot; using 1 by (rule mp)&lt;br /&gt;
  thus False using 3 by (rule notE)&lt;br /&gt;
qed &lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 11&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;∀x. P(x) ⟶ Q(x)&amp;quot; and  &lt;br /&gt;
          2: &amp;quot;∀x. P(x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. Q(x)&amp;quot;&lt;br /&gt;
proof (rule allI)&lt;br /&gt;
  fix x&lt;br /&gt;
  have 3: &amp;quot;P(x) ⟶ Q(x)&amp;quot; using 1 by (rule allE)&lt;br /&gt;
  have 4: &amp;quot;P(x)&amp;quot; using 2 by (rule allE)&lt;br /&gt;
  show &amp;quot;Q(x)&amp;quot; using 3 4 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Reglas del cuantificador existencial *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de eliminación del cuantificador existencial es&lt;br /&gt;
  · exI: P x ⟹ ∃x. P x&lt;br /&gt;
  La regla de introducción del cuantificador existencial es&lt;br /&gt;
  · exE: ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 12&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;∀x. P(x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P(x)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: &amp;quot;P(x)&amp;quot; using 1 by (rule allE)&lt;br /&gt;
  show &amp;quot;∃x. P(x)&amp;quot; using 2 by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 12&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;∀x. P(x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P(x)&amp;quot;&lt;br /&gt;
proof (rule exI) &lt;br /&gt;
  show &amp;quot;P(x)&amp;quot; using 1 by (rule allE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 12&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;∀x. P(x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P(x)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  show &amp;quot;P(x)&amp;quot; using 1 ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 13&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;∀x. P(x) ⟶ Q(x)&amp;quot; and  &lt;br /&gt;
          2: &amp;quot;∃x. P(x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. Q(x)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  obtain &amp;quot;a&amp;quot; where 3: &amp;quot;P(a)&amp;quot; using 2 by (rule exE)&lt;br /&gt;
  have 4: &amp;quot;P(a) ⟶ Q(a)&amp;quot; using 1 by (rule allE)&lt;br /&gt;
  have 5: &amp;quot;Q(a)&amp;quot; using 4 3 by (rule mp)&lt;br /&gt;
  show &amp;quot;∃x. Q(x)&amp;quot; using 5 by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;∀x. Q(x) ⟶ R(x)&amp;quot; and  &lt;br /&gt;
          2: &amp;quot;∃x. P(x) ∧ Q(x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P(x) ∧ R(x)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  obtain x where 3: &amp;quot;P(x) ∧ Q(x)&amp;quot; using 2 by (rule exE)&lt;br /&gt;
  have 5: &amp;quot;P(x)&amp;quot; using 3 by (rule conjunct1)&lt;br /&gt;
  have 6: &amp;quot;Q(x) ⟶ R(x)&amp;quot; using 1 by (rule allE)&lt;br /&gt;
  have 7: &amp;quot;Q(x)&amp;quot; using  3 by (rule conjunct2)&lt;br /&gt;
  have 8: &amp;quot;R(x)&amp;quot; using 6 7 by (rule mp)&lt;br /&gt;
  have 9: &amp;quot;P(x) ∧ R(x)&amp;quot; using 5 8 by (rule conjI)&lt;br /&gt;
  show &amp;quot;∃x. P(x) ∧ R(x)&amp;quot; using 9 by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;∃x. P(x)&amp;quot; and  &lt;br /&gt;
          2: &amp;quot;∀x.∀y. P(x) ⟶ Q(y)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀y. Q(y)&amp;quot;&lt;br /&gt;
proof (rule allI)&lt;br /&gt;
  fix y&lt;br /&gt;
  obtain x where 3: &amp;quot;P(x)&amp;quot; using 1 by (rule exE)&lt;br /&gt;
  have 4: &amp;quot;∀y. P(x) ⟶ Q(y)&amp;quot; using 2 by (rule allE)&lt;br /&gt;
  have 5: &amp;quot;P(x) ⟶ Q(y)&amp;quot; using 4 by (rule allE)&lt;br /&gt;
  show &amp;quot;Q(y)&amp;quot; using 5 3 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Equivalencias *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;p. 15&amp;quot;&lt;br /&gt;
lemma equivalencia_1a1:&lt;br /&gt;
  assumes 1: &amp;quot;¬(∀x. P(x))&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. ¬P(x)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 2: &amp;quot;¬(∃x. ¬P(x))&amp;quot;&lt;br /&gt;
  note 1&lt;br /&gt;
  thus False&lt;br /&gt;
  proof (rule notE)&lt;br /&gt;
    show &amp;quot;∀x. P(x)&amp;quot;&lt;br /&gt;
    proof (rule allI)&lt;br /&gt;
      fix x&lt;br /&gt;
      show &amp;quot;P(x)&amp;quot;&lt;br /&gt;
      proof (rule ccontr)&lt;br /&gt;
        assume 3: &amp;quot;¬P(x)&amp;quot;&lt;br /&gt;
        have 4: &amp;quot;∃x. ¬P(x)&amp;quot; using 3 by (rule exI)&lt;br /&gt;
        show False using 2 4 by (rule notE)&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;p. 16&amp;quot;&lt;br /&gt;
lemma equivalencia_1a2:&lt;br /&gt;
  assumes 1: &amp;quot;∃x. ¬P(x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∀x. P(x))&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 2: &amp;quot;¬¬(∀x. P(x))&amp;quot;&lt;br /&gt;
  obtain x where 3: &amp;quot;¬P(x)&amp;quot; using 1 by (rule exE)&lt;br /&gt;
  have 4: &amp;quot;∀x. P(x)&amp;quot; using 2 by (rule notnotD)&lt;br /&gt;
  have 5: &amp;quot;P(x)&amp;quot; using 4 by (rule allE)&lt;br /&gt;
  show False using 3 5 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;p. 17&amp;quot;&lt;br /&gt;
theorem equivalencia_1a:&lt;br /&gt;
  &amp;quot;(¬(∀x. P(x))) = (∃x. ¬P(x))&amp;quot;&lt;br /&gt;
proof (rule iffI)&lt;br /&gt;
  { assume &amp;quot;¬(∀x. P x)&amp;quot;&lt;br /&gt;
    thus &amp;quot;∃x. ¬P x&amp;quot; by (rule equivalencia_1a1)}&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;∃x. ¬P x&amp;quot;&lt;br /&gt;
    thus &amp;quot;¬(∀x. P x)&amp;quot; by (rule equivalencia_1a2) }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;p. 18&amp;quot;&lt;br /&gt;
lemma equivalencia_3a1:&lt;br /&gt;
  assumes 1: &amp;quot;∀x. P(x) ∧ Q(x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∀x. P(x)) ∧ (∀x. Q(x))&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show &amp;quot;∀x. P(x)&amp;quot;&lt;br /&gt;
  proof (rule allI)&lt;br /&gt;
    fix x&lt;br /&gt;
    have 2: &amp;quot;P(x) ∧ Q(x)&amp;quot; using 1 by (rule allE)&lt;br /&gt;
    show &amp;quot;P(x)&amp;quot; using 2 by (rule conjunct1) &lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;∀x. Q(x)&amp;quot;&lt;br /&gt;
  proof (rule allI)&lt;br /&gt;
    fix x&lt;br /&gt;
    have 3: &amp;quot;P(x) ∧ Q(x)&amp;quot; using 1 by (rule allE)&lt;br /&gt;
    show &amp;quot;Q(x)&amp;quot; using 3 by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;p. 19&amp;quot;&lt;br /&gt;
lemma equivalencia_3a2:&lt;br /&gt;
  assumes 1: &amp;quot;(∀x. P(x)) ∧ (∀x. Q(x))&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P(x) ∧ Q(x)&amp;quot;&lt;br /&gt;
proof (rule allI)&lt;br /&gt;
  fix x&lt;br /&gt;
  have 2: &amp;quot;∀x. P(x)&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;∀x. Q(x)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 4: &amp;quot;P(x)&amp;quot; using 2 by (rule allE)&lt;br /&gt;
  have 5: &amp;quot;Q(x)&amp;quot; using 3 by (rule allE)&lt;br /&gt;
  show &amp;quot;P(x) ∧ Q(x)&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;p. 20&amp;quot; &lt;br /&gt;
lemma equivalencia_3a:&lt;br /&gt;
  &amp;quot;(∀x. P(x) ∧ Q(x)) = ((∀x. P(x)) ∧ (∀x. Q(x)))&amp;quot;&lt;br /&gt;
proof (rule iffI)&lt;br /&gt;
  { assume &amp;quot;∀x. P(x) ∧ Q(x)&amp;quot;&lt;br /&gt;
    thus &amp;quot;(∀x. P(x)) ∧ (∀x. Q(x))&amp;quot; by (rule equivalencia_3a1) }&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;(∀x. P(x)) ∧ (∀x. Q(x))&amp;quot;&lt;br /&gt;
    thus &amp;quot;∀x. P(x) ∧ Q(x)&amp;quot; by (rule equivalencia_3a2) }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;p. 21&amp;quot;&lt;br /&gt;
lemma equivalencia_3b1: &lt;br /&gt;
  assumes 1: &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P(x) ∨ Q(x)&amp;quot;&lt;br /&gt;
using 1&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  { assume &amp;quot;∃x. P(x)&amp;quot;&lt;br /&gt;
    then obtain x where &amp;quot;P(x)&amp;quot; by (rule exE)&lt;br /&gt;
    hence &amp;quot;P(x) ∨ Q(x)&amp;quot; by (rule disjI1)&lt;br /&gt;
    thus &amp;quot;∃x. P(x) ∨ Q(x)&amp;quot; by (rule exI) }&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;∃x. Q(x)&amp;quot;&lt;br /&gt;
    then obtain x where &amp;quot;Q(x)&amp;quot; by (rule exE)&lt;br /&gt;
    hence &amp;quot;P(x) ∨ Q(x)&amp;quot; by (rule disjI2)&lt;br /&gt;
    thus &amp;quot;∃x. P(x) ∨ Q(x)&amp;quot; by (rule exI) }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;p. 22&amp;quot;&lt;br /&gt;
lemma equivalencia_3b2:&lt;br /&gt;
  assumes 1: &amp;quot;∃x. P(x) ∨ Q(x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  obtain x where 2: &amp;quot;P(x) ∨ Q(x)&amp;quot; using 1 by (rule exE)&lt;br /&gt;
  thus &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot;&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    { assume &amp;quot;P(x)&amp;quot;&lt;br /&gt;
      hence &amp;quot;∃x. P(x)&amp;quot; by (rule exI)&lt;br /&gt;
      thus &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot; by (rule disjI1) }&lt;br /&gt;
  next&lt;br /&gt;
    { assume &amp;quot;Q(x)&amp;quot;&lt;br /&gt;
      hence &amp;quot;∃x. Q(x)&amp;quot; by (rule exI)&lt;br /&gt;
      thus &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot; by (rule disjI2) }&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;p. 23&amp;quot;&lt;br /&gt;
lemma equivalencia_3b:&lt;br /&gt;
  &amp;quot;((∃x. P(x)) ∨ (∃x. Q(x))) = (∃x. P(x) ∨ Q(x))&amp;quot;&lt;br /&gt;
proof (rule iffI)&lt;br /&gt;
  { assume &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot;&lt;br /&gt;
    thus &amp;quot;∃x. P(x) ∨ Q(x)&amp;quot; by (rule equivalencia_3b1) }&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;∃x. P(x) ∨ Q(x)&amp;quot;&lt;br /&gt;
    thus &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot; by (rule equivalencia_3b2) }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;p. 24&amp;quot;&lt;br /&gt;
lemma equivalencia_4b1:&lt;br /&gt;
  assumes 1: &amp;quot;∃x.∃y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃y.∃x. P x y&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  obtain x where &amp;quot;∃y. P x y&amp;quot; using 1 by (rule exE)&lt;br /&gt;
  then obtain y where &amp;quot;P x y&amp;quot; by (rule exE)&lt;br /&gt;
  hence &amp;quot;∃x. P x y&amp;quot; by (rule exI)&lt;br /&gt;
  thus &amp;quot;∃y.∃x. P x y&amp;quot; by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;p. 25&amp;quot;&lt;br /&gt;
theorem equivalencia_4b:&lt;br /&gt;
  &amp;quot;(∃x.∃y. P x y) = (∃y.∃x. P x y)&amp;quot;&lt;br /&gt;
proof (rule iffI)&lt;br /&gt;
  { assume &amp;quot;∃x.∃y. P x y&amp;quot;&lt;br /&gt;
    thus &amp;quot;∃y.∃x. P x y&amp;quot; by (rule equivalencia_4b1) }&lt;br /&gt;
next&lt;br /&gt;
  {assume &amp;quot;∃y.∃x. P x y&amp;quot;&lt;br /&gt;
    thus &amp;quot;∃x.∃y. P x y&amp;quot; by (rule equivalencia_4b1) }&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>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_4&amp;diff=316</id>
		<title>Relación 4</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_4&amp;diff=316"/>
		<updated>2018-07-16T07:48:47Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Texto reemplazado: «&amp;quot;isar&amp;quot;» por «&amp;quot;isabelle&amp;quot;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* 4ª relación de ejercicios *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_4&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
primrec sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (w#zs) = (if w=x then y#(sust x y zs) else w#(sust x y zs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar o refutar: &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --Usando la sentencia refute puede obtenerse un contraejemplo fácilmente.&lt;br /&gt;
  --Además, al ejecutarse con la aplicación, ya directamente propone un contraejemplo.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma sust_append_auto: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
refute&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs @ ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar o refutar: &lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
theorem &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
refute&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
theorem rev_sust: &lt;br /&gt;
  &amp;quot;rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
refute&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
refute&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
primrec borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (w#ys) = (if x=w then ys else (w#(borra x ys)))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
primrec borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (w#ys) = (if x=w then (borraTodas x ys) else (w#(borraTodas x ys)))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar o refutar: &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
theorem &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
refute&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
theorem &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar o refutar:&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
theorem &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
refute&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
theorem &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar o refutar:&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
theorem borraTodas_borra_auto: &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
theorem borraTodas_borra:&lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
    &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar o refutar: &lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
theorem &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
theorem &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar el teorema: &lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
theorem &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs arbitrary: ) (auto simp add: borraTodas_borra_auto)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
theorem &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar:&lt;br /&gt;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
La igualdad propuesta es falsa.&lt;br /&gt;
El contraejemplo que encuentra Quickcheck es (retocándolo para que no dé&lt;br /&gt;
problemas al exportarlo a Isabelle):&lt;br /&gt;
y = a1&lt;br /&gt;
x = a2&lt;br /&gt;
xs = [a1]&lt;br /&gt;
El contraejemplo que encuentra Refute es idéntico salvo cambio de nombres:&lt;br /&gt;
x = a1&lt;br /&gt;
xs = [a2]&lt;br /&gt;
y = a2&lt;br /&gt;
Análogamente, el contraejemplo que encuentra Refute es idéntico salvo cambio de nombres:&lt;br /&gt;
y: a0&lt;br /&gt;
x: a1&lt;br /&gt;
xs: [a0]&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
La igualdad propuesta es falsa.&lt;br /&gt;
El contraejemplo que encuentra Quickcheck es (retocándolo para que no dé&lt;br /&gt;
problemas al exportarlo a Isabelle):&lt;br /&gt;
y = a1&lt;br /&gt;
x = a2&lt;br /&gt;
xs = [a1]&lt;br /&gt;
El contraejemplo que encuentra Refute es idéntico salvo cambio de nombres:&lt;br /&gt;
x = a1&lt;br /&gt;
xs = [a2]&lt;br /&gt;
y = a2&lt;br /&gt;
Análogamente, el contraejemplo que encuentra Refute es idéntico salvo cambio de nombres:&lt;br /&gt;
y: a0&lt;br /&gt;
x: a1&lt;br /&gt;
xs: [a0]&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
theorem &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
theorem sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x []) = borraTodas x []&amp;quot; by auto&lt;br /&gt;
    next&lt;br /&gt;
      show &amp;quot;⋀a zs. sust x y (borraTodas x zs) = borraTodas x zs ⟹&lt;br /&gt;
           sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
 Para este ejercicio quickcheck encuentra el siguiente contraejemplo:&lt;br /&gt;
 zs = [0]&lt;br /&gt;
 z = 1&lt;br /&gt;
 y = 1&lt;br /&gt;
 x = 0&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar o refutar el teorema: &lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma borraTodas_append_auto:&lt;br /&gt;
&amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma borraTodas_append: &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar o refutar el teorema: &lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
theorem &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs arbitrary: x) (auto simp add: borraTodas_append_auto)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
theorem &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_10&amp;diff=314</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_10&amp;diff=314"/>
		<updated>2018-07-16T07:48:15Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Texto reemplazado: «&amp;quot;isar&amp;quot;» por «&amp;quot;isabelle&amp;quot;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
theory Relacion_10&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
section {* Deducción natural de primer orden *}&lt;br /&gt;
&lt;br /&gt;
text {* Los ejercicios de esta relación deben de resolverse usando sólo&lt;br /&gt;
  las reglas básicas de la deducción natural proposicional y de primer &lt;br /&gt;
  orden:&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;
  · allI:       ⟦∀x. P x; P x ⟹ R⟧ ⟹ R&lt;br /&gt;
  · allE:       (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
  · exI:        P x ⟹ ∃x. P x&lt;br /&gt;
  · exE:        ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&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;
lemma ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∀x. P x) ⟶ (∀x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;∃x. ¬P x&amp;quot; &lt;br /&gt;
  shows &amp;quot; ¬(∀x. P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;∀x. P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀y. P y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∀x. ¬Q x) ⟶ (∀x. ¬P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ ¬Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∃x. P x ∧ Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes &amp;quot;∀x. ∀y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀u. ∀v. P u v&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes &amp;quot;∃x. ∃y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃u. ∃v. P u v&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_8:&lt;br /&gt;
  assumes &amp;quot;∃x. ∀y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀y. ∃x. P x y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes &amp;quot;∃x. P a ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;P a ⟶ (∃x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes &amp;quot;P a ⟶ (∃x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_11:&lt;br /&gt;
  assumes &amp;quot;(∃x. P x) ⟶ Q a&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P x ⟶ Q a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q a&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P x ⟶ Q a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes &amp;quot;(∀x. P x) ∨ (∀x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P x ∨ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes &amp;quot;∃x. P x ∧ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∃x. P x) ∧ (∃x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes &amp;quot;∀x.∀y. P y ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∃y. P y) ⟶ (∀x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes &amp;quot;¬(∀x. ¬P x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes &amp;quot;∀x. ¬P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∃x. P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes &amp;quot;∃x. P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∀x. ¬P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes &amp;quot;P a ⟶ (∀x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes &amp;quot;∀x.∀y.∀z. R x y ∧ R y z ⟶ R x z&amp;quot; and&lt;br /&gt;
          &amp;quot;∀x. ¬R x x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x.∀y. R x y ⟶ ¬R y x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ∨ Q x&amp;quot; and&lt;br /&gt;
          &amp;quot;∃x. ¬Q x&amp;quot; and&lt;br /&gt;
          &amp;quot;∀x. R x ⟶ ¬P x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. ¬R x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x ∨ R x&amp;quot; and&lt;br /&gt;
          &amp;quot;¬(∃x. P x ∧ R x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. P x ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes &amp;quot;∃x.∃y. R x y ∨ R y x&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x.∃y. R x y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Deducci%C3%B3n_natural_en_l%C3%B3gica_proposicional_con_Isabelle/Isar&amp;diff=312</id>
		<title>Deducción natural en lógica proposicional con Isabelle/Isar</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Deducci%C3%B3n_natural_en_l%C3%B3gica_proposicional_con_Isabelle/Isar&amp;diff=312"/>
		<updated>2018-07-16T07:48:14Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En esta teoría se presentan los ejemplos del tema de deducción natural proposicional siguiendo la presentación de Huth y Ryan en su libro [http://www.cs.bham.ac.uk/research/projects/lics Logic in Computer Science] y, más concretamente, a la forma como se explica en la asignatura de [http://www.cs.us.es/~jalonso/cursos/li-10 Lógica informática] y que puede verse en  &lt;br /&gt;
las [http://www.cs.us.es/~jalonso/cursos/li-10/temas/tema-2.pdf transparencias del tema 2].&lt;br /&gt;
 &lt;br /&gt;
La página al lado de cada teorema indica la página de las anteriorestransparencias donde se encuentra la demostración.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory LogicaProposicional&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Reglas de la conjunción *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de introducción de la conjunción es&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  Las reglas de eliminación de la conjunción son&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 4&amp;quot; &lt;br /&gt;
  assumes 1: &amp;quot;p ∧ q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;r&amp;quot; &lt;br /&gt;
  shows &amp;quot;q ∧ r&amp;quot;     &lt;br /&gt;
proof -&lt;br /&gt;
  have 3: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;q ∧ r&amp;quot; using 3 2 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;(p ∧ q) ∧ r&amp;quot; and &lt;br /&gt;
          2: &amp;quot;s ∧ t&amp;quot; &lt;br /&gt;
  shows &amp;quot;q ∧ s&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 3: &amp;quot;p ∧ q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 3 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;s&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  show &amp;quot;q ∧ s&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Reglas de la doble negación *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de eliminación de la doble negación es&lt;br /&gt;
  · notnotD: ¬¬ P ⟹ P&lt;br /&gt;
  Para ajustarnos al tema de LI vamos a introducir la siguiente regla de&lt;br /&gt;
  introducción de la doble negación&lt;br /&gt;
  . notnotI: P ⟹ ¬¬ P&lt;br /&gt;
  que, de momento, no detallamos su demostració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 -- &amp;quot;p. 5&amp;quot; &lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot; and &lt;br /&gt;
          2: &amp;quot;¬¬(q ∧ r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬¬p ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 3: &amp;quot;¬¬p&amp;quot; using 1 by (rule notnotI)&lt;br /&gt;
  have 4: &amp;quot;q ∧ r&amp;quot; using 2 by (rule notnotD)&lt;br /&gt;
  have 5: &amp;quot;r&amp;quot; using 4 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;¬¬p ∧ r&amp;quot; using 3 5 by (rule conjI)&lt;br /&gt;
qed        &lt;br /&gt;
&lt;br /&gt;
section {* Regla de eliminación del condicional *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de eliminación del condicional es la regla del modus ponens&lt;br /&gt;
  · mp: ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 6&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;¬p ∧ q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;¬p ∧ q ⟶ r ∨ ¬p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r ∨ ¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  show &amp;quot;r ∨ ¬p&amp;quot; using 2 1 by (rule mp)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 6&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p ⟶ q&amp;quot; and &lt;br /&gt;
          3: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 2 1 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;q ⟶ r&amp;quot; using 3 1 by (rule mp)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 5 4 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Regla derivada del modus tollens *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Para ajustarnos al tema de LI vamos a introducir la regla del modus&lt;br /&gt;
  tollens&lt;br /&gt;
  · mt: ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  sin, de momento, detallar su demostración.&lt;br /&gt;
*}&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;
lemma -- &amp;quot;p. 7&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p&amp;quot; and &lt;br /&gt;
          3: &amp;quot;¬r&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
  show &amp;quot;¬q&amp;quot; using 4 3 by (rule mt)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 7&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;¬p ⟶ q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 3: &amp;quot;¬¬p&amp;quot; using 1 2 by (rule mt)&lt;br /&gt;
  show &amp;quot;p&amp;quot; using 3 by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ ¬q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 3: &amp;quot;¬¬q&amp;quot; using 2 by (rule notnotI)&lt;br /&gt;
  show &amp;quot;¬p&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Regla de introducción del condicional *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de introducción del condicional es&lt;br /&gt;
  · impI: (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 8&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 3: &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;¬p&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
  } thus &amp;quot;¬q ⟶ ¬p&amp;quot; by (rule impI)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 8&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 3: &amp;quot;¬q&amp;quot;&lt;br /&gt;
  show &amp;quot;¬p&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 8&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume 3: &amp;quot;¬q&amp;quot;&lt;br /&gt;
  show &amp;quot;¬p&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 9&amp;quot;&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 &amp;quot;¬¬q&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
  } thus &amp;quot;p ⟶ ¬¬q&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 9&amp;quot;&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 (rule impI)&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;
  show &amp;quot;¬¬q&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 9&amp;quot;&lt;br /&gt;
  &amp;quot;p ⟶ p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 10&amp;quot;&lt;br /&gt;
  &amp;quot;(q ⟶ r) ⟶ ((¬q ⟶ ¬p) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 1: &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
    { assume 2: &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
      { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 4: &amp;quot;¬¬p&amp;quot; using 3 by (rule notnotI)&lt;br /&gt;
        have 5: &amp;quot;¬¬q&amp;quot; using 2 4 by (rule mt)&lt;br /&gt;
        have 6: &amp;quot;q&amp;quot; using 5 by (rule notnotD)&lt;br /&gt;
        have &amp;quot;r&amp;quot; using 1 6 by (rule mp) &lt;br /&gt;
      } hence &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
    } hence &amp;quot;(¬q ⟶ ¬p) ⟶ p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
  } thus &amp;quot;(q ⟶ r) ⟶ ((¬q ⟶ ¬p) ⟶ p ⟶ r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 10&amp;quot;&lt;br /&gt;
  &amp;quot;(q ⟶ r) ⟶ ((¬q ⟶ ¬p) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;(¬q ⟶ ¬p) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 2: &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
      show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
        proof (rule impI)&lt;br /&gt;
          assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
          have 4: &amp;quot;¬¬p&amp;quot; using 3 by (rule notnotI)&lt;br /&gt;
          have 5: &amp;quot;¬¬q&amp;quot; using 2 4 by (rule mt)&lt;br /&gt;
          have 6: &amp;quot;q&amp;quot; using 5 by (rule notnotD)&lt;br /&gt;
          show &amp;quot;r&amp;quot; using 1 6 by (rule mp)&lt;br /&gt;
        qed&lt;br /&gt;
    qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;p ∧ q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;p ∧ q&amp;quot; using 2 3 by (rule conjI)&lt;br /&gt;
      show &amp;quot;r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ r ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ r&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;r&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;q ∧ r&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Reglas de la disyunción *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Las reglas de la introducción de la disyunción son&lt;br /&gt;
  · disjI1: P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2: Q ⟹ P ∨ Q&lt;br /&gt;
  La regla de elimación de la disyunción es&lt;br /&gt;
  · disjE:  ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 11&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
using 1&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
    show &amp;quot;q ∨ p&amp;quot; using 2 by (rule disjI2) }&lt;br /&gt;
next&lt;br /&gt;
  { assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;q ∨ p&amp;quot; using 3 by (rule disjI1) }&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 12&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  thus &amp;quot;p ∨ r&amp;quot;&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      show &amp;quot;p ∨ r&amp;quot; using 3 by (rule disjI1) }&lt;br /&gt;
  next&lt;br /&gt;
    { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 5: &amp;quot;r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
      show &amp;quot;p ∨ r&amp;quot; using 5 by (rule disjI2) }&lt;br /&gt;
  qed&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;(p ∨ q) ∨ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
using 1&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  { assume 2: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    thus &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
    proof (rule disjE)&lt;br /&gt;
      { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
        show &amp;quot;p ∨ (q ∨ r)&amp;quot; using 3 by (rule disjI1) }&lt;br /&gt;
    next&lt;br /&gt;
      { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
        have 5: &amp;quot;q ∨ r&amp;quot; using 4 by (rule disjI1)&lt;br /&gt;
        show &amp;quot;p ∨ (q ∨ r)&amp;quot; using 5 by (rule disjI2) }&lt;br /&gt;
    qed }&lt;br /&gt;
next&lt;br /&gt;
  { assume 6: &amp;quot;r&amp;quot;&lt;br /&gt;
    have 7: &amp;quot;q ∨ r&amp;quot; using 6 by (rule disjI2)&lt;br /&gt;
    show &amp;quot;p ∨ (q ∨ r)&amp;quot; using 7 by (rule disjI2) }&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;p ∧ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: &amp;quot;p&amp;quot; using 1 ..&lt;br /&gt;
  have &amp;quot;q ∨ r&amp;quot; using 1 ..&lt;br /&gt;
  thus &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot;&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    { assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
      have &amp;quot;p ∧ q&amp;quot; using 2 3 by (rule conjI)&lt;br /&gt;
      thus &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; by (rule disjI1) }&lt;br /&gt;
  next&lt;br /&gt;
    { assume 4: &amp;quot;r&amp;quot;&lt;br /&gt;
      have &amp;quot;p ∧ r&amp;quot; using 2 4 by (rule conjI)&lt;br /&gt;
      thus &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; by (rule disjI2) }&lt;br /&gt;
  qed&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
section {* Regla de copia *}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 13&amp;quot;&lt;br /&gt;
  &amp;quot;p ⟶ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ p&amp;quot; &lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p&amp;quot; using 1 by this&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 13&amp;quot;&lt;br /&gt;
  &amp;quot;p ⟶ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  thus &amp;quot;q ⟶ p&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Reglas de la negación *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de eliminación de lo falso es&lt;br /&gt;
  · FalseE: False ⟹ P&lt;br /&gt;
  La regla de eliminación de la negación es&lt;br /&gt;
  · notE: ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  La regla de introducción de la negación es&lt;br /&gt;
  · notI: (P ⟹ False) ⟹ ¬P&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 15&amp;quot;&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;
  note 1&lt;br /&gt;
  thus &amp;quot;q&amp;quot;&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    { assume 3: &amp;quot;¬p&amp;quot;&lt;br /&gt;
      show &amp;quot;q&amp;quot; using 3 2 by (rule notE) }&lt;br /&gt;
  next&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      thus &amp;quot;q&amp;quot; by this}&lt;br /&gt;
  qed&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 16&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p ⟶ ¬q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬p&amp;quot;    &lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;¬q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
  show False using 5 4 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma  &lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ ¬p&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬p&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;¬p&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
  show False using 3 2 by (rule notE)&lt;br /&gt;
qed   &lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;p ∧ ¬q ⟶ r&amp;quot; and &lt;br /&gt;
          2: &amp;quot;¬r&amp;quot; and &lt;br /&gt;
          3: &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;q&amp;quot;    &lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬¬q&amp;quot;&lt;br /&gt;
  proof (rule notI)&lt;br /&gt;
    assume 4: &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have 5: &amp;quot;p ∧ ¬q&amp;quot; using 3 4 by (rule conjI)&lt;br /&gt;
    have 6: &amp;quot;r&amp;quot; using 1 5 by (rule mp)&lt;br /&gt;
    show False using 2 6 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  thus &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p&amp;quot; and &lt;br /&gt;
          3: &amp;quot;¬r&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬q&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
  have 5: &amp;quot;q ⟶ r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
  have 6: &amp;quot;r&amp;quot; using 5 4 by (rule mp)&lt;br /&gt;
  show False using 3 6 by (rule notE)&lt;br /&gt;
qed   &lt;br /&gt;
&lt;br /&gt;
section {* Reglas del bicondicional *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de introducción del bicondicional es&lt;br /&gt;
  · iffI: ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  Las reglas de eliminación del bicondicional son&lt;br /&gt;
  · iffD1: ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2: ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 17&amp;quot;&lt;br /&gt;
  &amp;quot;(p ∧ q) = (q ∧ p)&amp;quot;&lt;br /&gt;
proof (rule iffI)&lt;br /&gt;
  { assume 1: &amp;quot;p ∧ q&amp;quot;&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;q ∧ p&amp;quot; using 3 2 by (rule conjI) }&lt;br /&gt;
next&lt;br /&gt;
  { assume 4: &amp;quot;q ∧ p&amp;quot;&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot; using 4 by (rule conjunct1)&lt;br /&gt;
    have 6: &amp;quot;p&amp;quot; using 4 by (rule conjunct2)&lt;br /&gt;
    show &amp;quot;p ∧ q&amp;quot; using 6 5 by (rule conjI) }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 18&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;p = q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p ∨ q&amp;quot;  &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
using 2&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 1 3 by (rule iffD1)&lt;br /&gt;
    show &amp;quot;p ∧ q&amp;quot; using 3 4 by (rule conjI) }&lt;br /&gt;
next&lt;br /&gt;
  { assume 5: &amp;quot;q&amp;quot;&lt;br /&gt;
    have 6: &amp;quot;p&amp;quot; using 1 5 by (rule iffD2)&lt;br /&gt;
    show &amp;quot;p ∧ q&amp;quot; using 6 5 by (rule conjI) }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Reglas derivadas *}&lt;br /&gt;
&lt;br /&gt;
subsection {* Regla del modus tollens *}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 20&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;F ⟶ G&amp;quot; and &lt;br /&gt;
          2: &amp;quot;¬G&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬F&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 3: &amp;quot;F&amp;quot;&lt;br /&gt;
  have 4: &amp;quot;G&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  show False using 2 4 by (rule notE)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
subsection {* Regla de la introducción de la doble negación *}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 21&amp;quot;&lt;br /&gt;
  assumes 1: &amp;quot;F&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬¬F&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 2: &amp;quot;¬F&amp;quot;&lt;br /&gt;
  show False using 2 1 by (rule notE)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
subsection {* Regla de reducción al absurdo *}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 22&amp;quot; &lt;br /&gt;
  assumes 1: &amp;quot;¬F ⟶ False&amp;quot; &lt;br /&gt;
  shows &amp;quot;F&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: &amp;quot;¬¬F&amp;quot;&lt;br /&gt;
  proof (rule notI)&lt;br /&gt;
    assume 3: &amp;quot;¬F&amp;quot;&lt;br /&gt;
    show False using 1 3 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
  show &amp;quot;F&amp;quot; using 2 by (rule notnotD)&lt;br /&gt;
qed   &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de reducción al absurdo en Isabelle se correponde con la&lt;br /&gt;
  regla de contradicción &lt;br /&gt;
  · ccontr: (¬P ⟹ False) ⟹ P&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Ley del tercio excluso *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La ley del tercio excluso es &lt;br /&gt;
  · excluded_middle: ¬P ∨ P&lt;br /&gt;
  Puede demostrarse como se muestra a continuación.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma -- &amp;quot;p. 23&amp;quot;&lt;br /&gt;
  &amp;quot;F ∨ ¬F&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 1: &amp;quot;¬(F ∨ ¬F)&amp;quot;&lt;br /&gt;
  thus False&lt;br /&gt;
  proof (rule notE)&lt;br /&gt;
    show &amp;quot;F ∨ ¬F&amp;quot;&lt;br /&gt;
    proof (rule disjI2)&lt;br /&gt;
      show &amp;quot;¬F&amp;quot;&lt;br /&gt;
      proof (rule notI)&lt;br /&gt;
        assume 2: &amp;quot;F&amp;quot;&lt;br /&gt;
        hence 3: &amp;quot;F ∨ ¬F&amp;quot; by (rule disjI1)&lt;br /&gt;
        show False using 1 3 by (rule notE)&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
    &lt;br /&gt;
lemma -- &amp;quot;p. 24&amp;quot;&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 &amp;quot;¬p ∨ p&amp;quot; by (rule excluded_middle)&lt;br /&gt;
  thus &amp;quot;¬p ∨ q&amp;quot;&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
      thus &amp;quot;¬p ∨ q&amp;quot; by (rule disjI1) }&lt;br /&gt;
  next&lt;br /&gt;
    { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
      have &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
      thus &amp;quot;¬p ∨ q&amp;quot; by (rule disjI2) }&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>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_8&amp;diff=313</id>
		<title>Relación 8</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_8&amp;diff=313"/>
		<updated>2018-07-16T07:48:14Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Texto reemplazado: «&amp;quot;isar&amp;quot;» por «&amp;quot;isabelle&amp;quot;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
theory Relacion_8&lt;br /&gt;
imports Main Efficient_Nat Relacion_3&lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
section {* Suma y aplanamiento de listas *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     suma :: &amp;quot;nat list ⇒ nat&amp;quot; &lt;br /&gt;
  tal que (suma xs) es la suma de los elementos de la lista de números&lt;br /&gt;
  naturales xs. Por ejemplo, &lt;br /&gt;
     suma [3::nat,2,4] = 9&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
primrec suma :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;suma [] = 0&amp;quot;&lt;br /&gt;
| &amp;quot;suma (x#xs) = x + suma xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     aplana :: &amp;quot;&amp;#039;a list list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (aplana xss) es la obtenida concatenando los miembros de la &lt;br /&gt;
  lista de listas &amp;quot;xss&amp;quot;. Por ejemplo,&lt;br /&gt;
     aplana [[2,3], [4,5], [7,9]] = [2,3,4,5,7,9]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
primrec aplana :: &amp;quot;&amp;#039;a list list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;aplana [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;aplana (xs#xss)  = xs @ aplana xss&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar o refutar&lt;br /&gt;
     length (aplana xs) = suma (map length xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
La igualdad propuesta es verdadera y se puede demostrar&lt;br /&gt;
de forma automática como sigue.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;length (aplana xs) = suma (map length xs)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar&lt;br /&gt;
     suma (xs @ ys) = suma xs + suma ys&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;suma (xs @ ys) = suma xs + suma ys&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar&lt;br /&gt;
     aplana (xs @ ys) = (aplana xs) @ (aplana ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;aplana (xs @ ys) = (aplana xs) @ (aplana ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar o refutar&lt;br /&gt;
     aplana (map rev (rev xs)) = rev (aplana xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
El ejercicio debería de comenzar de la siguiente manera:&lt;br /&gt;
*}&lt;br /&gt;
lemma &amp;quot;aplana (map rev (rev xs)) = rev (aplana xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;aplana (map rev (rev [])) = rev (aplana [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix b xs&lt;br /&gt;
  assume HI: &amp;quot;aplana (map rev (rev xs)) = rev (aplana xs)&amp;quot;&lt;br /&gt;
  thus &amp;quot;aplana (map rev (rev (b # xs))) = rev (aplana (b # xs))&amp;quot;&lt;br /&gt;
    proof -&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar o refutar&lt;br /&gt;
     aplana (rev (map rev xs)) = rev (aplana xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar o refutar&lt;br /&gt;
     list_all (list_all P) xs = list_all P (aplana xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar o refutar&lt;br /&gt;
     aplana (rev xs) = aplana xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;aplana (rev xs) = aplana xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* El contraejemplo encontrado es xs = [[2], [1, 2]]. Esto tiene&lt;br /&gt;
 sentido ya que el orden influye en la funcion aplanar *}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar o refutar&lt;br /&gt;
     suma (rev xs) = suma xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
En cambio este ejercicio respecto al anterior tiene sentido que haya&lt;br /&gt;
que demostrarlo, ya que el orden en la suma no afecta, por lo que no se&lt;br /&gt;
encontrará ningún contra ejemplo.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;suma (rev xs) = suma xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;suma (rev []) = suma []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix b xs&lt;br /&gt;
  assume HI: &amp;quot;suma (rev xs) = suma xs&amp;quot;&lt;br /&gt;
  thus &amp;quot;suma (rev (b # xs)) = suma (b # xs)&amp;quot;&lt;br /&gt;
    proof -&lt;br /&gt;
oops&lt;br /&gt;
text{*&lt;br /&gt;
  En teoria debería de continuarse con una sentencia parecida a la siguiente:&lt;br /&gt;
      have &amp;quot;suma (rev (b # xs)) = suma (rev [b] @ xs)&amp;quot; by auto&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Buscar un predicado P para que se verifique la siguiente &lt;br /&gt;
  propiedad &lt;br /&gt;
     list_all P xs ⟶ length xs ≤ suma xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     algunos (algunos P) xs = algunos P (aplana xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Redefinir, usando la función list_all, la función&lt;br /&gt;
  algunos. Llamar la nueva función algunos2 y demostrar que es&lt;br /&gt;
  equivalente a algunos.  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
La siguiente definición se construye utilizando la palabra reservada&lt;br /&gt;
&amp;quot;definition&amp;quot;. Aunque se trata de una función recursiva primitiva no&lt;br /&gt;
es necesario utilizar la palabra reservada &amp;quot;primrec&amp;quot; porque la función&lt;br /&gt;
&amp;quot;list_all&amp;quot; está definida recursivamente o en la cadena de definiciones de&lt;br /&gt;
la que depende, hay una función definida recursivamente.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
definition algunos2 :: &amp;quot;(&amp;#039;a =&amp;gt; bool) =&amp;gt; &amp;#039;a list =&amp;gt; bool&amp;quot; where&lt;br /&gt;
&amp;quot;algunos2 P xs ≡ ¬ list_all (λx. ¬ P x) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_1&amp;diff=311</id>
		<title>Rel 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_1&amp;diff=311"/>
		<updated>2018-07-16T07:48:01Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Texto reemplazado: «&amp;quot;isar&amp;quot;» por «&amp;quot;isabelle&amp;quot;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
header {* 1ª relación de ejercicios *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_1&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Demostrar los siguientes lemas usando sólo las reglas básicas de&lt;br /&gt;
  deducción natural de la lógica proposicional.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma I: &amp;quot;A ⟶ A&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;A ∧ B ⟶ B ∧ A&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;A ∧ B ⟶ A ∨ B&amp;quot;&lt;br /&gt;
oops &lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(A ∨ B) ∨ C ⟶ A ∨ (B ∨ C)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma K: &amp;quot;A ⟶ (B ⟶ A)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma S: &amp;quot;(A ⟶ (B ⟶ C)) ⟶ ((A ⟶ B) ⟶ (A ⟶ C))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(A ⟶ B) ⟶ ((B ⟶ C) ⟶ (A ⟶ C))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;¬¬A ⟶ A&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;A ⟶ ¬¬A&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(¬A ⟶ B) ⟶ (¬B ⟶ A)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;((A ⟶ B) ⟶ A) ⟶ A&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;A ∨ ¬A&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(¬(A ∧ B)) = (¬A ∨ ¬B)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_10&amp;diff=310</id>
		<title>Rel 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_10&amp;diff=310"/>
		<updated>2018-07-16T07:47:34Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Texto reemplazado: «&amp;quot;isar&amp;quot;» por «&amp;quot;isabelle&amp;quot;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
theory Relacion_10&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
section {* Deducción natural de primer orden *}&lt;br /&gt;
&lt;br /&gt;
text {* Los ejercicios de esta relación deben de resolverse usando sólo&lt;br /&gt;
  las reglas básicas de la deducción natural proposicional y de primer &lt;br /&gt;
  orden:&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;
  · allI:       ⟦∀x. P x; P x ⟹ R⟧ ⟹ R&lt;br /&gt;
  · allE:       (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
  · exI:        P x ⟹ ∃x. P x&lt;br /&gt;
  · exE:        ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&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;
lemma ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∀x. P x) ⟶ (∀x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;∃x. ¬P x&amp;quot; &lt;br /&gt;
  shows &amp;quot; ¬(∀x. P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;∀x. P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀y. P y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∀x. ¬Q x) ⟶ (∀x. ¬P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ ¬Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∃x. P x ∧ Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes &amp;quot;∀x. ∀y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀u. ∀v. P u v&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes &amp;quot;∃x. ∃y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃u. ∃v. P u v&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_8:&lt;br /&gt;
  assumes &amp;quot;∃x. ∀y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀y. ∃x. P x y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes &amp;quot;∃x. P a ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;P a ⟶ (∃x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes &amp;quot;P a ⟶ (∃x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_11:&lt;br /&gt;
  assumes &amp;quot;(∃x. P x) ⟶ Q a&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P x ⟶ Q a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q a&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P x ⟶ Q a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes &amp;quot;(∀x. P x) ∨ (∀x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P x ∨ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes &amp;quot;∃x. P x ∧ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∃x. P x) ∧ (∃x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes &amp;quot;∀x.∀y. P y ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∃y. P y) ⟶ (∀x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes &amp;quot;¬(∀x. ¬P x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes &amp;quot;∀x. ¬P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∃x. P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes &amp;quot;∃x. P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∀x. ¬P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes &amp;quot;P a ⟶ (∀x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes &amp;quot;∀x.∀y.∀z. R x y ∧ R y z ⟶ R x z&amp;quot; and&lt;br /&gt;
          &amp;quot;∀x. ¬R x x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x.∀y. R x y ⟶ ¬R y x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ∨ Q x&amp;quot; and&lt;br /&gt;
          &amp;quot;∃x. ¬Q x&amp;quot; and&lt;br /&gt;
          &amp;quot;∀x. R x ⟶ ¬P x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. ¬R x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x ∨ R x&amp;quot; and&lt;br /&gt;
          &amp;quot;¬(∃x. P x ∧ R x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. P x ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes &amp;quot;∃x.∃y. R x y ∨ R y x&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x.∃y. R x y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=MediaWiki:Common.css&amp;diff=309</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=MediaWiki:Common.css&amp;diff=309"/>
		<updated>2018-07-16T07:42:13Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con «/* Los estilos CSS colocados aquí se aplicarán a todas las apariencias */ @import url(&amp;quot;/~jalonso/font-awesome-4.7.0/css/font-awesome.min.css&amp;quot;);»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Los estilos CSS colocados aquí se aplicarán a todas las apariencias */&lt;br /&gt;
@import url(&amp;quot;/~jalonso/font-awesome-4.7.0/css/font-awesome.min.css&amp;quot;);&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=MediaWiki:Sidebar&amp;diff=308</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=MediaWiki:Sidebar&amp;diff=308"/>
		<updated>2013-02-24T17:38:44Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** Razonamiento automático|Inicial&lt;br /&gt;
** recentchanges-url|recentchanges&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=MediaWiki:Sidebar&amp;diff=307</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=MediaWiki:Sidebar&amp;diff=307"/>
		<updated>2013-02-24T17:38:11Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** Razonamiento automático|Inicial&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** helppage|help&lt;br /&gt;
* SEARCH&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Ejercicios_de_%22Razonamiento_autom%C3%A1tico_(2011-12)%22&amp;diff=306</id>
		<title>Ejercicios de &quot;Razonamiento automático (2011-12)&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Ejercicios_de_%22Razonamiento_autom%C3%A1tico_(2011-12)%22&amp;diff=306"/>
		<updated>2013-02-24T17:24:26Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039; __NOTOC__ == Ejercicios de &amp;quot;Razonamiento automático&amp;quot; ==  === Ejemplos === * Deducción natural en lógica proposicional con Isabelle/Isar. * [[Deducción natural en lógic...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; __NOTOC__&lt;br /&gt;
== Ejercicios de &amp;quot;Razonamiento automático&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
* [[Deducción natural en lógica proposicional con Isabelle/Isar]].&lt;br /&gt;
* [[Deducción natural en lógica de primer orden con Isabelle/Isar]].&lt;br /&gt;
&lt;br /&gt;
=== Relaciones de ejercicios ===&lt;br /&gt;
&lt;br /&gt;
==== Ejercicios de deducción natural ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 1&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica proposicional. ([[Rel_1|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 2&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica de primer orden. ([[Rel_2|Enunciado]]).&lt;br /&gt;
&lt;br /&gt;
==== Razonamiento por inducción sobre listas ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 3&amp;#039;&amp;#039;&amp;#039;: Cons inverso y cuantificadores sobre listas. ([[Rel_3|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 4&amp;#039;&amp;#039;&amp;#039;: Sustitución, inversión y eliminación. ([[Rel_4|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 5&amp;#039;&amp;#039;&amp;#039;: Menor posición válida. ([[Rel_5|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 6&amp;#039;&amp;#039;&amp;#039;: Número de elementos válidos. ([[Rel_6|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 7&amp;#039;&amp;#039;&amp;#039;: Contador de occurrencias. ([[Rel_7|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 8&amp;#039;&amp;#039;&amp;#039;: Suma y aplanamiento de listas. ([[Rel_8|Enunciado]]).&lt;br /&gt;
&lt;br /&gt;
==== Ejercicios complementarios ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 9&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica proposicional. ([[Rel_9|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 10&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica de primer orden. ([[Rel_10|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 11&amp;#039;&amp;#039;&amp;#039;: Razonamiento sobre programas. ([[Rel_11|Enunciado]]).&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_3&amp;diff=299</id>
		<title>Rel 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_3&amp;diff=299"/>
		<updated>2012-02-11T07:23:14Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* 3ª relación de ejercicios *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_3&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Cons inverso *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir recursivamente la función &lt;br /&gt;
     snoc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (snoc xs a) es la lista obtenida al añadir el elemento a al&lt;br /&gt;
  final de la lista xs. Por ejemplo, &lt;br /&gt;
     value &amp;quot;snoc [2,5] (3::int)&amp;quot; == [2,5,3]&lt;br /&gt;
&lt;br /&gt;
  Nota: No usar @.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar el siguiente teorema &lt;br /&gt;
     snoc xs a = xs @ [a]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del lema es&amp;quot;&lt;br /&gt;
lemma &amp;quot;snoc xs a = xs @ [a]&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del lema es&amp;quot;&lt;br /&gt;
lemma snoc_append: &amp;quot;snoc xs a = xs @ [a]&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar el siguiente teorema &lt;br /&gt;
     rev (x # xs) = snoc (rev xs) x&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del teorema es&amp;quot;&lt;br /&gt;
theorem rev_cons_auto: &amp;quot;rev (x # xs) = snoc (rev xs) x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del teorema es&amp;quot;&lt;br /&gt;
theorem rev_cons: &amp;quot;rev (x # xs) = snoc (rev xs) x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
section {* Cuantificadores sobre listas *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. 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 la lista &lt;br /&gt;
  xs cumplen la propiedad p. Por ejemplo, se verifica &lt;br /&gt;
     todos (λx. 1&amp;lt;length x) [[2,1,4],[1,3]]&lt;br /&gt;
     ¬ todos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función todos es equivalente a la predefinida list_all. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     algunos :: (&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (algunos p xs) se verifica si algunos elementos de la lista &lt;br /&gt;
  xs cumplen la propiedad p. Por ejemplo, se verifica &lt;br /&gt;
     algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&lt;br /&gt;
     ¬ algunos (λx. 1&amp;lt;length x) [[],[3]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Nota: La función algunos es equivalente a la predefinida list_ex. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar o refutar: &lt;br /&gt;
     todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar o refutar: &lt;br /&gt;
     todos P (x @ y) = (todos P x ∧ todos P y)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma todos_append [simp]: &lt;br /&gt;
  &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar o refutar: &lt;br /&gt;
     todos P (rev xs) = todos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar o refutar:&lt;br /&gt;
    algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Se busca un contraejemplo con nitpick&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El contraejemplo encontrado es&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar o refutar: &lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P ∘ f) xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar o refutar: &lt;br /&gt;
     algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma algunos_append: &lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar: &lt;br /&gt;
     algunos P (rev xs) = algunos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Encontrar un término no trivial Z tal que sea cierta la &lt;br /&gt;
  siguiente ecuación:&lt;br /&gt;
     algunos (λx. P x ∨ Q x) xs = Z&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Solución: La ecuación se verifica eligiendo como Z el término  &lt;br /&gt;
     algunos P xs ∨ algunos Q xs&lt;br /&gt;
  En efecto,&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;De forma estructurada&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
     &lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Definir la funcion primitiva recursiva &lt;br /&gt;
     estaEn :: &amp;#039;a ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (estaEn x xs) se verifica si el elemento x está en la lista&lt;br /&gt;
  xs. Por ejemplo, &lt;br /&gt;
     estaEn (2::nat) [3,2,4] = True&lt;br /&gt;
     estaEn (1::nat) [3,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Expresar la relación existente entre estaEn y algunos. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Solución: La relación es &lt;br /&gt;
&lt;br /&gt;
  En efecto,  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Definir la función primitiva recursiva &lt;br /&gt;
     sinDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (sinDuplicados xs) se verifica si la lista xs no contiene&lt;br /&gt;
  duplicados. Por ejemplo,  &lt;br /&gt;
     sinDuplicados [1::nat,4,2]   = True&lt;br /&gt;
     sinDuplicados [1::nat,4,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Definir la función primitiva recursiva &lt;br /&gt;
     borraDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (borraDuplicados xs) es la lista obtenida eliminando los&lt;br /&gt;
  elementos duplicados de la lista xs. Por ejemplo, &lt;br /&gt;
     borraDuplicados [1::nat,2,4,2,3] = [1,4,2,3]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borraDuplicados es equivalente a la predefinida remdups. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar o refutar:&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma length_borraDuplicados: &lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Demostrar o refutar: &lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados_auto: &lt;br /&gt;
  &amp;quot;estaEn a (borraDuplicados xs) = estaEn a xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados: &lt;br /&gt;
  &amp;quot;estaEn a (borraDuplicados xs) = estaEn a xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Demostrar o refutar: &lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática&amp;quot;&lt;br /&gt;
lemma &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Demostrar o refutar:&lt;br /&gt;
    borraDuplicados (rev xs) = rev (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borraDuplicados (rev xs) = rev (borraDuplicados xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=MediaWiki:Mainpage&amp;diff=298</id>
		<title>MediaWiki:Mainpage</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=MediaWiki:Mainpage&amp;diff=298"/>
		<updated>2012-02-02T18:58:27Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Razonamiento automático&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=MediaWiki:Sidebar&amp;diff=297</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=MediaWiki:Sidebar&amp;diff=297"/>
		<updated>2012-02-02T18:54:37Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** Razonamiento automático|Inicial&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** helppage|help&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Razonamiento_autom%C3%A1tico&amp;diff=295</id>
		<title>Razonamiento automático</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Razonamiento_autom%C3%A1tico&amp;diff=295"/>
		<updated>2012-02-02T18:54:09Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Razonamiento automático (2010-11) trasladada a Razonamiento automático&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== Ejercicios de &amp;quot;Razonamiento automático&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
* [[Deducción natural en lógica proposicional con Isabelle/Isar]].&lt;br /&gt;
* [[Deducción natural en lógica de primer orden con Isabelle/Isar]].&lt;br /&gt;
&lt;br /&gt;
=== Relaciones de ejercicios ===&lt;br /&gt;
&lt;br /&gt;
==== Ejercicios de deducción natural ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 1&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica proposicional. ([[Rel_1|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 2&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica de primer orden. ([[Rel_2|Enunciado]]).&lt;br /&gt;
&lt;br /&gt;
==== Razonamiento por inducción sobre listas ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 3&amp;#039;&amp;#039;&amp;#039;: Cons inverso y cuantificadores sobre listas. ([[Rel_3|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 4&amp;#039;&amp;#039;&amp;#039;: Sustitución, inversión y eliminación. ([[Rel_4|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 5&amp;#039;&amp;#039;&amp;#039;: Menor posición válida. ([[Rel_5|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 6&amp;#039;&amp;#039;&amp;#039;: Número de elementos válidos. ([[Rel_6|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 7&amp;#039;&amp;#039;&amp;#039;: Contador de occurrencias. ([[Rel_7|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 8&amp;#039;&amp;#039;&amp;#039;: Suma y aplanamiento de listas. ([[Rel_8|Enunciado]]).&lt;br /&gt;
&lt;br /&gt;
==== Ejercicios complementarios ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 9&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica proposicional. ([[Rel_9|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 10&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica de primer orden. ([[Rel_10|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 11&amp;#039;&amp;#039;&amp;#039;: Razonamiento sobre programas. ([[Rel_11|Enunciado]]).&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Razonamiento_autom%C3%A1tico_(2010-11)&amp;diff=296</id>
		<title>Razonamiento automático (2010-11)</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Razonamiento_autom%C3%A1tico_(2010-11)&amp;diff=296"/>
		<updated>2012-02-02T18:54:09Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Razonamiento automático (2010-11) trasladada a Razonamiento automático&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECCIÓN [[Razonamiento automático]]&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Razonamiento_autom%C3%A1tico&amp;diff=294</id>
		<title>Razonamiento automático</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Razonamiento_autom%C3%A1tico&amp;diff=294"/>
		<updated>2012-02-02T18:44:21Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== Ejercicios de &amp;quot;Razonamiento automático&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
* [[Deducción natural en lógica proposicional con Isabelle/Isar]].&lt;br /&gt;
* [[Deducción natural en lógica de primer orden con Isabelle/Isar]].&lt;br /&gt;
&lt;br /&gt;
=== Relaciones de ejercicios ===&lt;br /&gt;
&lt;br /&gt;
==== Ejercicios de deducción natural ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 1&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica proposicional. ([[Rel_1|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 2&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica de primer orden. ([[Rel_2|Enunciado]]).&lt;br /&gt;
&lt;br /&gt;
==== Razonamiento por inducción sobre listas ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 3&amp;#039;&amp;#039;&amp;#039;: Cons inverso y cuantificadores sobre listas. ([[Rel_3|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 4&amp;#039;&amp;#039;&amp;#039;: Sustitución, inversión y eliminación. ([[Rel_4|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 5&amp;#039;&amp;#039;&amp;#039;: Menor posición válida. ([[Rel_5|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 6&amp;#039;&amp;#039;&amp;#039;: Número de elementos válidos. ([[Rel_6|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 7&amp;#039;&amp;#039;&amp;#039;: Contador de occurrencias. ([[Rel_7|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 8&amp;#039;&amp;#039;&amp;#039;: Suma y aplanamiento de listas. ([[Rel_8|Enunciado]]).&lt;br /&gt;
&lt;br /&gt;
==== Ejercicios complementarios ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 9&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica proposicional. ([[Rel_9|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 10&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica de primer orden. ([[Rel_10|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 11&amp;#039;&amp;#039;&amp;#039;: Razonamiento sobre programas. ([[Rel_11|Enunciado]]).&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Razonamiento_autom%C3%A1tico&amp;diff=293</id>
		<title>Razonamiento automático</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Razonamiento_autom%C3%A1tico&amp;diff=293"/>
		<updated>2012-02-02T18:43:40Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ejercicios de &amp;quot;Razonamiento automático&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
* [[Deducción natural en lógica proposicional con Isabelle/Isar]].&lt;br /&gt;
* [[Deducción natural en lógica de primer orden con Isabelle/Isar]].&lt;br /&gt;
&lt;br /&gt;
=== Relaciones de ejercicios ===&lt;br /&gt;
&lt;br /&gt;
==== Ejercicios de deducción natural ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 1&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica proposicional. ([[Rel_1|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 2&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica de primer orden. ([[Rel_2|Enunciado]]).&lt;br /&gt;
&lt;br /&gt;
==== Razonamiento por inducción sobre listas ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 3&amp;#039;&amp;#039;&amp;#039;: Cons inverso y cuantificadores sobre listas. ([[Rel_3|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 4&amp;#039;&amp;#039;&amp;#039;: Sustitución, inversión y eliminación. ([[Rel_4|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 5&amp;#039;&amp;#039;&amp;#039;: Menor posición válida. ([[Rel_5|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 6&amp;#039;&amp;#039;&amp;#039;: Número de elementos válidos. ([[Rel_6|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 7&amp;#039;&amp;#039;&amp;#039;: Contador de occurrencias. ([[Rel_7|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 8&amp;#039;&amp;#039;&amp;#039;: Suma y aplanamiento de listas. ([[Rel_8|Enunciado]]).&lt;br /&gt;
&lt;br /&gt;
==== Ejercicios complementarios ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 9&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica proposicional. ([[Rel_9|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 10&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica de primer orden. ([[Rel_10|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 11&amp;#039;&amp;#039;&amp;#039;: Razonamiento sobre programas. ([[Rel_11|Enunciado]]).&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Razonamiento_autom%C3%A1tico&amp;diff=292</id>
		<title>Razonamiento automático</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Razonamiento_autom%C3%A1tico&amp;diff=292"/>
		<updated>2012-02-02T18:43:20Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ejercicios de &amp;quot;Razonamiento automático&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
* [[Deducción natural en lógica proposicional con Isabelle/Isar]].&lt;br /&gt;
* [[Deducción natural en lógica de primer orden con Isabelle/Isar]].&lt;br /&gt;
&lt;br /&gt;
=== Relaciones de ejercicios ===&lt;br /&gt;
&lt;br /&gt;
==== Ejercicios de deducción natural ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 1&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica proposicional. ([[Rel_1|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 2&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica de primer orden. ([[Rel_2|Enunciado]]).&lt;br /&gt;
&lt;br /&gt;
==== Razonamiento por inducción sobre listas ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 3&amp;#039;&amp;#039;&amp;#039;: Cons inverso y cuantificadores sobre listas. ([[Rel_3|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 4&amp;#039;&amp;#039;&amp;#039;: Sustitución, inversión y eliminación. ([[Rel_4|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 5&amp;#039;&amp;#039;&amp;#039;: Menor posición válida. ([[Rel_5|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 6&amp;#039;&amp;#039;&amp;#039;: Número de elementos válidos. ([[Rel_6|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 7&amp;#039;&amp;#039;&amp;#039;: Contador de occurrencias. ([[Rel_7|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 8&amp;#039;&amp;#039;&amp;#039;: Suma y aplanamiento de listas. ([[Rel_8|Enunciado]]).&lt;br /&gt;
&lt;br /&gt;
==== Ejercicios complementarios ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 9&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica proposicional. ([[Rel_9|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 10&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica de primer orden. ([[Rel_10|Enunciado]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 11&amp;#039;&amp;#039;&amp;#039;: Razonamiento sobre programas. ([[Rel_11|Enunciado]]).&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_9&amp;diff=291</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_9&amp;diff=291"/>
		<updated>2011-03-24T09:38:42Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
theory Relacion_9&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
section {* Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
text {* Los ejercicios de esta relación deben de resolverse usando sólo&lt;br /&gt;
  las reglas básicas de la deducción natural proposicional: &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;
*}&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;
lemma ejercicio_1:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;  &lt;br /&gt;
proof -&lt;br /&gt;
from 1 and 2 show &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_1b:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;  &lt;br /&gt;
proof -&lt;br /&gt;
  from 1 and 2 have q: &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
  from q show &amp;quot;q&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;q⟶r&amp;quot; and &lt;br /&gt;
          3: &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  from 1 and 3 have 4:&amp;quot;q&amp;quot; by (rule ejercicio_1)&lt;br /&gt;
  from 2 and 4 have 5:&amp;quot;r&amp;quot; by (rule ejercicio_1)&lt;br /&gt;
  from 5 show &amp;quot;r&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶(q⟶r)&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p⟶q&amp;quot; and  &lt;br /&gt;
          3: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  from 1 and 3 have qr:&amp;quot;q⟶r&amp;quot; by (rule ejercicio_1)&lt;br /&gt;
  from 2 and qr and 3 have r:&amp;quot;r&amp;quot; by (rule ejercicio_2)&lt;br /&gt;
  from r show &amp;quot;r&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;q⟶r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p⟶r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume p:&amp;quot;p&amp;quot;&lt;br /&gt;
  from 1 and 2 and p have r:&amp;quot;r&amp;quot; by (rule ejercicio_2)&lt;br /&gt;
  from r show &amp;quot;r&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶(q⟶r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q⟶(p⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶(q⟶r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;(p⟶q)⟶(p⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;q⟶p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_8:&lt;br /&gt;
  &amp;quot;p⟶(q⟶p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q&amp;quot;  &lt;br /&gt;
  shows &amp;quot;(q⟶r)⟶(p⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶(q⟶(r⟶s))&amp;quot;&lt;br /&gt;
  shows &amp;quot;r⟶(q⟶(p⟶s))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_11:&lt;br /&gt;
  &amp;quot;(p⟶(q⟶r))⟶((p⟶q)⟶(p⟶r))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes 1: &amp;quot;(p⟶q)⟶r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p⟶(q⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot; and  &lt;br /&gt;
          2: &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∧q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes 1: &amp;quot;p∧q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes 1: &amp;quot;p∧q&amp;quot; &lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes 1: &amp;quot;p∧(q∧r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p∧q)∧r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes 1: &amp;quot;(p∧q)∧r&amp;quot;&lt;br /&gt;
  shows &amp;quot;p∧(q∧r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes 1: &amp;quot;p∧q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes 1: &amp;quot;(p⟶q)∧(p⟶r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;p⟶q∧r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q∧r&amp;quot; &lt;br /&gt;
  shows &amp;quot;(p⟶q)∧(p⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶(q⟶r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∧q⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes 1: &amp;quot;p∧q⟶r&amp;quot;  &lt;br /&gt;
  shows &amp;quot;p⟶(q⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes 1: &amp;quot;(p⟶q)⟶r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∧q⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_24:&lt;br /&gt;
  assumes 1: &amp;quot;p∧(q⟶r)&amp;quot;  &lt;br /&gt;
  shows &amp;quot;(p⟶q)⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_25:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∨q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_26:&lt;br /&gt;
  assumes 1: &amp;quot;q&amp;quot;  &lt;br /&gt;
  shows &amp;quot;p∨q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_27:&lt;br /&gt;
  assumes 1: &amp;quot;p∨q&amp;quot; &lt;br /&gt;
  shows &amp;quot;q∨p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_28:&lt;br /&gt;
  assumes 1: &amp;quot;q⟶r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∨q⟶p∨r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_29:&lt;br /&gt;
  assumes 1: &amp;quot;p∨p&amp;quot; &lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_30:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∨p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_31:&lt;br /&gt;
  assumes 1: &amp;quot;p∨(q∨r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p∨q)∨r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_32:&lt;br /&gt;
  assumes 1: &amp;quot;(p∨q)∨r&amp;quot;&lt;br /&gt;
  shows &amp;quot;p∨(q∨r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_33:&lt;br /&gt;
  assumes 1: &amp;quot;p∧(q∨r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;(p∧q)∨(p∧r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_34:&lt;br /&gt;
  assumes 1: &amp;quot;(p∧q)∨(p∧r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∧(q∨r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_35:&lt;br /&gt;
  assumes 1: &amp;quot;p∨(q∧r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p∨q)∧(p∨r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_36:&lt;br /&gt;
  assumes 1: &amp;quot;(p∨q)∧(p∨r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;p∨(q∧r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_37:&lt;br /&gt;
  assumes 1: &amp;quot;(p⟶r)∧(q⟶r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∨q⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_38:&lt;br /&gt;
  assumes 1: &amp;quot;p∨q⟶r&amp;quot;  &lt;br /&gt;
  shows &amp;quot;(p⟶r)∧(q⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_39:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_40:&lt;br /&gt;
  assumes 1: &amp;quot;¬p&amp;quot;  &lt;br /&gt;
  shows &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_41:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬q⟶¬p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_42:&lt;br /&gt;
  assumes 1: &amp;quot;p∨q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_43:&lt;br /&gt;
  assumes 1: &amp;quot;p∨q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_44:&lt;br /&gt;
  assumes 1: &amp;quot;p∨q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(¬p∧¬q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_45:&lt;br /&gt;
  assumes 1: &amp;quot;p∧q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(¬p∨¬q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_46:&lt;br /&gt;
  assumes 1: &amp;quot;¬(p∨q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬p∧¬q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_47:&lt;br /&gt;
  assumes 1: &amp;quot;¬p∧¬q&amp;quot;  &lt;br /&gt;
  shows &amp;quot;¬(p∨q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_48:&lt;br /&gt;
  assumes 1: &amp;quot;¬p∨¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p∧q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_49:&lt;br /&gt;
  &amp;quot;¬(p∧¬p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_50:&lt;br /&gt;
  assumes 1: &amp;quot;p∧¬p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_51:&lt;br /&gt;
  assumes 1: &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_52:&lt;br /&gt;
  &amp;quot;p∨¬p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_53:&lt;br /&gt;
  &amp;quot;((p⟶q)⟶p)⟶p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_54:&lt;br /&gt;
  assumes 1: &amp;quot;¬q⟶¬p&amp;quot;&lt;br /&gt;
  shows &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_55:&lt;br /&gt;
  assumes 1: &amp;quot;¬(¬p∧¬q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;p∨q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_56:&lt;br /&gt;
  assumes 1: &amp;quot;¬(¬p∨¬q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;p∧q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_57:&lt;br /&gt;
  assumes 1: &amp;quot;¬(p∧q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬p∨¬q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_58:&lt;br /&gt;
  &amp;quot;(p⟶q)∨(q⟶p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_9&amp;diff=290</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_9&amp;diff=290"/>
		<updated>2011-03-24T09:38:20Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=isar&amp;quot;&amp;gt;&lt;br /&gt;
theory Relacion_9&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
section {* Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
text {* Los ejercicios de esta relación deben de resolverse usando sólo&lt;br /&gt;
  las reglas básicas de la deducción natural proposicional: &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;
*}&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;
lemma ejercicio_1:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;  &lt;br /&gt;
proof -&lt;br /&gt;
from 1 and 2 show &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_1b:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;  &lt;br /&gt;
proof -&lt;br /&gt;
  from 1 and 2 have q: &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
  from q show &amp;quot;q&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;q⟶r&amp;quot; and &lt;br /&gt;
          3: &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  from 1 and 3 have 4:&amp;quot;q&amp;quot; by (rule ejercicio_1)&lt;br /&gt;
  from 2 and 4 have 5:&amp;quot;r&amp;quot; by (rule ejercicio_1)&lt;br /&gt;
  from 5 show &amp;quot;r&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶(q⟶r)&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p⟶q&amp;quot; and  &lt;br /&gt;
          3: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  from 1 and 3 have qr:&amp;quot;q⟶r&amp;quot; by (rule ejercicio_1)&lt;br /&gt;
  from 2 and qr and 3 have r:&amp;quot;r&amp;quot; by (rule ejercicio_2)&lt;br /&gt;
  from r show &amp;quot;r&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;q⟶r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p⟶r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume p:&amp;quot;p&amp;quot;&lt;br /&gt;
  from 1 and 2 and p have r:&amp;quot;r&amp;quot; by (rule ejercicio_2)&lt;br /&gt;
  from r show &amp;quot;r&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶(q⟶r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;q⟶(p⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶(q⟶r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;(p⟶q)⟶(p⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;q⟶p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_8:&lt;br /&gt;
  &amp;quot;p⟶(q⟶p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q&amp;quot;  &lt;br /&gt;
  shows &amp;quot;(q⟶r)⟶(p⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶(q⟶(r⟶s))&amp;quot;&lt;br /&gt;
  shows &amp;quot;r⟶(q⟶(p⟶s))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_11:&lt;br /&gt;
  &amp;quot;(p⟶(q⟶r))⟶((p⟶q)⟶(p⟶r))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes 1: &amp;quot;(p⟶q)⟶r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p⟶(q⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot; and  &lt;br /&gt;
          2: &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∧q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes 1: &amp;quot;p∧q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes 1: &amp;quot;p∧q&amp;quot; &lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes 1: &amp;quot;p∧(q∧r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p∧q)∧r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes 1: &amp;quot;(p∧q)∧r&amp;quot;&lt;br /&gt;
  shows &amp;quot;p∧(q∧r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes 1: &amp;quot;p∧q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes 1: &amp;quot;(p⟶q)∧(p⟶r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;p⟶q∧r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q∧r&amp;quot; &lt;br /&gt;
  shows &amp;quot;(p⟶q)∧(p⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶(q⟶r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∧q⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes 1: &amp;quot;p∧q⟶r&amp;quot;  &lt;br /&gt;
  shows &amp;quot;p⟶(q⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes 1: &amp;quot;(p⟶q)⟶r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∧q⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_24:&lt;br /&gt;
  assumes 1: &amp;quot;p∧(q⟶r)&amp;quot;  &lt;br /&gt;
  shows &amp;quot;(p⟶q)⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_25:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∨q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_26:&lt;br /&gt;
  assumes 1: &amp;quot;q&amp;quot;  &lt;br /&gt;
  shows &amp;quot;p∨q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_27:&lt;br /&gt;
  assumes 1: &amp;quot;p∨q&amp;quot; &lt;br /&gt;
  shows &amp;quot;q∨p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_28:&lt;br /&gt;
  assumes 1: &amp;quot;q⟶r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∨q⟶p∨r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_29:&lt;br /&gt;
  assumes 1: &amp;quot;p∨p&amp;quot; &lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_30:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∨p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_31:&lt;br /&gt;
  assumes 1: &amp;quot;p∨(q∨r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p∨q)∨r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_32:&lt;br /&gt;
  assumes 1: &amp;quot;(p∨q)∨r&amp;quot;&lt;br /&gt;
  shows &amp;quot;p∨(q∨r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_33:&lt;br /&gt;
  assumes 1: &amp;quot;p∧(q∨r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;(p∧q)∨(p∧r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_34:&lt;br /&gt;
  assumes 1: &amp;quot;(p∧q)∨(p∧r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∧(q∨r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_35:&lt;br /&gt;
  assumes 1: &amp;quot;p∨(q∧r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;(p∨q)∧(p∨r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_36:&lt;br /&gt;
  assumes 1: &amp;quot;(p∨q)∧(p∨r)&amp;quot;&lt;br /&gt;
  shows &amp;quot;p∨(q∧r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_37:&lt;br /&gt;
  assumes 1: &amp;quot;(p⟶r)∧(q⟶r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;p∨q⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_38:&lt;br /&gt;
  assumes 1: &amp;quot;p∨q⟶r&amp;quot;  &lt;br /&gt;
  shows &amp;quot;(p⟶r)∧(q⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_39:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_40:&lt;br /&gt;
  assumes 1: &amp;quot;¬p&amp;quot;  &lt;br /&gt;
  shows &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_41:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬q⟶¬p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_42:&lt;br /&gt;
  assumes 1: &amp;quot;p∨q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_43:&lt;br /&gt;
  assumes 1: &amp;quot;p∨q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_44:&lt;br /&gt;
  assumes 1: &amp;quot;p∨q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(¬p∧¬q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_45:&lt;br /&gt;
  assumes 1: &amp;quot;p∧q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(¬p∨¬q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_46:&lt;br /&gt;
  assumes 1: &amp;quot;¬(p∨q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬p∧¬q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_47:&lt;br /&gt;
  assumes 1: &amp;quot;¬p∧¬q&amp;quot;  &lt;br /&gt;
  shows &amp;quot;¬(p∨q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_48:&lt;br /&gt;
  assumes 1: &amp;quot;¬p∨¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p∧q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_49:&lt;br /&gt;
  &amp;quot;¬(p∧¬p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_50:&lt;br /&gt;
  assumes 1: &amp;quot;p∧¬p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_51:&lt;br /&gt;
  assumes 1: &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_52:&lt;br /&gt;
  &amp;quot;p∨¬p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_53:&lt;br /&gt;
  &amp;quot;((p⟶q)⟶p)⟶p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_54:&lt;br /&gt;
  assumes 1: &amp;quot;¬q⟶¬p&amp;quot;&lt;br /&gt;
  shows &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_55:&lt;br /&gt;
  assumes 1: &amp;quot;¬(¬p∧¬q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;p∨q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_56:&lt;br /&gt;
  assumes 1: &amp;quot;¬(¬p∨¬q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;p∧q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_57:&lt;br /&gt;
  assumes 1: &amp;quot;¬(p∧q)&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬p∨¬q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_58:&lt;br /&gt;
  &amp;quot;(p⟶q)∨(q⟶p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_11&amp;diff=270</id>
		<title>Relación 11</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_11&amp;diff=270"/>
		<updated>2011-03-15T05:26:51Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* Razonamiento sobre programas en Isabelle *}  theory Relacion_11 imports Main Efficient_Nat begin  text {* ----------------------------------------...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* Razonamiento sobre programas en Isabelle *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_11&lt;br /&gt;
imports Main Efficient_Nat&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* ----------------------------------------------------------------&lt;br /&gt;
  Ejercicio 1. Definir, por recursión, la función&lt;br /&gt;
     longitud :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&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;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar que &lt;br /&gt;
     longitud [4,2,5] = 3&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     fun intercambia :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot;&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;
     &amp;quot;intercambia (2,3) = (3,2)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar que &lt;br /&gt;
     intercambia (intercambia (x,y)) = (x,y)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir, por recursión, la función&lt;br /&gt;
     inversa :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&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 [3,2,5] = [5,2,3]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que &lt;br /&gt;
     inversa [x] = [x]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     repite :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  tal que . Por ejemplo,&lt;br /&gt;
     repite 3 5 = [5,5,5]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que &lt;br /&gt;
     longitud (repite n x) = n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     fun conc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que . Por ejemplo,&lt;br /&gt;
     conc [2,3] [4,3,5] = [2,3,4,3,5]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que &lt;br /&gt;
     conc xs (conc ys zs) = (conc xs ys) zs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Refutar que &lt;br /&gt;
     conc xs ys = conc ys xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que &lt;br /&gt;
     conc xs [] = xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar que &lt;br /&gt;
     longitud (conc xs ys) = longitud xs + longitud ys&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Definir la función&lt;br /&gt;
     coge :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&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 [3,7,5,4] = [3,7]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Definir la función&lt;br /&gt;
     elimina :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&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;
     elimina 2 [3,7,5,4] = [5,4]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar que &lt;br /&gt;
     conc (coge n xs) (elimina n xs) = xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Definir la función&lt;br /&gt;
     esVacia :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar que &lt;br /&gt;
     esVacia xs = esVacia (conc xs xs)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Definir la función&lt;br /&gt;
     inversaAc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inversaAc xs) es a inversa de xs calculada usando&lt;br /&gt;
  acumuladores. Por ejemplo, &lt;br /&gt;
     inversaAc [3,2,5] = [5,2,3]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Demostrar que &lt;br /&gt;
     inversaAcAux xs ys = (inversa xs)@ys&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Demostrar que &lt;br /&gt;
     inversaAc xs = inversa xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Definir la función&lt;br /&gt;
     sum :: &amp;quot;int list ⇒ int&amp;quot; &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. 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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Demostrar que &lt;br /&gt;
     sum (map (λx. 2*x) xs) = 2 * (sum xs)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Demostrar que &lt;br /&gt;
     longitud (map f xs) = longitud xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Definir la función&lt;br /&gt;
     sumaImpares :: &amp;quot;nat ⇒ nat&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Demostrar que &lt;br /&gt;
     sumaImpares n = n*n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Definir la función&lt;br /&gt;
     sumaPotenciasDeDosMasUno :: &amp;quot;nat ⇒ nat&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Demostrar que &lt;br /&gt;
     sumaPotenciasDeDosMasUno n = 2^(n+1)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. Definir la función&lt;br /&gt;
     copia :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot;&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 2 = [2,2,2]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Definir la función&lt;br /&gt;
     todos :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. 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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Definir la función&lt;br /&gt;
    factR :: &amp;quot;nat ⇒ nat&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Se considera la siguiente definición iterativa de la&lt;br /&gt;
  función factorial &lt;br /&gt;
     factI :: Integer -&amp;gt; Integer&lt;br /&gt;
     factI n = factI&amp;#039; n 1&lt;br /&gt;
     &lt;br /&gt;
     factI&amp;#039; :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
     factI&amp;#039; 0     x = x                  -- factI&amp;#039;.1&lt;br /&gt;
     factI&amp;#039; (n+1) x = factI&amp;#039; n (n+1)*x   -- factI&amp;#039;.2&lt;br /&gt;
  Comprobar con QuickCheck que factI y factR son equivalentes sobre los&lt;br /&gt;
  números naturales.&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
     &lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Demostrar que, para todo n y todo x, se tiene &lt;br /&gt;
     factI&amp;#039; n x = x * factR n&lt;br /&gt;
  y, como corolario, que&lt;br /&gt;
     factI n = factR n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Definir, recursivamente y sin usar (@). la función&lt;br /&gt;
     amplia :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot;&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 [2,5] 3 = [2,5,3]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Demostrar que &lt;br /&gt;
     amplia xs y = xs @ [y]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_11&amp;diff=269</id>
		<title>Rel 11</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_11&amp;diff=269"/>
		<updated>2011-03-15T05:26:17Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* Razonamiento sobre programas en Isabelle *}  theory Relacion_11 imports Main Efficient_Nat begin  text {* ----------------------------------------...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* Razonamiento sobre programas en Isabelle *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_11&lt;br /&gt;
imports Main Efficient_Nat&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* ----------------------------------------------------------------&lt;br /&gt;
  Ejercicio 1. Definir, por recursión, la función&lt;br /&gt;
     longitud :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&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;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar que &lt;br /&gt;
     longitud [4,2,5] = 3&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     fun intercambia :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot;&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;
     &amp;quot;intercambia (2,3) = (3,2)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar que &lt;br /&gt;
     intercambia (intercambia (x,y)) = (x,y)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir, por recursión, la función&lt;br /&gt;
     inversa :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&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 [3,2,5] = [5,2,3]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que &lt;br /&gt;
     inversa [x] = [x]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     repite :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  tal que . Por ejemplo,&lt;br /&gt;
     repite 3 5 = [5,5,5]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que &lt;br /&gt;
     longitud (repite n x) = n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     fun conc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que . Por ejemplo,&lt;br /&gt;
     conc [2,3] [4,3,5] = [2,3,4,3,5]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que &lt;br /&gt;
     conc xs (conc ys zs) = (conc xs ys) zs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Refutar que &lt;br /&gt;
     conc xs ys = conc ys xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que &lt;br /&gt;
     conc xs [] = xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar que &lt;br /&gt;
     longitud (conc xs ys) = longitud xs + longitud ys&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Definir la función&lt;br /&gt;
     coge :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&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 [3,7,5,4] = [3,7]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Definir la función&lt;br /&gt;
     elimina :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&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;
     elimina 2 [3,7,5,4] = [5,4]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar que &lt;br /&gt;
     conc (coge n xs) (elimina n xs) = xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Definir la función&lt;br /&gt;
     esVacia :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar que &lt;br /&gt;
     esVacia xs = esVacia (conc xs xs)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Definir la función&lt;br /&gt;
     inversaAc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inversaAc xs) es a inversa de xs calculada usando&lt;br /&gt;
  acumuladores. Por ejemplo, &lt;br /&gt;
     inversaAc [3,2,5] = [5,2,3]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Demostrar que &lt;br /&gt;
     inversaAcAux xs ys = (inversa xs)@ys&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Demostrar que &lt;br /&gt;
     inversaAc xs = inversa xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Definir la función&lt;br /&gt;
     sum :: &amp;quot;int list ⇒ int&amp;quot; &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. 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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Demostrar que &lt;br /&gt;
     sum (map (λx. 2*x) xs) = 2 * (sum xs)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Demostrar que &lt;br /&gt;
     longitud (map f xs) = longitud xs&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Definir la función&lt;br /&gt;
     sumaImpares :: &amp;quot;nat ⇒ nat&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Demostrar que &lt;br /&gt;
     sumaImpares n = n*n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Definir la función&lt;br /&gt;
     sumaPotenciasDeDosMasUno :: &amp;quot;nat ⇒ nat&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Demostrar que &lt;br /&gt;
     sumaPotenciasDeDosMasUno n = 2^(n+1)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. Definir la función&lt;br /&gt;
     copia :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot;&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 2 = [2,2,2]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Definir la función&lt;br /&gt;
     todos :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. 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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Definir la función&lt;br /&gt;
    factR :: &amp;quot;nat ⇒ nat&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Se considera la siguiente definición iterativa de la&lt;br /&gt;
  función factorial &lt;br /&gt;
     factI :: Integer -&amp;gt; Integer&lt;br /&gt;
     factI n = factI&amp;#039; n 1&lt;br /&gt;
     &lt;br /&gt;
     factI&amp;#039; :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
     factI&amp;#039; 0     x = x                  -- factI&amp;#039;.1&lt;br /&gt;
     factI&amp;#039; (n+1) x = factI&amp;#039; n (n+1)*x   -- factI&amp;#039;.2&lt;br /&gt;
  Comprobar con QuickCheck que factI y factR son equivalentes sobre los&lt;br /&gt;
  números naturales.&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
     &lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Demostrar que, para todo n y todo x, se tiene &lt;br /&gt;
     factI&amp;#039; n x = x * factR n&lt;br /&gt;
  y, como corolario, que&lt;br /&gt;
     factI n = factR n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Definir, recursivamente y sin usar (@). la función&lt;br /&gt;
     amplia :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot;&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 [2,5] 3 = [2,5,3]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Demostrar que &lt;br /&gt;
     amplia xs y = xs @ [y]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Razonamiento_autom%C3%A1tico&amp;diff=268</id>
		<title>Razonamiento automático</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Razonamiento_autom%C3%A1tico&amp;diff=268"/>
		<updated>2011-03-15T05:25:17Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: /* Ejercicios complementarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Razonamiento automático (2010-11) ==&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
* [[Deducción natural en lógica proposicional con Isabelle/Isar]].&lt;br /&gt;
* [[Deducción natural en lógica de primer orden con Isabelle/Isar]].&lt;br /&gt;
&lt;br /&gt;
=== Relaciones de ejercicios ===&lt;br /&gt;
&lt;br /&gt;
==== Ejercicios de deducción natural ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 1&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica proposicional. ([[Rel_1|Enunciado]] y [[Relación 1|Solución]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 2&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica de primer orden. ([[Rel_2|Enunciado]] y [[Relación 2|Solución]]).&lt;br /&gt;
&lt;br /&gt;
==== Razonamiento por inducción sobre listas ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 3&amp;#039;&amp;#039;&amp;#039;: Cons inverso y cuantificadores sobre listas. ([[Rel_3|Enunciado]] y [[Relación 3|Solución]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 4&amp;#039;&amp;#039;&amp;#039;: Sustitución, inversión y eliminación. ([[Rel_4|Enunciado]] y [[Relación 4|Solución]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 5&amp;#039;&amp;#039;&amp;#039;: Menor posición válida. ([[Rel_5|Enunciado]] y [[Relación 5|Solución]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 6&amp;#039;&amp;#039;&amp;#039;: Número de elementos válidos. ([[Rel_6|Enunciado]] y [[Relación 6|Solución]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 7&amp;#039;&amp;#039;&amp;#039;: Contador de occurrencias. ([[Rel_7|Enunciado]] y [[Relación 7|Solución]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 8&amp;#039;&amp;#039;&amp;#039;: Suma y aplanamiento de listas. ([[Rel_8|Enunciado]] y [[Relación 8|Solución]]).&lt;br /&gt;
&lt;br /&gt;
==== Ejercicios complementarios ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 9&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica proposicional. ([[Rel_9|Enunciado]] y [[Relación 9|Solución]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 10&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica de primer orden. ([[Rel_10|Enunciado]] y [[Relación 10|Solución]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 11&amp;#039;&amp;#039;&amp;#039;: Razonamiento sobre programas. ([[Rel_11|Enunciado]] y [[Relación 11|Solución]]).&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_10&amp;diff=267</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_10&amp;diff=267"/>
		<updated>2011-03-15T05:14:41Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; theory Relacion_10 imports Main  begin   section {* Deducción natural de primer orden *}  text {* Los ejercicios de esta relación deben de resolverse usan...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
theory Relacion_10&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
section {* Deducción natural de primer orden *}&lt;br /&gt;
&lt;br /&gt;
text {* Los ejercicios de esta relación deben de resolverse usando sólo&lt;br /&gt;
  las reglas básicas de la deducción natural proposicional y de primer &lt;br /&gt;
  orden:&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;
  · allI:       ⟦∀x. P x; P x ⟹ R⟧ ⟹ R&lt;br /&gt;
  · allE:       (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
  · exI:        P x ⟹ ∃x. P x&lt;br /&gt;
  · exE:        ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&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;
lemma ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∀x. P x) ⟶ (∀x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;∃x. ¬P x&amp;quot; &lt;br /&gt;
  shows &amp;quot; ¬(∀x. P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;∀x. P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀y. P y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∀x. ¬Q x) ⟶ (∀x. ¬P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ ¬Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∃x. P x ∧ Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes &amp;quot;∀x. ∀y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀u. ∀v. P u v&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes &amp;quot;∃x. ∃y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃u. ∃v. P u v&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_8:&lt;br /&gt;
  assumes &amp;quot;∃x. ∀y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀y. ∃x. P x y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes &amp;quot;∃x. P a ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;P a ⟶ (∃x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes &amp;quot;P a ⟶ (∃x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_11:&lt;br /&gt;
  assumes &amp;quot;(∃x. P x) ⟶ Q a&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P x ⟶ Q a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q a&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P x ⟶ Q a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes &amp;quot;(∀x. P x) ∨ (∀x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P x ∨ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes &amp;quot;∃x. P x ∧ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∃x. P x) ∧ (∃x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes &amp;quot;∀x.∀y. P y ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∃y. P y) ⟶ (∀x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes &amp;quot;¬(∀x. ¬P x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes &amp;quot;∀x. ¬P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∃x. P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes &amp;quot;∃x. P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∀x. ¬P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes &amp;quot;P a ⟶ (∀x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes &amp;quot;∀x.∀y.∀z. R x y ∧ R y z ⟶ R x z&amp;quot; and&lt;br /&gt;
          &amp;quot;∀x. ¬R x x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x.∀y. R x y ⟶ ¬R y x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ∨ Q x&amp;quot; and&lt;br /&gt;
          &amp;quot;∃x. ¬Q x&amp;quot; and&lt;br /&gt;
          &amp;quot;∀x. R x ⟶ ¬P x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. ¬R x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x ∨ R x&amp;quot; and&lt;br /&gt;
          &amp;quot;¬(∃x. P x ∧ R x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. P x ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes &amp;quot;∃x.∃y. R x y ∨ R y x&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x.∃y. R x y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_10&amp;diff=266</id>
		<title>Rel 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_10&amp;diff=266"/>
		<updated>2011-03-15T05:14:13Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Protegió «Rel 10» ([edit=sysop] (indefinido) [move=sysop] (indefinido))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
theory Relacion_10&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
section {* Deducción natural de primer orden *}&lt;br /&gt;
&lt;br /&gt;
text {* Los ejercicios de esta relación deben de resolverse usando sólo&lt;br /&gt;
  las reglas básicas de la deducción natural proposicional y de primer &lt;br /&gt;
  orden:&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;
  · allI:       ⟦∀x. P x; P x ⟹ R⟧ ⟹ R&lt;br /&gt;
  · allE:       (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
  · exI:        P x ⟹ ∃x. P x&lt;br /&gt;
  · exE:        ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&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;
lemma ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∀x. P x) ⟶ (∀x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;∃x. ¬P x&amp;quot; &lt;br /&gt;
  shows &amp;quot; ¬(∀x. P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;∀x. P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀y. P y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∀x. ¬Q x) ⟶ (∀x. ¬P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ ¬Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∃x. P x ∧ Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes &amp;quot;∀x. ∀y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀u. ∀v. P u v&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes &amp;quot;∃x. ∃y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃u. ∃v. P u v&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_8:&lt;br /&gt;
  assumes &amp;quot;∃x. ∀y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀y. ∃x. P x y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes &amp;quot;∃x. P a ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;P a ⟶ (∃x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes &amp;quot;P a ⟶ (∃x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_11:&lt;br /&gt;
  assumes &amp;quot;(∃x. P x) ⟶ Q a&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P x ⟶ Q a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q a&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P x ⟶ Q a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes &amp;quot;(∀x. P x) ∨ (∀x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P x ∨ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes &amp;quot;∃x. P x ∧ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∃x. P x) ∧ (∃x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes &amp;quot;∀x.∀y. P y ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∃y. P y) ⟶ (∀x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes &amp;quot;¬(∀x. ¬P x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes &amp;quot;∀x. ¬P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∃x. P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes &amp;quot;∃x. P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∀x. ¬P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes &amp;quot;P a ⟶ (∀x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes &amp;quot;∀x.∀y.∀z. R x y ∧ R y z ⟶ R x z&amp;quot; and&lt;br /&gt;
          &amp;quot;∀x. ¬R x x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x.∀y. R x y ⟶ ¬R y x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ∨ Q x&amp;quot; and&lt;br /&gt;
          &amp;quot;∃x. ¬Q x&amp;quot; and&lt;br /&gt;
          &amp;quot;∀x. R x ⟶ ¬P x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. ¬R x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x ∨ R x&amp;quot; and&lt;br /&gt;
          &amp;quot;¬(∃x. P x ∧ R x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. P x ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes &amp;quot;∃x.∃y. R x y ∨ R y x&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x.∃y. R x y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_10&amp;diff=265</id>
		<title>Rel 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_10&amp;diff=265"/>
		<updated>2011-03-15T05:13:56Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
theory Relacion_10&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
section {* Deducción natural de primer orden *}&lt;br /&gt;
&lt;br /&gt;
text {* Los ejercicios de esta relación deben de resolverse usando sólo&lt;br /&gt;
  las reglas básicas de la deducción natural proposicional y de primer &lt;br /&gt;
  orden:&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;
  · allI:       ⟦∀x. P x; P x ⟹ R⟧ ⟹ R&lt;br /&gt;
  · allE:       (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
  · exI:        P x ⟹ ∃x. P x&lt;br /&gt;
  · exE:        ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&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;
lemma ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∀x. P x) ⟶ (∀x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;∃x. ¬P x&amp;quot; &lt;br /&gt;
  shows &amp;quot; ¬(∀x. P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;∀x. P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀y. P y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∀x. ¬Q x) ⟶ (∀x. ¬P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ ¬Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∃x. P x ∧ Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes &amp;quot;∀x. ∀y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀u. ∀v. P u v&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes &amp;quot;∃x. ∃y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃u. ∃v. P u v&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_8:&lt;br /&gt;
  assumes &amp;quot;∃x. ∀y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀y. ∃x. P x y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes &amp;quot;∃x. P a ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;P a ⟶ (∃x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes &amp;quot;P a ⟶ (∃x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_11:&lt;br /&gt;
  assumes &amp;quot;(∃x. P x) ⟶ Q a&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P x ⟶ Q a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q a&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P x ⟶ Q a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes &amp;quot;(∀x. P x) ∨ (∀x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P x ∨ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes &amp;quot;∃x. P x ∧ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∃x. P x) ∧ (∃x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes &amp;quot;∀x.∀y. P y ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∃y. P y) ⟶ (∀x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes &amp;quot;¬(∀x. ¬P x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes &amp;quot;∀x. ¬P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∃x. P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes &amp;quot;∃x. P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∀x. ¬P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes &amp;quot;P a ⟶ (∀x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes &amp;quot;∀x.∀y.∀z. R x y ∧ R y z ⟶ R x z&amp;quot; and&lt;br /&gt;
          &amp;quot;∀x. ¬R x x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x.∀y. R x y ⟶ ¬R y x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ∨ Q x&amp;quot; and&lt;br /&gt;
          &amp;quot;∃x. ¬Q x&amp;quot; and&lt;br /&gt;
          &amp;quot;∀x. R x ⟶ ¬P x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. ¬R x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x ∨ R x&amp;quot; and&lt;br /&gt;
          &amp;quot;¬(∃x. P x ∧ R x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. P x ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes &amp;quot;∃x.∃y. R x y ∨ R y x&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x.∃y. R x y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_10&amp;diff=264</id>
		<title>Rel 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_10&amp;diff=264"/>
		<updated>2011-03-15T05:13:09Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
theory Relacion_10&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
section {* Deducción natural de primer orden *}&lt;br /&gt;
&lt;br /&gt;
text {* Los ejercicios de esta relación deben de resolverse usando sólo&lt;br /&gt;
  las reglas básicas de la deducción natural proposicional y de primer orden:&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;
  · allI:       ⟦∀x. P x; P x ⟹ R⟧ ⟹ R&lt;br /&gt;
  · allE:       (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
  · exI:        P x ⟹ ∃x. P x&lt;br /&gt;
  · exE:        ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&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;
lemma ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∀x. P x) ⟶ (∀x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;∃x. ¬P x&amp;quot; &lt;br /&gt;
  shows &amp;quot; ¬(∀x. P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;∀x. P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀y. P y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∀x. ¬Q x) ⟶ (∀x. ¬P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ ¬Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∃x. P x ∧ Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes &amp;quot;∀x. ∀y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀u. ∀v. P u v&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes &amp;quot;∃x. ∃y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃u. ∃v. P u v&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_8:&lt;br /&gt;
  assumes &amp;quot;∃x. ∀y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀y. ∃x. P x y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes &amp;quot;∃x. P a ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;P a ⟶ (∃x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes &amp;quot;P a ⟶ (∃x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_11:&lt;br /&gt;
  assumes &amp;quot;(∃x. P x) ⟶ Q a&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P x ⟶ Q a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q a&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P x ⟶ Q a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes &amp;quot;(∀x. P x) ∨ (∀x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P x ∨ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes &amp;quot;∃x. P x ∧ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∃x. P x) ∧ (∃x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes &amp;quot;∀x.∀y. P y ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∃y. P y) ⟶ (∀x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes &amp;quot;¬(∀x. ¬P x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes &amp;quot;∀x. ¬P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∃x. P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes &amp;quot;∃x. P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∀x. ¬P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes &amp;quot;P a ⟶ (∀x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes &amp;quot;∀x.∀y.∀z. R x y ∧ R y z ⟶ R x z&amp;quot; and&lt;br /&gt;
          &amp;quot;∀x. ¬R x x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x.∀y. R x y ⟶ ¬R y x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ∨ Q x&amp;quot; and&lt;br /&gt;
          &amp;quot;∃x. ¬Q x&amp;quot; and&lt;br /&gt;
          &amp;quot;∀x. R x ⟶ ¬P x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. ¬R x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x ∨ R x&amp;quot; and&lt;br /&gt;
          &amp;quot;¬(∃x. P x ∧ R x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. P x ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes &amp;quot;∃x.∃y. R x y ∨ R y x&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x.∃y. R x y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_10&amp;diff=263</id>
		<title>Rel 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Rel_10&amp;diff=263"/>
		<updated>2011-03-15T05:11:42Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; theory Relacion_10 imports Main  begin   section {* Deducción natural de primer orden *}  text {* Los ejercicios de esta relación deben de resolverse usan...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
theory Relacion_10&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
section {* Deducción natural de primer orden *}&lt;br /&gt;
&lt;br /&gt;
text {* Los ejercicios de esta relación deben de resolverse usando sólo&lt;br /&gt;
  las reglas básicas de la deducción natural proposicional: &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;
  y se primer orden&lt;br /&gt;
  · allI:       ⟦∀x. P x; P x ⟹ R⟧ ⟹ R&lt;br /&gt;
  · allE:       (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
  · exI:        P x ⟹ ∃x. P x&lt;br /&gt;
  · exE:        ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&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;
lemma ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∀x. P x) ⟶ (∀x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;∃x. ¬P x&amp;quot; &lt;br /&gt;
  shows &amp;quot; ¬(∀x. P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;∀x. P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀y. P y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∀x. ¬Q x) ⟶ (∀x. ¬P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ ¬Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∃x. P x ∧ Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes &amp;quot;∀x. ∀y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀u. ∀v. P u v&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes &amp;quot;∃x. ∃y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃u. ∃v. P u v&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_8:&lt;br /&gt;
  assumes &amp;quot;∃x. ∀y. P x y&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀y. ∃x. P x y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes &amp;quot;∃x. P a ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;P a ⟶ (∃x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes &amp;quot;P a ⟶ (∃x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_11:&lt;br /&gt;
  assumes &amp;quot;(∃x. P x) ⟶ Q a&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P x ⟶ Q a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q a&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P x ⟶ Q a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes &amp;quot;(∀x. P x) ∨ (∀x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P x ∨ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes &amp;quot;∃x. P x ∧ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∃x. P x) ∧ (∃x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes &amp;quot;∀x.∀y. P y ⟶ Q x&amp;quot; &lt;br /&gt;
  shows &amp;quot;(∃y. P y) ⟶ (∀x. Q x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes &amp;quot;¬(∀x. ¬P x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x. P x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes &amp;quot;∀x. ¬P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∃x. P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes &amp;quot;∃x. P x&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬(∀x. ¬P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes &amp;quot;P a ⟶ (∀x. Q x)&amp;quot; &lt;br /&gt;
  shows &amp;quot;∀x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes &amp;quot;∀x.∀y.∀z. R x y ∧ R y z ⟶ R x z&amp;quot; and&lt;br /&gt;
          &amp;quot;∀x. ¬R x x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x.∀y. R x y ⟶ ¬R y x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ∨ Q x&amp;quot; and&lt;br /&gt;
          &amp;quot;∃x. ¬Q x&amp;quot; and&lt;br /&gt;
          &amp;quot;∀x. R x ⟶ ¬P x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. ¬R x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x ∨ R x&amp;quot; and&lt;br /&gt;
          &amp;quot;¬(∃x. P x ∧ R x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. P x ⟶ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes &amp;quot;∃x.∃y. R x y ∨ R y x&amp;quot; &lt;br /&gt;
  shows &amp;quot;∃x.∃y. R x y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Razonamiento_autom%C3%A1tico&amp;diff=262</id>
		<title>Razonamiento automático</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Razonamiento_autom%C3%A1tico&amp;diff=262"/>
		<updated>2011-03-15T05:10:46Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: /* Ejercicios complementarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Razonamiento automático (2010-11) ==&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
* [[Deducción natural en lógica proposicional con Isabelle/Isar]].&lt;br /&gt;
* [[Deducción natural en lógica de primer orden con Isabelle/Isar]].&lt;br /&gt;
&lt;br /&gt;
=== Relaciones de ejercicios ===&lt;br /&gt;
&lt;br /&gt;
==== Ejercicios de deducción natural ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 1&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica proposicional. ([[Rel_1|Enunciado]] y [[Relación 1|Solución]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 2&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica de primer orden. ([[Rel_2|Enunciado]] y [[Relación 2|Solución]]).&lt;br /&gt;
&lt;br /&gt;
==== Razonamiento por inducción sobre listas ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 3&amp;#039;&amp;#039;&amp;#039;: Cons inverso y cuantificadores sobre listas. ([[Rel_3|Enunciado]] y [[Relación 3|Solución]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 4&amp;#039;&amp;#039;&amp;#039;: Sustitución, inversión y eliminación. ([[Rel_4|Enunciado]] y [[Relación 4|Solución]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 5&amp;#039;&amp;#039;&amp;#039;: Menor posición válida. ([[Rel_5|Enunciado]] y [[Relación 5|Solución]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 6&amp;#039;&amp;#039;&amp;#039;: Número de elementos válidos. ([[Rel_6|Enunciado]] y [[Relación 6|Solución]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 7&amp;#039;&amp;#039;&amp;#039;: Contador de occurrencias. ([[Rel_7|Enunciado]] y [[Relación 7|Solución]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 8&amp;#039;&amp;#039;&amp;#039;: Suma y aplanamiento de listas. ([[Rel_8|Enunciado]] y [[Relación 8|Solución]]).&lt;br /&gt;
&lt;br /&gt;
==== Ejercicios complementarios ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 9&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica proposicional. ([[Rel_9|Enunciado]] y [[Relación 9|Solución]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 10&amp;#039;&amp;#039;&amp;#039;: Deducción natural en lógica de primer orden. ([[Rel_10|Enunciado]] y [[Relación 10|Solución]]).&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_9&amp;diff=261</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2010/index.php?title=Relaci%C3%B3n_9&amp;diff=261"/>
		<updated>2011-03-14T20:57:47Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; theory Relacion_9 imports Main  begin   section {* Deducción natural proposicional *}  text {* Los ejercicios de esta relación deben de resolverse usando ...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
theory Relacion_9&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
section {* Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
text {* Los ejercicios de esta relación deben de resolverse usando sólo&lt;br /&gt;
  las reglas básicas de la deducción natural proposicional: &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;
*}&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;
lemma ejercicio_1:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;q⟶r&amp;quot; and &lt;br /&gt;
          3: &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶(q⟶r)&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p⟶q&amp;quot; and  &lt;br /&gt;
          3: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes 1: &amp;quot;p⟶q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;q⟶r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  &amp;quot;p⟶(q⟶r) ⟹ q⟶(p⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  &amp;quot;p⟶(q⟶r) ⟹ (p⟶q)⟶(p⟶r)&amp;quot;&lt;br /&gt;
oops &lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  &amp;quot;p ⟹ q⟶p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_8:&lt;br /&gt;
  &amp;quot;p⟶(q⟶p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  &amp;quot;p⟶q ⟹ (q⟶r)⟶(p⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  &amp;quot;p⟶(q⟶(r⟶s)) ⟹ r⟶(q⟶(p⟶s))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_11:&lt;br /&gt;
  &amp;quot;(p⟶(q⟶r))⟶((p⟶q)⟶(p⟶r))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  &amp;quot;(p⟶q)⟶r ⟹ p⟶(q⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  &amp;quot;⟦p; q⟧ ⟹ p∧q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  &amp;quot;p∧q ⟹ p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  &amp;quot;p∧q ⟹ q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  &amp;quot;p∧(q∧r) ⟹ (p∧q)∧r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  &amp;quot;(p∧q)∧r ⟹ p∧(q∧r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  &amp;quot;p∧q ⟹ p⟶q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  &amp;quot;(p⟶q)∧(p⟶r) ⟹ p⟶q∧r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  &amp;quot;p⟶q∧r ⟹ (p⟶q)∧(p⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  &amp;quot;p⟶(q⟶r) ⟹ p∧q⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  &amp;quot;p∧q⟶r ⟹ p⟶(q⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  &amp;quot;(p⟶q)⟶r ⟹ p∧q⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_24:&lt;br /&gt;
  &amp;quot;p∧(q⟶r) ⟹ (p⟶q)⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_25:&lt;br /&gt;
  &amp;quot;p ⟹ p∨q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_26:&lt;br /&gt;
  &amp;quot;q ⟹ p∨q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_27:&lt;br /&gt;
  &amp;quot;p∨q ⟹ q∨p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_28:&lt;br /&gt;
  &amp;quot;q⟶r ⟹ p∨q⟶p∨r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_29:&lt;br /&gt;
  &amp;quot;p∨p ⟹ p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_30:&lt;br /&gt;
  &amp;quot;p ⟹ p∨p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_31:&lt;br /&gt;
  &amp;quot;p∨(q∨r) ⟹ (p∨q)∨r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_32:&lt;br /&gt;
  &amp;quot;(p∨q)∨r ⟹ p∨(q∨r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_33:&lt;br /&gt;
  &amp;quot;p∧(q∨r) ⟹ (p∧q)∨(p∧r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_34:&lt;br /&gt;
  &amp;quot;(p∧q)∨(p∧r) ⟹ p∧(q∨r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_35:&lt;br /&gt;
  &amp;quot;p∨(q∧r) ⟹ (p∨q)∧(p∨r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_36:&lt;br /&gt;
  &amp;quot;(p∨q)∧(p∨r) ⟹ p∨(q∧r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_37:&lt;br /&gt;
  &amp;quot;(p⟶r)∧(q⟶r) ⟹ p∨q⟶r&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_38:&lt;br /&gt;
  &amp;quot;p∨q⟶r ⟹ (p⟶r)∧(q⟶r)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_39:&lt;br /&gt;
  &amp;quot;p ⟹ ¬¬p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_40:&lt;br /&gt;
  &amp;quot;¬p ⟹ p⟶q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_41:&lt;br /&gt;
  &amp;quot;p⟶q ⟹ ¬q⟶¬p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_42:&lt;br /&gt;
  &amp;quot;⟦p∨q; ¬q⟧ ⟹ p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_43:&lt;br /&gt;
  &amp;quot;⟦p∨q; ¬p⟧ ⟹ q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_44:&lt;br /&gt;
  &amp;quot;p∨q ⟹ ¬(¬p∧¬q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_45:&lt;br /&gt;
  &amp;quot;p∧q ⟹ ¬(¬p∨¬q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_46:&lt;br /&gt;
  &amp;quot;¬(p∨q) ⟹ ¬p∧¬q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_47:&lt;br /&gt;
  &amp;quot;¬p∧¬q ⟹ ¬(p∨q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_48:&lt;br /&gt;
  &amp;quot;¬p∨¬q ⟹ ¬(p∧q)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_49:&lt;br /&gt;
  &amp;quot;¬(p∧¬p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_50:&lt;br /&gt;
  &amp;quot;p∧¬p ⟹ q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_51:&lt;br /&gt;
  &amp;quot;¬¬p ⟹ p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_52:&lt;br /&gt;
  &amp;quot;p∨¬p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_53:&lt;br /&gt;
  &amp;quot;((p⟶q)⟶p)⟶p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_54:&lt;br /&gt;
  &amp;quot;¬q⟶¬p ⟹ p⟶q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_55:&lt;br /&gt;
  &amp;quot;¬(¬p∧¬q) ⟹ p∨q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_56:&lt;br /&gt;
  &amp;quot;¬(¬p∨¬q) ⟹ p∧q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_57:&lt;br /&gt;
  &amp;quot;¬(p∧q) ⟹ ¬p∨¬q&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_58:&amp;quot;(p⟶q)∨(q⟶p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
</feed>