<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/LMF2015/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fracarmol1</id>
	<title>Lógica matemática y fundamentos (2014-15) - Contribuciones del usuario [es]</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/LMF2015/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fracarmol1"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php/Especial:Contribuciones/Fracarmol1"/>
	<updated>2026-07-18T09:41:12Z</updated>
	<subtitle>Contribuciones del usuario</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_12&amp;diff=281</id>
		<title>Relación 12</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_12&amp;diff=281"/>
		<updated>2015-04-30T17:49:03Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- ResolucionProposicional.hs&lt;br /&gt;
-- Resolución proposicional.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
module ResolucionProposicional where&lt;br /&gt;
&lt;br /&gt;
import SintaxisSemantica&lt;br /&gt;
import FormasNormales&lt;br /&gt;
import Clausulas&lt;br /&gt;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Resolventes                                                        --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1: Definir la función&lt;br /&gt;
--    resolvente :: Cláusula -&amp;gt; Cláusula -&amp;gt; Literal -&amp;gt; Cláusula&lt;br /&gt;
-- tal que (resolvente c1 c2 l) es la resolvente de c1 y c2 respecto del&lt;br /&gt;
-- literal l. Por ejemplo,&lt;br /&gt;
--    resolvente [no p,q] [no q,r] q  ==&amp;gt;  [no p,r]&lt;br /&gt;
--    resolvente [no p,no q] [q,r] (no q)  ==&amp;gt;  [no p,r]&lt;br /&gt;
--    resolvente [no p,q] [no p,no q] q  ==&amp;gt;  [no p]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
resolvente :: Cláusula -&amp;gt; Cláusula -&amp;gt; Literal -&amp;gt; Cláusula&lt;br /&gt;
resolvente c1 c2 l = nub (filter (/= l )(filter &lt;br /&gt;
                        (/= (complementario l)) (c1 ++ c2)))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2: Definir la función&lt;br /&gt;
--    resolventes :: Cláusula -&amp;gt; Cláusula -&amp;gt; [Cláusula]&lt;br /&gt;
-- tal que (resolventes c1 c2) es el conjunto de las resolventes de c1 y&lt;br /&gt;
-- c2. Por ejemplo,&lt;br /&gt;
--    resolventes [no p,q] [p,no q]  ==&amp;gt;  [[q,no q],[no p,p]]&lt;br /&gt;
--    resolventes [no p,q] [p,q]     ==&amp;gt;  [[q]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
resolventes :: Cláusula -&amp;gt; Cláusula -&amp;gt; [Cláusula]&lt;br /&gt;
resolventes c1 c2 = [resolvente c1 c2 l | l &amp;lt;- c1, &lt;br /&gt;
                              elem (complementario l) c2 ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3: Definir la función&lt;br /&gt;
--    resolventesCláusulaConjunto :: Cláusula -&amp;gt; [Cláusula] -&amp;gt; [Cláusula]&lt;br /&gt;
-- tal que (resolventes c s) es el conjunto de las resolventes de c y&lt;br /&gt;
-- s. Por ejemplo, &lt;br /&gt;
--    resolventesCláusulaConjunto [no p,q] [[p,q],[p,r],[no q,s]]&lt;br /&gt;
--    ==&amp;gt; [[q],[q,r],[no p,s]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
resolventesCláusulaConjunto :: Cláusula -&amp;gt; [Cláusula] -&amp;gt; [Cláusula]&lt;br /&gt;
resolventesCláusulaConjunto c s = aux c s&lt;br /&gt;
                                 where aux x [] = []&lt;br /&gt;
                                       aux x (y:ys) = resolventes x y ++ &lt;br /&gt;
                                                      aux x ys&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Eliminación de tautologías                                         --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1: Definir la función&lt;br /&gt;
--    esTautología :: Cláusula -&amp;gt; Bool&lt;br /&gt;
-- tal que (esTautología c) se verifica si c es una tautología. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esTautología [p, q, no p]  ==&amp;gt;  True&lt;br /&gt;
--    esTautología [p, q, no r]  ==&amp;gt;  False&lt;br /&gt;
--    esTautología []            ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
esTautología :: Cláusula -&amp;gt; Bool&lt;br /&gt;
esTautología c = or [elem (complementario x) c | x &amp;lt;- c]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2: Definir la función&lt;br /&gt;
--    eliminaTautologías :: [Cláusula] -&amp;gt; [Cláusula]&lt;br /&gt;
-- tal que (eliminaTautologías s) es el conjunto obtenido eliminando las&lt;br /&gt;
-- tautologías de s. Por ejemplo,&lt;br /&gt;
--    eliminaTautologías [[p, q], [p, q, no p]]  ==&amp;gt;  [[p,q]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
eliminaTautologías :: [Cláusula] -&amp;gt; [Cláusula]&lt;br /&gt;
eliminaTautologías s = [ x | x &amp;lt;- s, not( esTautologia x)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Decisión de inconsistencia por resolución                          --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4: Definir la función&lt;br /&gt;
--    esInconsistentePorResolución :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esInconsistentePorResolución s) se verifica si s es&lt;br /&gt;
-- inconsistente mediante resolución. Por ejemplo,&lt;br /&gt;
--    esInconsistentePorResolución [[p],[no p,q],[no q]]&lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
--    esInconsistentePorResolución [[p],[no p,q]]&lt;br /&gt;
--    ==&amp;gt; False&lt;br /&gt;
--    esInconsistentePorResolución [[p,q],[no p,q],[p,no q],[no p,no q]]&lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
--    esInconsistentePorResolución [[p,q],[p,r],[no q,no r],[no p]]&lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esInconsistentePorResolución :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esInconsistentePorResolución s = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Validez mediante resolución                                        --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5: Definir la función&lt;br /&gt;
--    esVálidaPorResolución :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esVálidaPorResolución f) se verifica si f es válida por&lt;br /&gt;
-- resolución. Por ejemplo, &lt;br /&gt;
--    esVálidaPorResolución (p --&amp;gt; p)                 ==&amp;gt;  True&lt;br /&gt;
--    esVálidaPorResolución ((p --&amp;gt; q) \/ (q --&amp;gt; p))  ==&amp;gt;  True&lt;br /&gt;
--    esVálidaPorResolución (p --&amp;gt; q)                 ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esVálidaPorResolución :: Prop -&amp;gt; Bool&lt;br /&gt;
esVálidaPorResolución f = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Consecuencia mediante resolución                                   --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6: Definir la función&lt;br /&gt;
--    esConsecuenciaPorResolución :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esConsecuenciaPorResolución s f) se verifica si f es&lt;br /&gt;
-- consecuencia de s mediante el método de resolución. Por ejemplo,&lt;br /&gt;
--    esConsecuenciaPorResolución [p --&amp;gt; q, q --&amp;gt; r] (p --&amp;gt; r)  &lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
--    esConsecuenciaPorResolución [p --&amp;gt; q, q --&amp;gt; r] (p &amp;lt;--&amp;gt; r)&lt;br /&gt;
--    ==&amp;gt; False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esConsecuenciaPorResolución :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esConsecuenciaPorResolución s f = undefined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_11&amp;diff=280</id>
		<title>Relación 11</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_11&amp;diff=280"/>
		<updated>2015-04-29T18:39:07Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- Clausulas.hs&lt;br /&gt;
-- Cláusulas.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
module Clausulas where&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Librería suxiliares                                                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
import SintaxisSemantica&lt;br /&gt;
import FormasNormales&lt;br /&gt;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Cláusulas                                                          --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1: Definir el tipo de datos Cláusula como una lista de&lt;br /&gt;
-- literales. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
type Cláusula = [Literal]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2: Definir la función&lt;br /&gt;
--    cláusula :: Prop -&amp;gt; Cláusula&lt;br /&gt;
-- tal que (cláusula f) es la cláusula de la fórmula-clausal f. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cláusula p                                 ==&amp;gt;  [p]&lt;br /&gt;
--    cláusula (no p)                            ==&amp;gt;  [no p]&lt;br /&gt;
--    cláusula (((no p) \/ r) \/ ((no p) \/ q))  ==&amp;gt;  [q,r,no p]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
cláusula :: Prop -&amp;gt; Cláusula&lt;br /&gt;
cláusula f = literalesFormulaFNN f&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3: Definir la función&lt;br /&gt;
--    cláusulasFNC :: Prop -&amp;gt; [Cláusula]&lt;br /&gt;
-- tal que (cláusulasFNC f) es el conjunto de cláusulas de la fórmula en&lt;br /&gt;
-- forma normal conjuntiva f. Por ejmplo,&lt;br /&gt;
--    cláusulasFNC (p /\ ((no q) \/ r))&lt;br /&gt;
--    ==&amp;gt; [[p],[r, no q]]&lt;br /&gt;
--    cláusulasFNC (((no p) \/ q) /\ ((no p) \/ (no r)))&lt;br /&gt;
--    ==&amp;gt; [[q, no p],[no p,no r]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cláusulasFNC :: Prop -&amp;gt; [Cláusula]&lt;br /&gt;
cláusulasFNC = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4: Definir la función&lt;br /&gt;
--    cláusulas :: Prop -&amp;gt; [Cláusula]&lt;br /&gt;
-- tal que (cláusulas f) es un conjunto de cláusulas equivalente a&lt;br /&gt;
-- f. Por ejemplo,&lt;br /&gt;
--    cláusulas (p /\ (q --&amp;gt; r))       &lt;br /&gt;
--    ==&amp;gt; [[p],[r,no q]]&lt;br /&gt;
--    cláusulas (no (p /\ (q --&amp;gt; r)))  &lt;br /&gt;
--    ==&amp;gt; [[q,no p],[no p,no r]]&lt;br /&gt;
--    cláusulas (no(p &amp;lt;--&amp;gt; r))         &lt;br /&gt;
--    ==&amp;gt; [[p,r],[p,no p],[r,no r],[no p,no r]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
cláusulas :: Prop -&amp;gt; [Cláusula]&lt;br /&gt;
cláusulas f = clausulasFNC (formaNormalConjuntiva f)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Cláusulas de un conjunto de fórmulas                               --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5: Definir la función&lt;br /&gt;
--    cláusulasConjunto :: [Prop] -&amp;gt; [Cláusula]&lt;br /&gt;
-- tal que (cláusulasConjunto s) es un conjunto de cláusulas equivalente&lt;br /&gt;
-- a s. Por ejemplo,&lt;br /&gt;
--    cláusulasConjunto [p --&amp;gt; q, q --&amp;gt; r]   ==&amp;gt;  [[q,no p],[r,no q]]&lt;br /&gt;
--    cláusulasConjunto [p --&amp;gt; q, q &amp;lt;--&amp;gt; p]  ==&amp;gt;  [[q,no p],[p,no q]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
cláusulasConjunto :: [Prop] -&amp;gt; [Cláusula]&lt;br /&gt;
cláusulasConjunto s = nub (aux s)&lt;br /&gt;
                     where aux [] = []&lt;br /&gt;
                           aux (x:xs) = clausulas x ++ aux xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Símbolos proposicionales de una cláusula                           --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6: Definir la función&lt;br /&gt;
--    símbolosProposicionalesCláusula :: Cláusula -&amp;gt; [Prop]&lt;br /&gt;
-- tal que (símbolosProposicionalesCláusula c) es el conjunto de los&lt;br /&gt;
-- símbolos proposicionales de c. Por ejemplo,&lt;br /&gt;
--    símbolosProposicionalesCláusula [p, q, no p]  ==&amp;gt;  [p,q]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
símbolosProposicionalesCláusula :: Cláusula -&amp;gt; [Prop]&lt;br /&gt;
símbolosProposicionalesCláusula f = simbolosPropConj f&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Símbolos proposicionales de un conjunto de cláusulas               --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7: Definir la función&lt;br /&gt;
--    símbolosProposicionalesConjuntoCláusula :: [Cláusula] -&amp;gt; [Prop]&lt;br /&gt;
-- tal que (símbolosProposicionalesConjuntoCláusula s) es el conjunto de los&lt;br /&gt;
-- símbolos proposicionales de s. Por ejemplo,&lt;br /&gt;
--    símbolosProposicionalesConjuntoCláusula [[p, q],[no q, r]]&lt;br /&gt;
--    ==&amp;gt; [p,q,r]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
símbolosProposicionalesConjuntoCláusula :: [Cláusula] -&amp;gt; [Prop]&lt;br /&gt;
símbolosProposicionalesConjuntoCláusula s =  nub (aux s)&lt;br /&gt;
                              where aux [] = []&lt;br /&gt;
                                    aux (x:xs) = simbolosPropConj x ++ aux x&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Interpretaciones de una cláusula                                   --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8: Definir la función&lt;br /&gt;
--    interpretacionesCláusula :: Cláusula -&amp;gt; [Interpretación]&lt;br /&gt;
-- tal que (interpretacionesCláusula c) es el conjunto de&lt;br /&gt;
-- interpretaciones de c. Por ejemplo,&lt;br /&gt;
--    interpretacionesCláusula [p, q, no p]  ==&amp;gt;  [[p,q],[p],[q],[]]&lt;br /&gt;
--    interpretacionesCláusula []            ==&amp;gt;  [[]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
interpretacionesCláusula :: Cláusula -&amp;gt; [Interpretación]&lt;br /&gt;
interpretacionesCláusula c = subconjuntos&lt;br /&gt;
                             (simbolosProposicionalesClausula c)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Interpretaciones de un conjunto de cláusulas                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9: Definir la función&lt;br /&gt;
--    interpretacionesConjuntoCláusula :: [Cláusula] -&amp;gt; [Interpretación]&lt;br /&gt;
-- tal que (interpretacionesConjuntoCláusula s) es el conjunto de&lt;br /&gt;
-- interpretaciones de s. Por ejemplo,&lt;br /&gt;
--    interpretacionesConjuntoCláusula [[p, no q],[no p, q]]&lt;br /&gt;
--    ==&amp;gt; [[p,q],[p],[q],[]]&lt;br /&gt;
--    interpretacionesConjuntoCláusula []&lt;br /&gt;
--    ==&amp;gt; [[]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
interpretacionesConjuntoCláusula :: [Cláusula] -&amp;gt; [Interpretación]&lt;br /&gt;
interpretacionesConjuntoCláusula c = nub (aux c)&lt;br /&gt;
                             where aux [] = [[]]&lt;br /&gt;
                                   aux (x:xs) = &lt;br /&gt;
                                      interpretacionesClausula x ++ aux xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Modelos de cláusulas                                               --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10: Definir la función&lt;br /&gt;
--    esModeloLiteral :: Interpretación -&amp;gt; Literal -&amp;gt; Bool&lt;br /&gt;
-- tal que (esModeloLiteral i l) se verifica si i es modelo de l. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esModeloLiteral [p,r] p       ==&amp;gt;  True&lt;br /&gt;
--    esModeloLiteral [p,r] q       ==&amp;gt;  False&lt;br /&gt;
--    esModeloLiteral [p,r] (no p)  ==&amp;gt;  False&lt;br /&gt;
--    esModeloLiteral [p,r] (no q)  ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esModeloLiteral :: Interpretación -&amp;gt; Literal -&amp;gt; Bool&lt;br /&gt;
esModeloLiteral = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11: Definir la función&lt;br /&gt;
--    esModeloCláusula :: Interpretación -&amp;gt; Cláusula -&amp;gt; Bool&lt;br /&gt;
-- tal que (esModeloCláusula i c) se verifica si i es modelo de c . Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esModeloCláusula [p,r] [p, q]     ==&amp;gt;  True&lt;br /&gt;
--    esModeloCláusula [r] [p, no q]    ==&amp;gt;  True&lt;br /&gt;
--    esModeloCláusula [q,r] [p, no q]  ==&amp;gt;  False&lt;br /&gt;
--    esModeloCláusula [q,r] []         ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esModeloCláusula :: Interpretación -&amp;gt; Cláusula -&amp;gt; Bool&lt;br /&gt;
esModeloCláusula i c = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12: Definir la función&lt;br /&gt;
--    modelosCláusula :: Cláusula -&amp;gt; [Interpretación]&lt;br /&gt;
-- tal que (modelosCláusula c) es la lista de los modelos de c. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    modelosCláusula [no p, q]  ==&amp;gt;  [[p,q],[q],[]]&lt;br /&gt;
--    modelosCláusula [no p, p]  ==&amp;gt;  [[p],[]]&lt;br /&gt;
--    modelosCláusula []         ==&amp;gt;  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
modelosCláusula :: Cláusula -&amp;gt; [Interpretación]&lt;br /&gt;
modelosCláusula c = aux (interpretacionesClausula c)&lt;br /&gt;
                 where aux [] = []&lt;br /&gt;
                       aux (x:xs) | esModeloClausula x c = x : aux xs&lt;br /&gt;
                                  | otherwise = aux xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Modelos de conjuntos de cláusulas                                  --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13: Definir la función&lt;br /&gt;
--    esModeloConjuntoCláusulas :: Interpretación -&amp;gt; [Cláusula] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esModeloConjuntoCláusulas i c) se verifica si i es modelo de&lt;br /&gt;
-- c. Por ejemplo,&lt;br /&gt;
--    esModeloConjuntoCláusulas [p,r] [[p, no q], [r]]  ==&amp;gt;  True&lt;br /&gt;
--    esModeloConjuntoCláusulas [p] [[p, no q], [r]]    ==&amp;gt;  False&lt;br /&gt;
--    esModeloConjuntoCláusulas [p] []                  ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
esModeloConjuntoCláusulas :: Interpretación -&amp;gt; [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esModeloConjuntoCláusulas i s = aux i s&lt;br /&gt;
                    where aux i [] = True&lt;br /&gt;
                          aux i (x:xs) = esModeloClausula i x &amp;amp;&amp;amp; aux i xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14: Definir la función&lt;br /&gt;
--    modelosConjuntoCláusulas :: [Cláusula] -&amp;gt; [Interpretación]&lt;br /&gt;
-- tal que (modelosConjuntoCláusulas s) es la lista de los modelos de&lt;br /&gt;
-- s. Por ejemplo, &lt;br /&gt;
--    modelosConjuntoCláusulas [[no p, q], [no q, p]]    &lt;br /&gt;
--    ==&amp;gt; [[p,q],[]]&lt;br /&gt;
--    modelosConjuntoCláusulas [[no p, q], [p], [no q]]  &lt;br /&gt;
--    ==&amp;gt; []&lt;br /&gt;
--    modelosConjuntoCláusulas [[p, no p, q]]            &lt;br /&gt;
--    ==&amp;gt; [[p,q],[p],[q],[]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
modelosConjuntoCláusulas :: [Cláusula] -&amp;gt; [Interpretación]&lt;br /&gt;
modelosConjuntoCláusulas s = aux1 (aux2 s)&lt;br /&gt;
               where aux1 [] = []&lt;br /&gt;
                     aux1 (x:xs) | not (elem (reverse x) xs) = x : aux1 xs&lt;br /&gt;
                                 | otherwise = aux1 xs&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
aux2 s =  aux2 (interpretacionesConjuntoClausula s)&lt;br /&gt;
                 where aux2 [] = []&lt;br /&gt;
                       aux2 (x:xs) | esModeloConjuntoClausulas x s = x : aux2 xs&lt;br /&gt;
                                  | otherwise = aux2 xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Cláusulas válidas, satisfacibles e insatisfacibles                 --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15: Definir la función&lt;br /&gt;
--    esCláusulaVálida :: Cláusula -&amp;gt; Bool&lt;br /&gt;
-- tal que (esCláusulaVálida c) se verifica si la cláusula c es&lt;br /&gt;
-- válida. Por ejemplo, &lt;br /&gt;
--    esCláusulaVálida [p, q, no p]  ==&amp;gt;  True&lt;br /&gt;
--    esCláusulaVálida [p, q, no r]  ==&amp;gt;  False&lt;br /&gt;
--    esCláusulaVálida []            ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
esCláusulaVálida :: Cláusula -&amp;gt; Bool&lt;br /&gt;
esCláusulaVálida c = modelosClausula c == interpretacionesClausula c&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16: Definir la función&lt;br /&gt;
--    esCláusulaInsatisfacible :: Cláusula -&amp;gt; Bool&lt;br /&gt;
-- tal que (esCláusulaInsatisfacible c) se verifica si la cláusula c es&lt;br /&gt;
-- insatisfacible. Por ejemplo, &lt;br /&gt;
--    esCláusulaInsatisfacible [p, q, no p]  ==&amp;gt;  False&lt;br /&gt;
--    esCláusulaInsatisfacible [p, q, no r]  ==&amp;gt;  False&lt;br /&gt;
--    esCláusulaInsatisfacible []            ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
esCláusulaInsatisfacible :: Cláusula -&amp;gt; Bool&lt;br /&gt;
esCláusulaInsatisfacible c = modelosClausula c == []&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17: Definir la función&lt;br /&gt;
--    esCláusulaSatisfacible :: Cláusula -&amp;gt; Bool&lt;br /&gt;
-- tal que (esCláusulaSatisfacible c) se verifica si la cláusula c es&lt;br /&gt;
-- satisfacible. Por ejemplo, &lt;br /&gt;
--    esCláusulaSatisfacible [p, q, no p]  ==&amp;gt;  True&lt;br /&gt;
--    esCláusulaSatisfacible [p, q, no r]  ==&amp;gt;  True&lt;br /&gt;
--    esCláusulaSatisfacible []  ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
esCláusulaSatisfacible :: Cláusula -&amp;gt; Bool&lt;br /&gt;
esCláusulaSatisfacible c = modelosClausula c /= []&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Conjuntos válidos, consistentes e inconsistentes de cláusulas      --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18: Definir la función&lt;br /&gt;
--    esConjuntoVálidoDeCláusulas :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esConjuntoVálidoDeCláusulas s) se verifica si el conjunto de&lt;br /&gt;
-- cláusulas s es válido. Por ejemplo,&lt;br /&gt;
--    esConjuntoVálidoDeCláusulas [[no p, q], [no q, p]]  ==&amp;gt;  False&lt;br /&gt;
--    esConjuntoVálidoDeCláusulas [[no p, p], [no q, q]]  ==&amp;gt;  True&lt;br /&gt;
--    esConjuntoVálidoDeCláusulas []                      ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
esConjuntoVálidoDeCláusulas :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esConjuntoVálidoDeCláusulas s = aux s&lt;br /&gt;
                               where aux [] = True&lt;br /&gt;
                                     aux (x:xs) = esClausulaValida x &amp;amp;&amp;amp;&lt;br /&gt;
                                                  aux xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19: Definir la función&lt;br /&gt;
--    esConjuntoConsistenteDeCláusulas :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esConjuntoConsistenteDeCláusulas s) se verifica si el&lt;br /&gt;
-- conjunto de cláusulas s es consistente. Por ejemplo,&lt;br /&gt;
--    esConjuntoConsistenteDeCláusulas [[no p, q], [no q, p]]  ==&amp;gt;  True&lt;br /&gt;
--    esConjuntoConsistenteDeCláusulas [[no p, p], [no q, q]]  ==&amp;gt;  True&lt;br /&gt;
--    esConjuntoConsistenteDeCláusulas []                      ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
esConjuntoConsistenteDeCláusulas :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esConjuntoConsistenteDeCláusulas s = modelosConjuntoClausulas s /= []&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20: Definir la función&lt;br /&gt;
--    esConjuntoInconsistenteDeCláusulas :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esConjuntoInconsistenteDeCláusulas s) se verifica si el&lt;br /&gt;
-- conjunto de cláusulas s es consistente. Por ejemplo,&lt;br /&gt;
--    esConjuntoInconsistenteDeCláusulas [[no p,q],[no q,p]]  ==&amp;gt;  False&lt;br /&gt;
--    esConjuntoInconsistenteDeCláusulas [[no p],[p]]         ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
esConjuntoInconsistenteDeCláusulas :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esConjuntoInconsistenteDeCláusulas s = modelosConjuntoClausulas s == []&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Validez de fórmulas mediante cláusulas                             --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 21: Definir la función&lt;br /&gt;
--    esVálidaPorCláusulas :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esVálidaPorCláusulas f) se verifica si el conjunto de&lt;br /&gt;
-- cláusulas de f es válido. Por ejemplo,&lt;br /&gt;
--    esVálidaPorCláusulas (p --&amp;gt; q)                 ==&amp;gt;  False&lt;br /&gt;
--    esVálidaPorCláusulas (p --&amp;gt; p)                 ==&amp;gt;  True&lt;br /&gt;
--    esVálidaPorCláusulas ((p --&amp;gt; q) \/ (q --&amp;gt; p))  ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
esVálidaPorCláusulas :: Prop -&amp;gt; Bool&lt;br /&gt;
esVálidaPorCláusulas f = esConjuntoValidoDeClausulas (clausulas f)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Consecuencia mediante cláusulas                                    --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22: Definir la función&lt;br /&gt;
--    esConsecuenciaEntreCláusulas :: [Cláusula] -&amp;gt; [Cláusula] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esConsecuenciaEntreCláusulas s1 s2) se verifica si todos los&lt;br /&gt;
-- modelos de s1 son modelos de s2. Por ejemplo,&lt;br /&gt;
--    esConsecuenciaEntreCláusulas [[no p,q],[no q,r]] [[no p,r]]  &lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
--    esConsecuenciaEntreCláusulas [[p]] [[p],[q]]                 &lt;br /&gt;
--    ==&amp;gt; False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esConsecuenciaEntreCláusulas :: [Cláusula] -&amp;gt; [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esConsecuenciaEntreCláusulas s1 s2 = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 23: Definir la función&lt;br /&gt;
--    esConsecuenciaPorCláusulas1 :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esConsecuenciaPorCláusulas s f) se verifica si las cláusulas&lt;br /&gt;
-- de f son consecuencias de las de s. Por ejemplo,&lt;br /&gt;
--    esConsecuenciaPorCláusulas [(p --&amp;gt; q), (q --&amp;gt; r)] (p --&amp;gt; r)&lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
--    esConsecuenciaPorCláusulas [p] (p /\ q)&lt;br /&gt;
--    ==&amp;gt; False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esConsecuenciaPorCláusulas :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esConsecuenciaPorCláusulas s f = undefined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_9&amp;diff=272</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_9&amp;diff=272"/>
		<updated>2015-04-25T17:53:00Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- FormasNormales.hs&lt;br /&gt;
-- Formas normales.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
module FormasNormales where&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Librería suxiliares                                                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
import SintaxisSemantica &lt;br /&gt;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Equivalencia lógica                                                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1: Definir la función&lt;br /&gt;
--    esEquivalente :: Prop -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esEquivalente f g) se verifica si f y g son&lt;br /&gt;
-- equivalentes. Por ejemplo,&lt;br /&gt;
--    esEquivalente (p &amp;lt;--&amp;gt; q) ((p --&amp;gt; q) /\ (q --&amp;gt; p))  ==&amp;gt;  True&lt;br /&gt;
--    esEquivalente (p --&amp;gt; q)  ((no p) \/ q)             ==&amp;gt;  True&lt;br /&gt;
--    esEquivalente (p /\ q)   (no ((no p) \/ (no q)))   ==&amp;gt;  True&lt;br /&gt;
--    esEquivalente (p \/ q)   (no ((no p) /\ (no q)))   ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
esEquivalente :: Prop -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esEquivalente f g = esValida (Equi f g)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Transformación a forma normal negativa                             --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2: Definir la función&lt;br /&gt;
--    eliminaEquivalencias :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (eliminaEquivalencias f) es una fórmula equivalente a f sin&lt;br /&gt;
-- signos de equivalencia. Por ejemplo,&lt;br /&gt;
--    eliminaEquivalencias (p &amp;lt;--&amp;gt; q)&lt;br /&gt;
--    ==&amp;gt; ((p --&amp;gt; q) /\ (q --&amp;gt; p))&lt;br /&gt;
--    eliminaEquivalencias ((p &amp;lt;--&amp;gt; q) /\ (q &amp;lt;--&amp;gt; r))&lt;br /&gt;
--    ==&amp;gt; (((p --&amp;gt; q) /\ (q --&amp;gt; p)) /\ ((q --&amp;gt; r) /\ (r --&amp;gt; q)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
eliminaEquivalencias :: Prop -&amp;gt; Prop&lt;br /&gt;
eliminaEquivalencias (Equi h g) = Conj (Impl (eliminaEquivalencias h) (eliminaEquivalencias g))&lt;br /&gt;
                                  (Impl (eliminaEquivalencias g)&lt;br /&gt;
                                            (eliminaEquivalencias h)) &lt;br /&gt;
eliminaEquivalencias (Impl h g) = Impl (eliminaEquivalencias h)&lt;br /&gt;
                                       (eliminaEquivalencias g)&lt;br /&gt;
eliminaEquivalencias (Conj h g) = Conj (eliminaEquivalencias h)&lt;br /&gt;
                                       (eliminaEquivalencias g)&lt;br /&gt;
eliminaEquivalencias (Disj h g) = Disj (eliminaEquivalencias h)&lt;br /&gt;
                                       (eliminaEquivalencias g)&lt;br /&gt;
eliminaEquivalencias (Neg h) = Neg (eliminaEquivalencias h)&lt;br /&gt;
eliminaEquivalencias (Atom h) = Atom h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3: Definir la función&lt;br /&gt;
--    eliminaImplicaciones :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (eliminaImplicaciones f) es una fórmula equivalente a f sin&lt;br /&gt;
-- signos de implicación. Por ejemplo,&lt;br /&gt;
--    eliminaImplicaciones (p --&amp;gt; q)&lt;br /&gt;
--    ==&amp;gt; (no p \/ q)&lt;br /&gt;
--    eliminaImplicaciones (eliminaEquivalencias (p &amp;lt;--&amp;gt; q))&lt;br /&gt;
--    ==&amp;gt; ((no p \/ q) /\ (no q \/ p))&lt;br /&gt;
-- Nota: Se supone que f no tiene signos de equivalencia.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
eliminaImplicaciones :: Prop -&amp;gt; Prop&lt;br /&gt;
eliminaImplicaciones (Impl h g) = Disj (Neg (eliminaImplicaciones h)) (eliminaImplicaciones g)&lt;br /&gt;
eliminaImplicaciones (Conj h g) = Conj (eliminaImplicaciones h)&lt;br /&gt;
                                       (eliminaImplicaciones g)&lt;br /&gt;
eliminaImplicaciones (Disj h g) = Disj (eliminaImplicaciones h)&lt;br /&gt;
                                       (eliminaImplicaciones g)&lt;br /&gt;
eliminaImplicaciones (Neg h) = Neg (eliminaImplicaciones h)&lt;br /&gt;
eliminaImplicaciones (Atom h) = Atom h&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4: Definir la función&lt;br /&gt;
--    interiorizaNegación :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (interiorizaNegación f) es una fórmula equivalente a f donde&lt;br /&gt;
-- las negaciones se aplican sólo a fórmulas atómicas. Por ejemplo,&lt;br /&gt;
--    interiorizaNegación (no (no p))         ==&amp;gt;  p&lt;br /&gt;
--    interiorizaNegación (no (p /\ q))       ==&amp;gt;  (no p \/ no q)&lt;br /&gt;
--    interiorizaNegación (no (p \/ q))       ==&amp;gt;  (no p /\ no q)&lt;br /&gt;
--    interiorizaNegación (no (no (p \/ q)))  ==&amp;gt;  (p \/ q)&lt;br /&gt;
--    interiorizaNegación (no ((no p) \/ q))  ==&amp;gt;  (p /\ no q)&lt;br /&gt;
-- Nota: Se supone que f no tiene equivalencias ni implicaciones. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interiorizaNegación :: Prop -&amp;gt; Prop&lt;br /&gt;
interiorizaNegación = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5: Definir la función&lt;br /&gt;
--    formaNormalNegativa :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (formaNormalNegativa f) es una fórmula equivalente a f en&lt;br /&gt;
-- forma normal negativa. Por ejemplo,&lt;br /&gt;
--    formaNormalNegativa (p &amp;lt;--&amp;gt; q)&lt;br /&gt;
--    ==&amp;gt; ((no p \/ q) /\ (no q \/ p))&lt;br /&gt;
--    formaNormalNegativa ((p \/ (no q)) --&amp;gt; r)&lt;br /&gt;
--    ==&amp;gt; ((no p /\ q) \/ r)&lt;br /&gt;
--    formaNormalNegativa ((p /\ (q --&amp;gt; r)) --&amp;gt; s)&lt;br /&gt;
--    ==&amp;gt; ((no p \/ (q /\ no r)) \/ s)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
formaNormalNegativa :: Prop -&amp;gt; Prop&lt;br /&gt;
formaNormalNegativa f = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Literales                                                          --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6: Definir la función&lt;br /&gt;
--    literal :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (literal f) se verifica si la fórmula F es un literal. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    literal p               ==&amp;gt;  True&lt;br /&gt;
--    literal (no p)          ==&amp;gt;  True&lt;br /&gt;
--    literal (no (p --&amp;gt; q))  ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
literal :: Prop -&amp;gt; Bool&lt;br /&gt;
literal (Atom f) = True&lt;br /&gt;
literal (Neg (Atom f)) = True&lt;br /&gt;
literal _ = False&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7: Definir el tipo de dato Literal como sinónimo de&lt;br /&gt;
-- fórmula. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
type Literal = Prop&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8: Definir la función&lt;br /&gt;
--    complementario :: Literal -&amp;gt; Literal&lt;br /&gt;
-- tal que (complementario l) es el complementario de l. Por ejemplo,&lt;br /&gt;
--    complementario p       ==&amp;gt;  no p&lt;br /&gt;
--    complementario (no p)  ==&amp;gt;  p&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
complementario :: Literal -&amp;gt; Literal&lt;br /&gt;
complementario (Atom f ) = Neg (Atom f)&lt;br /&gt;
complementario (Neg (Atom f)) = (Atom f)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9: Definir la función&lt;br /&gt;
--    literalesFórmulaFNN :: Prop -&amp;gt; [Literal]&lt;br /&gt;
-- tal que (literalesFórmulaFNN f) es el conjunto de los literales de la&lt;br /&gt;
-- fórmula en forma normal negativa f.&lt;br /&gt;
--    literalesFórmulaFNN (p \/ ((no q) \/ r))  ==&amp;gt;  [p,no q,r]&lt;br /&gt;
--    literalesFórmulaFNN p                     ==&amp;gt;  [p]&lt;br /&gt;
--    literalesFórmulaFNN (no p)                ==&amp;gt;  [no p]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
literalesFormulaFNN :: Prop -&amp;gt; [Literal]&lt;br /&gt;
literalesFormulaFNN (Atom f) = [Atom f]&lt;br /&gt;
literalesFormulaFNN (Neg f) | literal (Neg f) = [(Neg f)]&lt;br /&gt;
                            | otherwise = literalesFormulaFNN f&lt;br /&gt;
literalesFormulaFNN (Disj f g) = nub (aux f g) &lt;br /&gt;
literalesFormulaFNN (Conj f g) = nub (aux f g)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
aux f g | literal f = [f] ++ literalesFormulaFNN g&lt;br /&gt;
        | literal g = [g] ++ literalesFormulaFNN f&lt;br /&gt;
        | literal f &amp;amp;&amp;amp; literal g = [f,g]&lt;br /&gt;
        | otherwise = literalesFormulaFNN f ++ literalesFormulaFNN g &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Transformación a forma normal conjuntiva                           --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10: Definir la función&lt;br /&gt;
--    interiorizaDisyunción :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (interiorizaDisyunción f) es una fórmula equivalente a f&lt;br /&gt;
-- donde las disyunciones sólo se aplica a disyunciones o literales. Por&lt;br /&gt;
-- ejemplo,  &lt;br /&gt;
--    interiorizaDisyunción (p \/ (q /\ r))  ==&amp;gt;  ((p \/ q) /\ (p \/ r))&lt;br /&gt;
--    interiorizaDisyunción ((p /\ q) \/ r)  ==&amp;gt;  ((p \/ r) /\ (q \/ r))&lt;br /&gt;
-- Nota: Se supone que f está en forma normal negativa.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interiorizaDisyunción :: Prop -&amp;gt; Prop&lt;br /&gt;
interiorizaDisyunción = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11: Definir la función&lt;br /&gt;
--    formaNormalConjuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (formaNormalConjuntiva f) es una fórmula equivalente a f en&lt;br /&gt;
-- forma normal conjuntiva. Por ejemplo,&lt;br /&gt;
--    formaNormalConjuntiva (p /\ (q --&amp;gt; r))&lt;br /&gt;
--    ==&amp;gt; (p /\ (no q \/ r))&lt;br /&gt;
--    formaNormalConjuntiva (no (p /\ (q --&amp;gt; r)))&lt;br /&gt;
--    ==&amp;gt; ((no p \/ q) /\ (no p \/ no r))&lt;br /&gt;
--    formaNormalConjuntiva (no(p &amp;lt;--&amp;gt; r))&lt;br /&gt;
--    ==&amp;gt; (((p \/ r) /\ (p \/ no p)) /\ ((no r \/ r) /\ (no r \/ no p)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
formaNormalConjuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
formaNormalConjuntiva f = interiorizaDisyuncion (interiorizaNegacion&lt;br /&gt;
                        (eliminaImplicaciones (eliminaEquivalencias f)))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Ejercicio 11.2: Definir la función&lt;br /&gt;
--    validaPorFNC:: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (validaPorFNC f) comprueba si f es válida. Por ejemplo,&lt;br /&gt;
--    validaPorFNC ((p --&amp;gt; q) \/ (q --&amp;gt; p))    == True&lt;br /&gt;
--    validaPorFNC ((p \/ q) /\ ((no q) \/ r)) == False&lt;br /&gt;
--    validaPorFNC (p --&amp;gt; p)                   == True&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
validaPorFNC:: Prop -&amp;gt; Bool&lt;br /&gt;
validaPorFNC f = valida (formaNormalConjuntiva f) f&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
valida (Disj f g) y = aux (conjunto y)&lt;br /&gt;
                       where aux [] = True&lt;br /&gt;
                             aux (x:xs) = elem (complementario x) xs&lt;br /&gt;
                                                         ||aux xs  &lt;br /&gt;
valida (Conj f g) y = (comprobacion y) &lt;br /&gt;
&lt;br /&gt;
conjunto x = literalesFormulaFNN1 (formaNormalConjuntiva x)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ordenaEnPares f = aux (conjunto f)&lt;br /&gt;
                where aux [] = []&lt;br /&gt;
                      aux xs = [take 2 xs] ++ aux (drop 2 xs)&lt;br /&gt;
&lt;br /&gt;
comprobacion f = or [elem (complementario (head x)) (drop 1 x) &lt;br /&gt;
                                         | x &amp;lt;- ordenaEnPares f]&lt;br /&gt;
&lt;br /&gt;
literalesFormulaFNN1 :: Prop -&amp;gt; [Literal]&lt;br /&gt;
literalesFormulaFNN1 (Atom f) = [Atom f]&lt;br /&gt;
literalesFormulaFNN1 (Neg f) | literal (Neg f) = [(Neg f)]&lt;br /&gt;
                            | otherwise = literalesFormulaFNN1 f&lt;br /&gt;
literalesFormulaFNN1 (Disj f g) =  (aux1 f g) &lt;br /&gt;
literalesFormulaFNN1 (Conj f g) =  (aux1 f g)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
aux1 f g | literal f = [f] ++ literalesFormulaFNN1 g&lt;br /&gt;
        | literal g = [g] ++ literalesFormulaFNN1 f&lt;br /&gt;
        | literal f &amp;amp;&amp;amp; literal g = [f,g]&lt;br /&gt;
        | otherwise = literalesFormulaFNN1 f ++ literalesFormulaFNN1 g&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Transformación a forma normal disyuntiva                           --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12: Definir la función&lt;br /&gt;
--    interiorizaConjunción :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (interiorizaConjunción f) es una fórmula equivalente a f&lt;br /&gt;
-- donde las conjunciones sólo se aplica a conjunciones o literales. Por&lt;br /&gt;
-- ejemplo,  &lt;br /&gt;
--    interiorizaConjunción (p /\ (q \/ r))  ==&amp;gt;  ((p /\ q) \/ (p /\ r))&lt;br /&gt;
--    interiorizaConjunción ((p \/ q) /\ r)  ==&amp;gt;  ((p /\ r) \/ (q /\ r))&lt;br /&gt;
-- Nota: Se supone que f está en forma normal negativa.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interiorizaConjunción :: Prop -&amp;gt; Prop&lt;br /&gt;
interiorizaConjunción = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13: Definir la función&lt;br /&gt;
--    formaNormalDisyuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (formaNormalDisyuntiva f) es una fórmula equivalente a f en&lt;br /&gt;
-- forma normal disyuntiva. Por ejemplo,&lt;br /&gt;
--    formaNormalDisyuntiva (p /\ (q --&amp;gt; r))&lt;br /&gt;
--    ==&amp;gt; ((p /\ no q) \/ (p /\ r))&lt;br /&gt;
--    formaNormalDisyuntiva (no (p /\ (q --&amp;gt; r)))&lt;br /&gt;
--    ==&amp;gt; (no p \/ (q /\ no r))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
formaNormalDisyuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
formaNormalDisyuntiva f = interiorizaConjuncion (formaNormalNegativa f)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14: Definir la función&lt;br /&gt;
--     satisfaciblePorFND:: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (satisfaciblePorFND f) comprueba si f es satisfacible. Por&lt;br /&gt;
-- ejemplo,&lt;br /&gt;
--     satisfaciblePorFND ((p \/ q) /\ ((no q) \/ r)) == True&lt;br /&gt;
--     satisfaciblePorFND (p /\ (no p))               == False&lt;br /&gt;
--     satisfaciblePorFND ((p --&amp;gt; q) \/ (q --&amp;gt; p))    == True&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
satisfaciblePorFND:: Prop -&amp;gt; Bool&lt;br /&gt;
satisfaciblePorFND f = undefined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_9&amp;diff=271</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_9&amp;diff=271"/>
		<updated>2015-04-22T12:17:48Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- FormasNormales.hs&lt;br /&gt;
-- Formas normales.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
module FormasNormales where&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Librería suxiliares                                                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
import SintaxisSemantica &lt;br /&gt;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Equivalencia lógica                                                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1: Definir la función&lt;br /&gt;
--    esEquivalente :: Prop -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esEquivalente f g) se verifica si f y g son&lt;br /&gt;
-- equivalentes. Por ejemplo,&lt;br /&gt;
--    esEquivalente (p &amp;lt;--&amp;gt; q) ((p --&amp;gt; q) /\ (q --&amp;gt; p))  ==&amp;gt;  True&lt;br /&gt;
--    esEquivalente (p --&amp;gt; q)  ((no p) \/ q)             ==&amp;gt;  True&lt;br /&gt;
--    esEquivalente (p /\ q)   (no ((no p) \/ (no q)))   ==&amp;gt;  True&lt;br /&gt;
--    esEquivalente (p \/ q)   (no ((no p) /\ (no q)))   ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
esEquivalente :: Prop -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esEquivalente f g = modelosFormula f == modelosFormula g&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Transformación a forma normal negativa                             --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2: Definir la función&lt;br /&gt;
--    eliminaEquivalencias :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (eliminaEquivalencias f) es una fórmula equivalente a f sin&lt;br /&gt;
-- signos de equivalencia. Por ejemplo,&lt;br /&gt;
--    eliminaEquivalencias (p &amp;lt;--&amp;gt; q)&lt;br /&gt;
--    ==&amp;gt; ((p --&amp;gt; q) /\ (q --&amp;gt; p))&lt;br /&gt;
--    eliminaEquivalencias ((p &amp;lt;--&amp;gt; q) /\ (q &amp;lt;--&amp;gt; r))&lt;br /&gt;
--    ==&amp;gt; (((p --&amp;gt; q) /\ (q --&amp;gt; p)) /\ ((q --&amp;gt; r) /\ (r --&amp;gt; q)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
eliminaEquivalencias :: Prop -&amp;gt; Prop&lt;br /&gt;
eliminaEquivalencias (Equi h g) = Conj (Impl h g) (Impl g h) &lt;br /&gt;
eliminaEquivalencias (Impl h g) = Impl (eliminaEquivalencias h)&lt;br /&gt;
                                       (eliminaEquivalencias g)&lt;br /&gt;
eliminaEquivalencias (Conj h g) = Conj (eliminaEquivalencias h)&lt;br /&gt;
                                       (eliminaEquivalencias g)&lt;br /&gt;
eliminaEquivalencias (Disj h g) = Disj (eliminaEquivalencias h)&lt;br /&gt;
                                       (eliminaEquivalencias g)&lt;br /&gt;
eliminaEquivalencias (Neg h) = Neg (eliminaEquivalencias h)&lt;br /&gt;
eliminaEquivalencias (Atom h) = Atom h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3: Definir la función&lt;br /&gt;
--    eliminaImplicaciones :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (eliminaImplicaciones f) es una fórmula equivalente a f sin&lt;br /&gt;
-- signos de implicación. Por ejemplo,&lt;br /&gt;
--    eliminaImplicaciones (p --&amp;gt; q)&lt;br /&gt;
--    ==&amp;gt; (no p \/ q)&lt;br /&gt;
--    eliminaImplicaciones (eliminaEquivalencias (p &amp;lt;--&amp;gt; q))&lt;br /&gt;
--    ==&amp;gt; ((no p \/ q) /\ (no q \/ p))&lt;br /&gt;
-- Nota: Se supone que f no tiene signos de equivalencia.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
eliminaImplicaciones :: Prop -&amp;gt; Prop&lt;br /&gt;
eliminaImplicaciones (Impl h g) = Disj (Neg h) g&lt;br /&gt;
eliminaImplicaciones (Conj h g) = Conj (eliminaImplicaciones h)&lt;br /&gt;
                                       (eliminaImplicaciones g)&lt;br /&gt;
eliminaImplicaciones (Disj h g) = Disj (eliminaImplicaciones h)&lt;br /&gt;
                                       (eliminaImplicaciones g)&lt;br /&gt;
eliminaImplicaciones (Neg h) = Neg (eliminaImplicaciones h)&lt;br /&gt;
eliminaImplicaciones (Atom h) = Atom h&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4: Definir la función&lt;br /&gt;
--    interiorizaNegación :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (interiorizaNegación f) es una fórmula equivalente a f donde&lt;br /&gt;
-- las negaciones se aplican sólo a fórmulas atómicas. Por ejemplo,&lt;br /&gt;
--    interiorizaNegación (no (no p))         ==&amp;gt;  p&lt;br /&gt;
--    interiorizaNegación (no (p /\ q))       ==&amp;gt;  (no p \/ no q)&lt;br /&gt;
--    interiorizaNegación (no (p \/ q))       ==&amp;gt;  (no p /\ no q)&lt;br /&gt;
--    interiorizaNegación (no (no (p \/ q)))  ==&amp;gt;  (p \/ q)&lt;br /&gt;
--    interiorizaNegación (no ((no p) \/ q))  ==&amp;gt;  (p /\ no q)&lt;br /&gt;
-- Nota: Se supone que f no tiene equivalencias ni implicaciones. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interiorizaNegación :: Prop -&amp;gt; Prop&lt;br /&gt;
interiorizaNegación = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5: Definir la función&lt;br /&gt;
--    formaNormalNegativa :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (formaNormalNegativa f) es una fórmula equivalente a f en&lt;br /&gt;
-- forma normal negativa. Por ejemplo,&lt;br /&gt;
--    formaNormalNegativa (p &amp;lt;--&amp;gt; q)&lt;br /&gt;
--    ==&amp;gt; ((no p \/ q) /\ (no q \/ p))&lt;br /&gt;
--    formaNormalNegativa ((p \/ (no q)) --&amp;gt; r)&lt;br /&gt;
--    ==&amp;gt; ((no p /\ q) \/ r)&lt;br /&gt;
--    formaNormalNegativa ((p /\ (q --&amp;gt; r)) --&amp;gt; s)&lt;br /&gt;
--    ==&amp;gt; ((no p \/ (q /\ no r)) \/ s)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
formaNormalNegativa :: Prop -&amp;gt; Prop&lt;br /&gt;
formaNormalNegativa f = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Literales                                                          --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6: Definir la función&lt;br /&gt;
--    literal :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (literal f) se verifica si la fórmula F es un literal. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    literal p               ==&amp;gt;  True&lt;br /&gt;
--    literal (no p)          ==&amp;gt;  True&lt;br /&gt;
--    literal (no (p --&amp;gt; q))  ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
literal :: Prop -&amp;gt; Bool&lt;br /&gt;
literal (Atom f) = True&lt;br /&gt;
literal (Neg (Atom f)) = True&lt;br /&gt;
literal _ = False&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7: Definir el tipo de dato Literal como sinónimo de&lt;br /&gt;
-- fórmula. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
type Literal = Prop&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8: Definir la función&lt;br /&gt;
--    complementario :: Literal -&amp;gt; Literal&lt;br /&gt;
-- tal que (complementario l) es el complementario de l. Por ejemplo,&lt;br /&gt;
--    complementario p       ==&amp;gt;  no p&lt;br /&gt;
--    complementario (no p)  ==&amp;gt;  p&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
complementario :: Literal -&amp;gt; Literal&lt;br /&gt;
complementario (Atom f ) = Neg (Atom f)&lt;br /&gt;
complementario (Neg (Atom f)) = (Atom f)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9: Definir la función&lt;br /&gt;
--    literalesFórmulaFNN :: Prop -&amp;gt; [Literal]&lt;br /&gt;
-- tal que (literalesFórmulaFNN f) es el conjunto de los literales de la&lt;br /&gt;
-- fórmula en forma normal negativa f.&lt;br /&gt;
--    literalesFórmulaFNN (p \/ ((no q) \/ r))  ==&amp;gt;  [p,no q,r]&lt;br /&gt;
--    literalesFórmulaFNN p                     ==&amp;gt;  [p]&lt;br /&gt;
--    literalesFórmulaFNN (no p)                ==&amp;gt;  [no p]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
literalesFormulaFNN :: Prop -&amp;gt; [Literal]&lt;br /&gt;
literalesFormulaFNN (Atom f) = [Atom f]&lt;br /&gt;
literalesFormulaFNN (Neg f) | literal (Neg f) = [(Neg f)]&lt;br /&gt;
                            | otherwise = literalesFormulaFNN f&lt;br /&gt;
literalesFormulaFNN (Disj f g) = nub (aux f g) &lt;br /&gt;
literalesFormulaFNN (Conj f g) = nub (aux f g)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
aux f g | literal f = [f] ++ literalesFormulaFNN g&lt;br /&gt;
        | literal g = [g] ++ literalesFormulaFNN f&lt;br /&gt;
        | literal f &amp;amp;&amp;amp; literal g = [f,g]&lt;br /&gt;
        | otherwise = literalesFormulaFNN f ++ literalesFormulaFNN g &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Transformación a forma normal conjuntiva                           --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10: Definir la función&lt;br /&gt;
--    interiorizaDisyunción :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (interiorizaDisyunción f) es una fórmula equivalente a f&lt;br /&gt;
-- donde las disyunciones sólo se aplica a disyunciones o literales. Por&lt;br /&gt;
-- ejemplo,  &lt;br /&gt;
--    interiorizaDisyunción (p \/ (q /\ r))  ==&amp;gt;  ((p \/ q) /\ (p \/ r))&lt;br /&gt;
--    interiorizaDisyunción ((p /\ q) \/ r)  ==&amp;gt;  ((p \/ r) /\ (q \/ r))&lt;br /&gt;
-- Nota: Se supone que f está en forma normal negativa.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interiorizaDisyunción :: Prop -&amp;gt; Prop&lt;br /&gt;
interiorizaDisyunción = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11: Definir la función&lt;br /&gt;
--    formaNormalConjuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (formaNormalConjuntiva f) es una fórmula equivalente a f en&lt;br /&gt;
-- forma normal conjuntiva. Por ejemplo,&lt;br /&gt;
--    formaNormalConjuntiva (p /\ (q --&amp;gt; r))&lt;br /&gt;
--    ==&amp;gt; (p /\ (no q \/ r))&lt;br /&gt;
--    formaNormalConjuntiva (no (p /\ (q --&amp;gt; r)))&lt;br /&gt;
--    ==&amp;gt; ((no p \/ q) /\ (no p \/ no r))&lt;br /&gt;
--    formaNormalConjuntiva (no(p &amp;lt;--&amp;gt; r))&lt;br /&gt;
--    ==&amp;gt; (((p \/ r) /\ (p \/ no p)) /\ ((no r \/ r) /\ (no r \/ no p)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
formaNormalConjuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
formaNormalConjuntiva f = interiorizaDisyuncion (interiorizaNegacion&lt;br /&gt;
                        (eliminaImplicaciones (eliminaEquivalencias f)))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Ejercicio 11.2: Definir la función&lt;br /&gt;
--    validaPorFNC:: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (validaPorFNC f) comprueba si f es válida. Por ejemplo,&lt;br /&gt;
--    validaPorFNC ((p --&amp;gt; q) \/ (q --&amp;gt; p))    == True&lt;br /&gt;
--    validaPorFNC ((p \/ q) /\ ((no q) \/ r)) == False&lt;br /&gt;
--    validaPorFNC (p --&amp;gt; p)                   == True&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
validaPorFNC:: Prop -&amp;gt; Bool&lt;br /&gt;
validaPorFNC f = valida (formaNormalConjuntiva f) f&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
valida (Disj f g) y = aux (conjunto y)&lt;br /&gt;
                       where aux [] = True&lt;br /&gt;
                             aux (x:xs) = elem (complementario x) xs&lt;br /&gt;
                                                         ||aux xs  &lt;br /&gt;
valida (Conj f g) y = (comprobacion y) &lt;br /&gt;
&lt;br /&gt;
conjunto x = literalesFormulaFNN1 (formaNormalConjuntiva x)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ordenaEnPares f = aux (conjunto f)&lt;br /&gt;
                where aux [] = []&lt;br /&gt;
                      aux xs = [take 2 xs] ++ aux (drop 2 xs)&lt;br /&gt;
&lt;br /&gt;
comprobacion f = or [elem (complementario (head x)) (drop 1 x) &lt;br /&gt;
                                         | x &amp;lt;- ordenaEnPares f]&lt;br /&gt;
&lt;br /&gt;
literalesFormulaFNN1 :: Prop -&amp;gt; [Literal]&lt;br /&gt;
literalesFormulaFNN1 (Atom f) = [Atom f]&lt;br /&gt;
literalesFormulaFNN1 (Neg f) | literal (Neg f) = [(Neg f)]&lt;br /&gt;
                            | otherwise = literalesFormulaFNN1 f&lt;br /&gt;
literalesFormulaFNN1 (Disj f g) =  (aux1 f g) &lt;br /&gt;
literalesFormulaFNN1 (Conj f g) =  (aux1 f g)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
aux1 f g | literal f = [f] ++ literalesFormulaFNN1 g&lt;br /&gt;
        | literal g = [g] ++ literalesFormulaFNN1 f&lt;br /&gt;
        | literal f &amp;amp;&amp;amp; literal g = [f,g]&lt;br /&gt;
        | otherwise = literalesFormulaFNN1 f ++ literalesFormulaFNN1 g&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Transformación a forma normal disyuntiva                           --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12: Definir la función&lt;br /&gt;
--    interiorizaConjunción :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (interiorizaConjunción f) es una fórmula equivalente a f&lt;br /&gt;
-- donde las conjunciones sólo se aplica a conjunciones o literales. Por&lt;br /&gt;
-- ejemplo,  &lt;br /&gt;
--    interiorizaConjunción (p /\ (q \/ r))  ==&amp;gt;  ((p /\ q) \/ (p /\ r))&lt;br /&gt;
--    interiorizaConjunción ((p \/ q) /\ r)  ==&amp;gt;  ((p /\ r) \/ (q /\ r))&lt;br /&gt;
-- Nota: Se supone que f está en forma normal negativa.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interiorizaConjunción :: Prop -&amp;gt; Prop&lt;br /&gt;
interiorizaConjunción = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13: Definir la función&lt;br /&gt;
--    formaNormalDisyuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (formaNormalDisyuntiva f) es una fórmula equivalente a f en&lt;br /&gt;
-- forma normal disyuntiva. Por ejemplo,&lt;br /&gt;
--    formaNormalDisyuntiva (p /\ (q --&amp;gt; r))&lt;br /&gt;
--    ==&amp;gt; ((p /\ no q) \/ (p /\ r))&lt;br /&gt;
--    formaNormalDisyuntiva (no (p /\ (q --&amp;gt; r)))&lt;br /&gt;
--    ==&amp;gt; (no p \/ (q /\ no r))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
formaNormalDisyuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
formaNormalDisyuntiva f = interiorizaConjuncion (formaNormalNegativa f)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14: Definir la función&lt;br /&gt;
--     satisfaciblePorFND:: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (satisfaciblePorFND f) comprueba si f es satisfacible. Por&lt;br /&gt;
-- ejemplo,&lt;br /&gt;
--     satisfaciblePorFND ((p \/ q) /\ ((no q) \/ r)) == True&lt;br /&gt;
--     satisfaciblePorFND (p /\ (no p))               == False&lt;br /&gt;
--     satisfaciblePorFND ((p --&amp;gt; q) \/ (q --&amp;gt; p))    == True&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
satisfaciblePorFND:: Prop -&amp;gt; Bool&lt;br /&gt;
satisfaciblePorFND f = undefined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_9&amp;diff=270</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_9&amp;diff=270"/>
		<updated>2015-04-22T12:08:15Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- FormasNormales.hs&lt;br /&gt;
-- Formas normales.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
module FormasNormales where&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Librería suxiliares                                                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
import SintaxisSemantica &lt;br /&gt;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Equivalencia lógica                                                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1: Definir la función&lt;br /&gt;
--    esEquivalente :: Prop -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esEquivalente f g) se verifica si f y g son&lt;br /&gt;
-- equivalentes. Por ejemplo,&lt;br /&gt;
--    esEquivalente (p &amp;lt;--&amp;gt; q) ((p --&amp;gt; q) /\ (q --&amp;gt; p))  ==&amp;gt;  True&lt;br /&gt;
--    esEquivalente (p --&amp;gt; q)  ((no p) \/ q)             ==&amp;gt;  True&lt;br /&gt;
--    esEquivalente (p /\ q)   (no ((no p) \/ (no q)))   ==&amp;gt;  True&lt;br /&gt;
--    esEquivalente (p \/ q)   (no ((no p) /\ (no q)))   ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
esEquivalente :: Prop -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esEquivalente f g = modelosFormula f == modelosFormula g&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Transformación a forma normal negativa                             --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2: Definir la función&lt;br /&gt;
--    eliminaEquivalencias :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (eliminaEquivalencias f) es una fórmula equivalente a f sin&lt;br /&gt;
-- signos de equivalencia. Por ejemplo,&lt;br /&gt;
--    eliminaEquivalencias (p &amp;lt;--&amp;gt; q)&lt;br /&gt;
--    ==&amp;gt; ((p --&amp;gt; q) /\ (q --&amp;gt; p))&lt;br /&gt;
--    eliminaEquivalencias ((p &amp;lt;--&amp;gt; q) /\ (q &amp;lt;--&amp;gt; r))&lt;br /&gt;
--    ==&amp;gt; (((p --&amp;gt; q) /\ (q --&amp;gt; p)) /\ ((q --&amp;gt; r) /\ (r --&amp;gt; q)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
eliminaEquivalencias :: Prop -&amp;gt; Prop&lt;br /&gt;
eliminaEquivalencias (Equi h g) = Conj (Impl h g) (Impl g h) &lt;br /&gt;
eliminaEquivalencias (Impl h g) = Impl (eliminaEquivalencias h)&lt;br /&gt;
                                       (eliminaEquivalencias g)&lt;br /&gt;
eliminaEquivalencias (Conj h g) = Conj (eliminaEquivalencias h)&lt;br /&gt;
                                       (eliminaEquivalencias g)&lt;br /&gt;
eliminaEquivalencias (Disj h g) = Disj (eliminaEquivalencias h)&lt;br /&gt;
                                       (eliminaEquivalencias g)&lt;br /&gt;
eliminaEquivalencias (Neg h) = Neg (eliminaEquivalencias h)&lt;br /&gt;
eliminaEquivalencias (Atom h) = Atom h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3: Definir la función&lt;br /&gt;
--    eliminaImplicaciones :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (eliminaImplicaciones f) es una fórmula equivalente a f sin&lt;br /&gt;
-- signos de implicación. Por ejemplo,&lt;br /&gt;
--    eliminaImplicaciones (p --&amp;gt; q)&lt;br /&gt;
--    ==&amp;gt; (no p \/ q)&lt;br /&gt;
--    eliminaImplicaciones (eliminaEquivalencias (p &amp;lt;--&amp;gt; q))&lt;br /&gt;
--    ==&amp;gt; ((no p \/ q) /\ (no q \/ p))&lt;br /&gt;
-- Nota: Se supone que f no tiene signos de equivalencia.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
eliminaImplicaciones :: Prop -&amp;gt; Prop&lt;br /&gt;
eliminaImplicaciones (Impl h g) = Disj (Neg h) g&lt;br /&gt;
eliminaImplicaciones (Conj h g) = Conj (eliminaImplicaciones h)&lt;br /&gt;
                                       (eliminaImplicaciones g)&lt;br /&gt;
eliminaImplicaciones (Disj h g) = Disj (eliminaImplicaciones h)&lt;br /&gt;
                                       (eliminaImplicaciones g)&lt;br /&gt;
eliminaImplicaciones (Neg h) = Neg (eliminaImplicaciones h)&lt;br /&gt;
eliminaImplicaciones (Atom h) = Atom h&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4: Definir la función&lt;br /&gt;
--    interiorizaNegación :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (interiorizaNegación f) es una fórmula equivalente a f donde&lt;br /&gt;
-- las negaciones se aplican sólo a fórmulas atómicas. Por ejemplo,&lt;br /&gt;
--    interiorizaNegación (no (no p))         ==&amp;gt;  p&lt;br /&gt;
--    interiorizaNegación (no (p /\ q))       ==&amp;gt;  (no p \/ no q)&lt;br /&gt;
--    interiorizaNegación (no (p \/ q))       ==&amp;gt;  (no p /\ no q)&lt;br /&gt;
--    interiorizaNegación (no (no (p \/ q)))  ==&amp;gt;  (p \/ q)&lt;br /&gt;
--    interiorizaNegación (no ((no p) \/ q))  ==&amp;gt;  (p /\ no q)&lt;br /&gt;
-- Nota: Se supone que f no tiene equivalencias ni implicaciones. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interiorizaNegación :: Prop -&amp;gt; Prop&lt;br /&gt;
interiorizaNegación = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5: Definir la función&lt;br /&gt;
--    formaNormalNegativa :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (formaNormalNegativa f) es una fórmula equivalente a f en&lt;br /&gt;
-- forma normal negativa. Por ejemplo,&lt;br /&gt;
--    formaNormalNegativa (p &amp;lt;--&amp;gt; q)&lt;br /&gt;
--    ==&amp;gt; ((no p \/ q) /\ (no q \/ p))&lt;br /&gt;
--    formaNormalNegativa ((p \/ (no q)) --&amp;gt; r)&lt;br /&gt;
--    ==&amp;gt; ((no p /\ q) \/ r)&lt;br /&gt;
--    formaNormalNegativa ((p /\ (q --&amp;gt; r)) --&amp;gt; s)&lt;br /&gt;
--    ==&amp;gt; ((no p \/ (q /\ no r)) \/ s)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
formaNormalNegativa :: Prop -&amp;gt; Prop&lt;br /&gt;
formaNormalNegativa f = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Literales                                                          --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6: Definir la función&lt;br /&gt;
--    literal :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (literal f) se verifica si la fórmula F es un literal. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    literal p               ==&amp;gt;  True&lt;br /&gt;
--    literal (no p)          ==&amp;gt;  True&lt;br /&gt;
--    literal (no (p --&amp;gt; q))  ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
literal :: Prop -&amp;gt; Bool&lt;br /&gt;
literal (Atom f) = True&lt;br /&gt;
literal (Neg (Atom f)) = True&lt;br /&gt;
literal _ = False&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7: Definir el tipo de dato Literal como sinónimo de&lt;br /&gt;
-- fórmula. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
type Literal = Prop&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8: Definir la función&lt;br /&gt;
--    complementario :: Literal -&amp;gt; Literal&lt;br /&gt;
-- tal que (complementario l) es el complementario de l. Por ejemplo,&lt;br /&gt;
--    complementario p       ==&amp;gt;  no p&lt;br /&gt;
--    complementario (no p)  ==&amp;gt;  p&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
complementario :: Literal -&amp;gt; Literal&lt;br /&gt;
complementario (Atom f ) = Neg (Atom f)&lt;br /&gt;
complementario (Neg (Atom f)) = (Atom f)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9: Definir la función&lt;br /&gt;
--    literalesFórmulaFNN :: Prop -&amp;gt; [Literal]&lt;br /&gt;
-- tal que (literalesFórmulaFNN f) es el conjunto de los literales de la&lt;br /&gt;
-- fórmula en forma normal negativa f.&lt;br /&gt;
--    literalesFórmulaFNN (p \/ ((no q) \/ r))  ==&amp;gt;  [p,no q,r]&lt;br /&gt;
--    literalesFórmulaFNN p                     ==&amp;gt;  [p]&lt;br /&gt;
--    literalesFórmulaFNN (no p)                ==&amp;gt;  [no p]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
literalesFormulaFNN :: Prop -&amp;gt; [Literal]&lt;br /&gt;
literalesFormulaFNN (Atom f) = [Atom f]&lt;br /&gt;
literalesFormulaFNN (Neg f) | literal (Neg f) = [(Neg f)]&lt;br /&gt;
                            | otherwise = literalesFormulaFNN f&lt;br /&gt;
literalesFormulaFNN (Disj f g) = nub (aux f g) &lt;br /&gt;
literalesFormulaFNN (Conj f g) = nub (aux f g)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
aux f g | literal f = [f] ++ literalesFormulaFNN g&lt;br /&gt;
        | literal g = [g] ++ literalesFormulaFNN f&lt;br /&gt;
        | literal f &amp;amp;&amp;amp; literal g = [f,g]&lt;br /&gt;
        | otherwise = literalesFormulaFNN f ++ literalesFormulaFNN g &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Transformación a forma normal conjuntiva                           --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10: Definir la función&lt;br /&gt;
--    interiorizaDisyunción :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (interiorizaDisyunción f) es una fórmula equivalente a f&lt;br /&gt;
-- donde las disyunciones sólo se aplica a disyunciones o literales. Por&lt;br /&gt;
-- ejemplo,  &lt;br /&gt;
--    interiorizaDisyunción (p \/ (q /\ r))  ==&amp;gt;  ((p \/ q) /\ (p \/ r))&lt;br /&gt;
--    interiorizaDisyunción ((p /\ q) \/ r)  ==&amp;gt;  ((p \/ r) /\ (q \/ r))&lt;br /&gt;
-- Nota: Se supone que f está en forma normal negativa.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interiorizaDisyunción :: Prop -&amp;gt; Prop&lt;br /&gt;
interiorizaDisyunción = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11: Definir la función&lt;br /&gt;
--    formaNormalConjuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (formaNormalConjuntiva f) es una fórmula equivalente a f en&lt;br /&gt;
-- forma normal conjuntiva. Por ejemplo,&lt;br /&gt;
--    formaNormalConjuntiva (p /\ (q --&amp;gt; r))&lt;br /&gt;
--    ==&amp;gt; (p /\ (no q \/ r))&lt;br /&gt;
--    formaNormalConjuntiva (no (p /\ (q --&amp;gt; r)))&lt;br /&gt;
--    ==&amp;gt; ((no p \/ q) /\ (no p \/ no r))&lt;br /&gt;
--    formaNormalConjuntiva (no(p &amp;lt;--&amp;gt; r))&lt;br /&gt;
--    ==&amp;gt; (((p \/ r) /\ (p \/ no p)) /\ ((no r \/ r) /\ (no r \/ no p)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
formaNormalConjuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
formaNormalConjuntiva f = interiorizaDisyuncion (interiorizaNegacion&lt;br /&gt;
                        (eliminaImplicaciones (eliminaEquivalencias f)))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Ejercicio 11.2: Definir la función&lt;br /&gt;
--    validaPorFNC:: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (validaPorFNC f) comprueba si f es válida. Por ejemplo,&lt;br /&gt;
--    validaPorFNC ((p --&amp;gt; q) \/ (q --&amp;gt; p))    == True&lt;br /&gt;
--    validaPorFNC ((p \/ q) /\ ((no q) \/ r)) == False&lt;br /&gt;
--    validaPorFNC (p --&amp;gt; p)                   == True&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
validaPorFNC:: Prop -&amp;gt; Bool&lt;br /&gt;
validaPorFNC f = valida (formaNormalConjuntiva f) f&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
valida (Disj f g) y = aux (conjunto y)&lt;br /&gt;
                       where aux [] = True&lt;br /&gt;
                             aux (x:xs) = elem (complementario x) xs&lt;br /&gt;
                                                         ||aux xs  &lt;br /&gt;
valida (Conj f g) y = (comprobacion y) &lt;br /&gt;
&lt;br /&gt;
conjunto x = literalesFormulaFNN1 (formaNormalConjuntiva x)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ordenaEnPares f = aux (conjunto f)&lt;br /&gt;
                where aux [] = []&lt;br /&gt;
                      aux xs = [take 2 xs] ++ aux (drop 2 xs)&lt;br /&gt;
&lt;br /&gt;
comprobacion f = or [elem (complementario (head x)) (drop 1 x) &lt;br /&gt;
                                         | x &amp;lt;- ordenaEnPares f]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Transformación a forma normal disyuntiva                           --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12: Definir la función&lt;br /&gt;
--    interiorizaConjunción :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (interiorizaConjunción f) es una fórmula equivalente a f&lt;br /&gt;
-- donde las conjunciones sólo se aplica a conjunciones o literales. Por&lt;br /&gt;
-- ejemplo,  &lt;br /&gt;
--    interiorizaConjunción (p /\ (q \/ r))  ==&amp;gt;  ((p /\ q) \/ (p /\ r))&lt;br /&gt;
--    interiorizaConjunción ((p \/ q) /\ r)  ==&amp;gt;  ((p /\ r) \/ (q /\ r))&lt;br /&gt;
-- Nota: Se supone que f está en forma normal negativa.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interiorizaConjunción :: Prop -&amp;gt; Prop&lt;br /&gt;
interiorizaConjunción = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13: Definir la función&lt;br /&gt;
--    formaNormalDisyuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (formaNormalDisyuntiva f) es una fórmula equivalente a f en&lt;br /&gt;
-- forma normal disyuntiva. Por ejemplo,&lt;br /&gt;
--    formaNormalDisyuntiva (p /\ (q --&amp;gt; r))&lt;br /&gt;
--    ==&amp;gt; ((p /\ no q) \/ (p /\ r))&lt;br /&gt;
--    formaNormalDisyuntiva (no (p /\ (q --&amp;gt; r)))&lt;br /&gt;
--    ==&amp;gt; (no p \/ (q /\ no r))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
formaNormalDisyuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
formaNormalDisyuntiva f = interiorizaConjuncion (formaNormalNegativa f)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14: Definir la función&lt;br /&gt;
--     satisfaciblePorFND:: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (satisfaciblePorFND f) comprueba si f es satisfacible. Por&lt;br /&gt;
-- ejemplo,&lt;br /&gt;
--     satisfaciblePorFND ((p \/ q) /\ ((no q) \/ r)) == True&lt;br /&gt;
--     satisfaciblePorFND (p /\ (no p))               == False&lt;br /&gt;
--     satisfaciblePorFND ((p --&amp;gt; q) \/ (q --&amp;gt; p))    == True&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
satisfaciblePorFND:: Prop -&amp;gt; Bool&lt;br /&gt;
satisfaciblePorFND f = undefined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_9&amp;diff=269</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_9&amp;diff=269"/>
		<updated>2015-04-20T17:31:47Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- FormasNormales.hs&lt;br /&gt;
-- Formas normales.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
module FormasNormales where&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Librería suxiliares                                                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
import SintaxisSemantica &lt;br /&gt;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Equivalencia lógica                                                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1: Definir la función&lt;br /&gt;
--    esEquivalente :: Prop -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esEquivalente f g) se verifica si f y g son&lt;br /&gt;
-- equivalentes. Por ejemplo,&lt;br /&gt;
--    esEquivalente (p &amp;lt;--&amp;gt; q) ((p --&amp;gt; q) /\ (q --&amp;gt; p))  ==&amp;gt;  True&lt;br /&gt;
--    esEquivalente (p --&amp;gt; q)  ((no p) \/ q)             ==&amp;gt;  True&lt;br /&gt;
--    esEquivalente (p /\ q)   (no ((no p) \/ (no q)))   ==&amp;gt;  True&lt;br /&gt;
--    esEquivalente (p \/ q)   (no ((no p) /\ (no q)))   ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
esEquivalente :: Prop -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esEquivalente f g = modelosFormula f == modelosFormula g&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Transformación a forma normal negativa                             --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2: Definir la función&lt;br /&gt;
--    eliminaEquivalencias :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (eliminaEquivalencias f) es una fórmula equivalente a f sin&lt;br /&gt;
-- signos de equivalencia. Por ejemplo,&lt;br /&gt;
--    eliminaEquivalencias (p &amp;lt;--&amp;gt; q)&lt;br /&gt;
--    ==&amp;gt; ((p --&amp;gt; q) /\ (q --&amp;gt; p))&lt;br /&gt;
--    eliminaEquivalencias ((p &amp;lt;--&amp;gt; q) /\ (q &amp;lt;--&amp;gt; r))&lt;br /&gt;
--    ==&amp;gt; (((p --&amp;gt; q) /\ (q --&amp;gt; p)) /\ ((q --&amp;gt; r) /\ (r --&amp;gt; q)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
eliminaEquivalencias :: Prop -&amp;gt; Prop&lt;br /&gt;
eliminaEquivalencias (Equi h g) = Conj (Impl h g) (Impl g h) &lt;br /&gt;
eliminaEquivalencias (Impl h g) = Impl (eliminaEquivalencias h)&lt;br /&gt;
                                       (eliminaEquivalencias g)&lt;br /&gt;
eliminaEquivalencias (Conj h g) = Conj (eliminaEquivalencias h)&lt;br /&gt;
                                       (eliminaEquivalencias g)&lt;br /&gt;
eliminaEquivalencias (Disj h g) = Disj (eliminaEquivalencias h)&lt;br /&gt;
                                       (eliminaEquivalencias g)&lt;br /&gt;
eliminaEquivalencias (Neg h) = Neg (eliminaEquivalencias h)&lt;br /&gt;
eliminaEquivalencias (Atom h) = Atom h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3: Definir la función&lt;br /&gt;
--    eliminaImplicaciones :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (eliminaImplicaciones f) es una fórmula equivalente a f sin&lt;br /&gt;
-- signos de implicación. Por ejemplo,&lt;br /&gt;
--    eliminaImplicaciones (p --&amp;gt; q)&lt;br /&gt;
--    ==&amp;gt; (no p \/ q)&lt;br /&gt;
--    eliminaImplicaciones (eliminaEquivalencias (p &amp;lt;--&amp;gt; q))&lt;br /&gt;
--    ==&amp;gt; ((no p \/ q) /\ (no q \/ p))&lt;br /&gt;
-- Nota: Se supone que f no tiene signos de equivalencia.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
eliminaImplicaciones :: Prop -&amp;gt; Prop&lt;br /&gt;
eliminaImplicaciones (Impl h g) = Disj (Neg h) g&lt;br /&gt;
eliminaImplicaciones (Conj h g) = Conj (eliminaImplicaciones h)&lt;br /&gt;
                                       (eliminaImplicaciones g)&lt;br /&gt;
eliminaImplicaciones (Disj h g) = Disj (eliminaImplicaciones h)&lt;br /&gt;
                                       (eliminaImplicaciones g)&lt;br /&gt;
eliminaImplicaciones (Neg h) = Neg (eliminaImplicaciones h)&lt;br /&gt;
eliminaImplicaciones (Atom h) = Atom h&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4: Definir la función&lt;br /&gt;
--    interiorizaNegación :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (interiorizaNegación f) es una fórmula equivalente a f donde&lt;br /&gt;
-- las negaciones se aplican sólo a fórmulas atómicas. Por ejemplo,&lt;br /&gt;
--    interiorizaNegación (no (no p))         ==&amp;gt;  p&lt;br /&gt;
--    interiorizaNegación (no (p /\ q))       ==&amp;gt;  (no p \/ no q)&lt;br /&gt;
--    interiorizaNegación (no (p \/ q))       ==&amp;gt;  (no p /\ no q)&lt;br /&gt;
--    interiorizaNegación (no (no (p \/ q)))  ==&amp;gt;  (p \/ q)&lt;br /&gt;
--    interiorizaNegación (no ((no p) \/ q))  ==&amp;gt;  (p /\ no q)&lt;br /&gt;
-- Nota: Se supone que f no tiene equivalencias ni implicaciones. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interiorizaNegación :: Prop -&amp;gt; Prop&lt;br /&gt;
interiorizaNegación = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5: Definir la función&lt;br /&gt;
--    formaNormalNegativa :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (formaNormalNegativa f) es una fórmula equivalente a f en&lt;br /&gt;
-- forma normal negativa. Por ejemplo,&lt;br /&gt;
--    formaNormalNegativa (p &amp;lt;--&amp;gt; q)&lt;br /&gt;
--    ==&amp;gt; ((no p \/ q) /\ (no q \/ p))&lt;br /&gt;
--    formaNormalNegativa ((p \/ (no q)) --&amp;gt; r)&lt;br /&gt;
--    ==&amp;gt; ((no p /\ q) \/ r)&lt;br /&gt;
--    formaNormalNegativa ((p /\ (q --&amp;gt; r)) --&amp;gt; s)&lt;br /&gt;
--    ==&amp;gt; ((no p \/ (q /\ no r)) \/ s)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
formaNormalNegativa :: Prop -&amp;gt; Prop&lt;br /&gt;
formaNormalNegativa f = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Literales                                                          --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6: Definir la función&lt;br /&gt;
--    literal :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (literal f) se verifica si la fórmula F es un literal. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    literal p               ==&amp;gt;  True&lt;br /&gt;
--    literal (no p)          ==&amp;gt;  True&lt;br /&gt;
--    literal (no (p --&amp;gt; q))  ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
literal :: Prop -&amp;gt; Bool&lt;br /&gt;
literal (Atom f) = True&lt;br /&gt;
literal (Neg (Atom f)) = True&lt;br /&gt;
literal _ = False&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7: Definir el tipo de dato Literal como sinónimo de&lt;br /&gt;
-- fórmula. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
type Literal = Prop&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8: Definir la función&lt;br /&gt;
--    complementario :: Literal -&amp;gt; Literal&lt;br /&gt;
-- tal que (complementario l) es el complementario de l. Por ejemplo,&lt;br /&gt;
--    complementario p       ==&amp;gt;  no p&lt;br /&gt;
--    complementario (no p)  ==&amp;gt;  p&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
complementario :: Literal -&amp;gt; Literal&lt;br /&gt;
complementario (Atom f ) = Neg (Atom f)&lt;br /&gt;
complementario (Neg (Atom f)) = (Atom f)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9: Definir la función&lt;br /&gt;
--    literalesFórmulaFNN :: Prop -&amp;gt; [Literal]&lt;br /&gt;
-- tal que (literalesFórmulaFNN f) es el conjunto de los literales de la&lt;br /&gt;
-- fórmula en forma normal negativa f.&lt;br /&gt;
--    literalesFórmulaFNN (p \/ ((no q) \/ r))  ==&amp;gt;  [p,no q,r]&lt;br /&gt;
--    literalesFórmulaFNN p                     ==&amp;gt;  [p]&lt;br /&gt;
--    literalesFórmulaFNN (no p)                ==&amp;gt;  [no p]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
literalesFórmulaFNN :: Prop -&amp;gt; [Literal]&lt;br /&gt;
literalesFormulaFNN (Disj f g) =&lt;br /&gt;
         (literalesFormulaFNN f) `union` (literalesFormulaFNN g)&lt;br /&gt;
literalesFormulaFNN (Conj f g) =&lt;br /&gt;
         (literalesFormulaFNN f) `union` (literalesFormulaFNN g)&lt;br /&gt;
literalesFormulaFNN f = [f]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Transformación a forma normal conjuntiva                           --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10: Definir la función&lt;br /&gt;
--    interiorizaDisyunción :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (interiorizaDisyunción f) es una fórmula equivalente a f&lt;br /&gt;
-- donde las disyunciones sólo se aplica a disyunciones o literales. Por&lt;br /&gt;
-- ejemplo,  &lt;br /&gt;
--    interiorizaDisyunción (p \/ (q /\ r))  ==&amp;gt;  ((p \/ q) /\ (p \/ r))&lt;br /&gt;
--    interiorizaDisyunción ((p /\ q) \/ r)  ==&amp;gt;  ((p \/ r) /\ (q \/ r))&lt;br /&gt;
-- Nota: Se supone que f está en forma normal negativa.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interiorizaDisyunción :: Prop -&amp;gt; Prop&lt;br /&gt;
interiorizaDisyunción = undefined &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11: Definir la función&lt;br /&gt;
--    formaNormalConjuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (formaNormalConjuntiva f) es una fórmula equivalente a f en&lt;br /&gt;
-- forma normal conjuntiva. Por ejemplo,&lt;br /&gt;
--    formaNormalConjuntiva (p /\ (q --&amp;gt; r))&lt;br /&gt;
--    ==&amp;gt; (p /\ (no q \/ r))&lt;br /&gt;
--    formaNormalConjuntiva (no (p /\ (q --&amp;gt; r)))&lt;br /&gt;
--    ==&amp;gt; ((no p \/ q) /\ (no p \/ no r))&lt;br /&gt;
--    formaNormalConjuntiva (no(p &amp;lt;--&amp;gt; r))&lt;br /&gt;
--    ==&amp;gt; (((p \/ r) /\ (p \/ no p)) /\ ((no r \/ r) /\ (no r \/ no p)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
formaNormalConjuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
formaNormalConjuntiva f = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Ejercicio 11.2: Definir la función&lt;br /&gt;
--    validaPorFNC:: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (validaPorFNC f) comprueba si f es válida. Por ejemplo,&lt;br /&gt;
--    validaPorFNC ((p --&amp;gt; q) \/ (q --&amp;gt; p))    == True&lt;br /&gt;
--    validaPorFNC ((p \/ q) /\ ((no q) \/ r)) == False&lt;br /&gt;
--    validaPorFNC (p --&amp;gt; p)                   == True&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
validaPorFNC:: Prop -&amp;gt; Bool&lt;br /&gt;
validaPorFNC = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Transformación a forma normal disyuntiva                           --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12: Definir la función&lt;br /&gt;
--    interiorizaConjunción :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (interiorizaConjunción f) es una fórmula equivalente a f&lt;br /&gt;
-- donde las conjunciones sólo se aplica a conjunciones o literales. Por&lt;br /&gt;
-- ejemplo,  &lt;br /&gt;
--    interiorizaConjunción (p /\ (q \/ r))  ==&amp;gt;  ((p /\ q) \/ (p /\ r))&lt;br /&gt;
--    interiorizaConjunción ((p \/ q) /\ r)  ==&amp;gt;  ((p /\ r) \/ (q /\ r))&lt;br /&gt;
-- Nota: Se supone que f está en forma normal negativa.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interiorizaConjunción :: Prop -&amp;gt; Prop&lt;br /&gt;
interiorizaConjunción = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13: Definir la función&lt;br /&gt;
--    formaNormalDisyuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (formaNormalDisyuntiva f) es una fórmula equivalente a f en&lt;br /&gt;
-- forma normal disyuntiva. Por ejemplo,&lt;br /&gt;
--    formaNormalDisyuntiva (p /\ (q --&amp;gt; r))&lt;br /&gt;
--    ==&amp;gt; ((p /\ no q) \/ (p /\ r))&lt;br /&gt;
--    formaNormalDisyuntiva (no (p /\ (q --&amp;gt; r)))&lt;br /&gt;
--    ==&amp;gt; (no p \/ (q /\ no r))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
formaNormalDisyuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
formaNormalDisyuntiva f = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14: Definir la función&lt;br /&gt;
--     satisfaciblePorFND:: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (satisfaciblePorFND f) comprueba si f es satisfacible. Por&lt;br /&gt;
-- ejemplo,&lt;br /&gt;
--     satisfaciblePorFND ((p \/ q) /\ ((no q) \/ r)) == True&lt;br /&gt;
--     satisfaciblePorFND (p /\ (no p))               == False&lt;br /&gt;
--     satisfaciblePorFND ((p --&amp;gt; q) \/ (q --&amp;gt; p))    == True&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
satisfaciblePorFND:: Prop -&amp;gt; Bool&lt;br /&gt;
satisfaciblePorFND f = undefined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_7&amp;diff=258</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_7&amp;diff=258"/>
		<updated>2015-04-12T12:18:15Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- TablerosSemánticos.hs&lt;br /&gt;
-- Tableros semánticos proposicionales.&lt;br /&gt;
-- José A. Alonso Jiménez &amp;lt;jalonso@us.es&amp;gt;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
module TablerosSemanticos where&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Librerías auxiliares                                               --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
import SintaxisSemantica&lt;br /&gt;
import Data.List &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Literales                                                          --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 0: Definir la función&lt;br /&gt;
--    literal :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (literal f) se verifica si la fórmula F es un literal. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    literal p               ==&amp;gt;  True&lt;br /&gt;
--    literal (no p)          ==&amp;gt;  True&lt;br /&gt;
--    literal (no (p --&amp;gt; q))  ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
literal :: Prop -&amp;gt; Bool&lt;br /&gt;
literal (Atom f) = True&lt;br /&gt;
literal (Neg (Atom f)) = True&lt;br /&gt;
literal _ = False&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Notación uniforme                                                  --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1: Definir la función&lt;br /&gt;
--    dobleNegación :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (dobleNegación f) se verifica si f es una doble negación. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    dobleNegación (no (no p))     ==&amp;gt;  True&lt;br /&gt;
--    dobleNegación (no (p --&amp;gt; q))  ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
dobleNegación :: Prop -&amp;gt; Bool&lt;br /&gt;
dobleNegación (Neg (Neg f)) = True&lt;br /&gt;
dobleNegación _ = False&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2: Definir la función&lt;br /&gt;
--    alfa :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (alfa f) se verifica si f es una fórmula alfa.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
alfa :: Prop -&amp;gt; Bool&lt;br /&gt;
alfa (Conj f g) = True&lt;br /&gt;
alfa (Neg (Disj f g))=True&lt;br /&gt;
alfa (Neg(Impl f g))=True&lt;br /&gt;
alfa (Equi f g) = True&lt;br /&gt;
alfa _ =False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3: Definir la función&lt;br /&gt;
--    beta :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (beta d) se verifica si f es una fórmula beta.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
beta :: Prop -&amp;gt; Bool&lt;br /&gt;
beta (Disj f g) = True&lt;br /&gt;
beta (Neg (Conj f g))=True&lt;br /&gt;
beta (Impl f g)=True&lt;br /&gt;
beta (Neg (Equi f g)) = True&lt;br /&gt;
beta _ =False&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4: Definir la función&lt;br /&gt;
--    componentes :: Prop -&amp;gt; [Prop]&lt;br /&gt;
-- tal que (componentes ) es la lista de las componentes de la fórmula&lt;br /&gt;
-- f. Por ejemplo, &lt;br /&gt;
--    componentes (p /\ q --&amp;gt; r)       ==&amp;gt;  [no (p /\ q),r]&lt;br /&gt;
--    componentes (no (p /\ q --&amp;gt; r))  ==&amp;gt;  [(p /\ q),no r]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
componentes :: Prop -&amp;gt; [Prop]&lt;br /&gt;
componentes (Conj f g)       = [f,g]&lt;br /&gt;
componentes (Neg (Impl f g)) = [f, no g]&lt;br /&gt;
componentes (Neg (Disj f g)) = [no f, no g]&lt;br /&gt;
componentes (Equi f g)       = [no (f--&amp;gt;g), no (g--&amp;gt;f)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
componentes g = [quitanegacion (no x)|x&amp;lt;-componentes (quitanegacion (no g))]&lt;br /&gt;
    where quitanegacion (Neg (Neg f)) =f&lt;br /&gt;
          quitanegacion f       = f&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
componentes1 :: Prop -&amp;gt; [Prop]&lt;br /&gt;
componentes1 (Neg (Neg f)) = [f]&lt;br /&gt;
componentes1 (Conj f g) = [f,g]&lt;br /&gt;
componentes1 (Neg (Impl f g)) = [f, Neg g]&lt;br /&gt;
componentes1 (Neg (Disj f g)) = [Neg f, Neg g]&lt;br /&gt;
componentes1 (Equi f g) = [Impl f g, Impl g f]&lt;br /&gt;
componentes1 (Disj f g) = [f,g]&lt;br /&gt;
componentes1 (Impl f g) = [Neg f, g]&lt;br /&gt;
componentes1 (Neg (Conj f g)) = [Neg f, Neg g]&lt;br /&gt;
componentes1 (Neg (Equi f g)) = [Neg (Impl f g), Neg (Impl g f)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Modelos mediante tableros                                          --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5: Definir la función&lt;br /&gt;
--    conjuntoDeLiterales :: [Prop] -&amp;gt; Bool&lt;br /&gt;
-- tal que (conjuntoDeLiterales fs) se verifica si fs es un conjunto de&lt;br /&gt;
-- literales. Por ejemplo, &lt;br /&gt;
--    conjuntoDeLiterales [p --&amp;gt; q, no r, r /\ s, p]  ==&amp;gt;  False&lt;br /&gt;
--    conjuntoDeLiterales [p, no q, r]                ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
conjuntoDeLiterales :: [Prop] -&amp;gt; Bool&lt;br /&gt;
conjuntoDeLiterales = all (literal)&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
conjuntoDeLiterales1 :: [Prop] -&amp;gt; Bool&lt;br /&gt;
conjuntoDeLiterales1 fs = aux fs&lt;br /&gt;
                        where aux [] = True&lt;br /&gt;
                              aux (x:xs) = literal x &amp;amp;&amp;amp; aux xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6: Definir la función&lt;br /&gt;
--    tieneContradicción :: [Prop] -&amp;gt; Bool&lt;br /&gt;
-- tal que (tieneContradicción fs) se verifica si fs contiene una&lt;br /&gt;
-- fórmula y su negación. Por ejemplo,&lt;br /&gt;
--    tieneContradicción [r, p /\ q, s, no(p /\ q)]  ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
tieneContradicción :: [Prop] -&amp;gt; Bool&lt;br /&gt;
tieneContradicción fs = or [elem (no p) fs| p&amp;lt;-fs]&lt;br /&gt;
tieneContradicción&amp;#039; fs = or (map (\x-&amp;gt; elem (no x) fs) fs)&lt;br /&gt;
&lt;br /&gt;
tieneContradiccion1 :: [Prop]-&amp;gt;Bool&lt;br /&gt;
tieneContradiccion1 [] = False&lt;br /&gt;
tieneContradiccion1 ((Neg x):xs) = elem x xs || elem (Neg (Neg x)) xs || tieneContradiccion xs&lt;br /&gt;
tieneContradiccion1 (x:xs) = elem (Neg x) xs || tieneContradiccion xs&lt;br /&gt;
&lt;br /&gt;
-- Aunque en general tieneContradiccion1 no es más eficiente, sí lo puede ser para &lt;br /&gt;
-- casos puntuales, p.e. ys = [Neg (Atom &amp;quot;q&amp;quot;)] ++ [Atom &amp;quot;s&amp;quot; | x &amp;lt;- [1..100000]]++[Atom &amp;quot;q&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7: Definir la función&lt;br /&gt;
--    expansiónDN :: [Prop] -&amp;gt; Prop -&amp;gt; [[Prop]]&lt;br /&gt;
-- tal que (expansiónDN fs f) es la expansión de fs mediante la doble&lt;br /&gt;
-- negación f. Por ejemplo,&lt;br /&gt;
--    expansiónDN [p, no(no q), r] (no(no q))  ==&amp;gt;  [[q,p,r]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
expansiónDN :: [Prop] -&amp;gt; Prop -&amp;gt; [[Prop]]&lt;br /&gt;
expansiónDN fs (Neg (Neg f)) = [f:(filter (/=Neg(Neg f)) fs)]&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
expansionDN1 :: [Prop] -&amp;gt; Prop -&amp;gt; [[Prop]]&lt;br /&gt;
expansionDN1 fs f = [(componentes f) ++ [ x | x &amp;lt;- fs, x /= f]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8: Definir la función&lt;br /&gt;
--    expansiónAlfa :: [Prop] -&amp;gt; Prop -&amp;gt; [[Prop]]&lt;br /&gt;
-- tal que (expansiónAlfa fs f) es la expansión de fs mediante la&lt;br /&gt;
-- fórmula alfa f. Por ejemplo,&lt;br /&gt;
--    expansiónAlfa [q, (p1 /\ p2) , r] (p1 /\ p2)  ==&amp;gt;  [[p1,p2,q,r]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
expansiónAlfa :: [Prop] -&amp;gt; Prop -&amp;gt; [[Prop]]&lt;br /&gt;
expansiónAlfa fs f = [componentes f++(filter (/=f) fs)]&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
expansionAlfa1 :: [Prop] -&amp;gt; Prop -&amp;gt; [[Prop]]&lt;br /&gt;
expansionAlfa1 fs f = [(componentes f) ++ [x | x &amp;lt;- fs, x /= f]]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9: Definir la función&lt;br /&gt;
--    expansiónBeta :: [Prop] -&amp;gt; Prop -&amp;gt; [[Prop]]&lt;br /&gt;
-- tal que (expansiónBeta fs f) es la expansión de fs mediante la&lt;br /&gt;
-- fórmula beta f. Por ejemplo,&lt;br /&gt;
--    expansiónBeta [q, (p1 \/ p2) , r] (p1 \/ p2)  ==&amp;gt;  [[p1,q,r],[p2,q,r]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
expansiónBeta :: [Prop] -&amp;gt; Prop -&amp;gt; [[Prop]]&lt;br /&gt;
expansiónBeta fs f = [x:(filter(/=f) fs), y:(filter (/=f) fs)]&lt;br /&gt;
                     where x = head (componentes f)&lt;br /&gt;
                           y = last (componentes f)&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
expansionBeta1 :: [Prop] -&amp;gt; Prop -&amp;gt; [[Prop]]&lt;br /&gt;
expansionBeta1 fs f =  [[head(componentes f)] ++ [x | x &amp;lt;- fs, x /= f],&lt;br /&gt;
             [head( reverse(componentes f))] ++ [x | x &amp;lt;- fs, x /= f]]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10: Definir la función&lt;br /&gt;
--    sucesores :: [Prop] -&amp;gt; [[Prop]]&lt;br /&gt;
-- tal que (sucesores fs) es la lista de sucesores de fs. Por ejemplo,&lt;br /&gt;
--    sucesores [q \/ s, no(no r), p1 /\ p2] =&amp;gt; [[r,(q \/ s),(p1 /\ p2)]]&lt;br /&gt;
--    sucesores [r,(q \/ s),(p1 /\ p2)]      =&amp;gt; [[p1,p2,r,(q \/ s)]]&lt;br /&gt;
--    sucesores [p1,p2,r,(q \/ s)]           =&amp;gt; [[q,p1,p2,r],[s,p1,p2,r]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sucesores :: [Prop] -&amp;gt; [[Prop]]&lt;br /&gt;
sucesores xs |existeDN xs = expansiónDN xs x&lt;br /&gt;
             |existeAlfa xs = expansiónAlfa xs y &lt;br /&gt;
             | otherwise    = expansiónBeta xs z&lt;br /&gt;
                              where existeDN xs = or (map&lt;br /&gt;
                                                      (dobleNegación) xs)&lt;br /&gt;
                                    existeAlfa xs= or (map (alfa) xs)&lt;br /&gt;
                                    x= head (filter (dobleNegación) xs)&lt;br /&gt;
                                    y= head (filter (alfa) xs)&lt;br /&gt;
                                    z= head (filter (beta) xs)&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
sucesores1 :: [Prop] -&amp;gt; [[Prop]]&lt;br /&gt;
sucesores1 fs | [] /= haydoble fs = expansionDN fs (head (haydoble fs))&lt;br /&gt;
             | [] /= hayalfa fs = expansionAlfa fs (head (hayalfa fs)) &lt;br /&gt;
             | [] /= haybeta fs = expansionBeta fs (head (haybeta fs))&lt;br /&gt;
             | otherwise = [[]]&lt;br /&gt;
&lt;br /&gt;
haydoble xs = [ x | x &amp;lt;- xs, dobleNegacion x]&lt;br /&gt;
&lt;br /&gt;
hayalfa ys = [y | y &amp;lt;- ys, alfa y]&lt;br /&gt;
&lt;br /&gt;
haybeta zs = [z | z &amp;lt;- zs, beta z]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11: Definir la función&lt;br /&gt;
--    modelosTab :: [Prop] -&amp;gt; [[Prop]]&lt;br /&gt;
-- tal que (modelosTab fs) es el conjunto de los modelos de fs&lt;br /&gt;
-- calculados mediante el método de tableros semánticos. Por ejemplo,&lt;br /&gt;
--    modelosTab [p --&amp;gt; q, no(q --&amp;gt; p)]  &lt;br /&gt;
--    ==&amp;gt; [[no p,q],[q,no p]]&lt;br /&gt;
--    modelosTab [p --&amp;gt; q, no q --&amp;gt; no p]  &lt;br /&gt;
--    ==&amp;gt; [[q,no p],[no p],[q],[no p,q]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
modelosTab :: [Prop] -&amp;gt; [[Prop]]&lt;br /&gt;
modelosTab fs = [x |x&amp;lt;-aux xs, (not.tieneContradicción) x] &lt;br /&gt;
&lt;br /&gt;
    where aux xs |conjuntoDeLiterales xs = [xs]&lt;br /&gt;
                 | otherwise =map (nub) (concat[(modelosTab x)|x&amp;lt;-sucesores xs])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12: Definir la función&lt;br /&gt;
--    subconjunto :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Bool&lt;br /&gt;
-- tal que (subconjunto x y) se verifica si x es subconjunto de y. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    subconjunto [1,3] [3,2,1]    ==&amp;gt;  True&lt;br /&gt;
--    subconjunto [1,3,5] [3,2,1]  ==&amp;gt; False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
subconjunto :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Bool&lt;br /&gt;
subconjunto [] _ = True&lt;br /&gt;
subconjunto [x] [y] =False&lt;br /&gt;
subconjunto (x:xs) ys |elem x ys = subconjunto xs ys&lt;br /&gt;
                      | otherwise=False&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
subconjunto1 :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Bool&lt;br /&gt;
subconjunto1 xs ys = length xs == length [x | x &amp;lt;- xs, elem x ys]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13: Definir la función&lt;br /&gt;
--    modelosGenerales :: [Prop] -&amp;gt; [[Prop]]&lt;br /&gt;
-- tal que (modelosGenerales fs) es el conjunto de los modelos generales&lt;br /&gt;
-- de fs calculados mediante el método de tableros semánticos. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    modelosGenerales [p --&amp;gt; q, no q --&amp;gt; no p]  ==&amp;gt;  [[no p],[q]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
modelosGenerales :: [Prop] -&amp;gt; [[Prop]]&lt;br /&gt;
modelosGenerales fs =  aux ps (modelosTab fs)&lt;br /&gt;
    where aux [] ys = ys &lt;br /&gt;
          aux (x:xs) ys = aux xs (delete x ys)&lt;br /&gt;
          ps  = [x |x&amp;lt;-modelosTab fs, f x (modelosTab fs)]&lt;br /&gt;
          f x xs = or [ subconjunto y x|y&amp;lt;-xs,x/=y]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Teoremas por tableros                                              --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14: Definir la función&lt;br /&gt;
--    esTeoremaPorTableros :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esTeoremaPorTableros f) se verifica si la fórmula f es&lt;br /&gt;
-- teorema (mediante tableros semánticos). Por ejemplo,  &lt;br /&gt;
--    esTeoremaPorTableros (p --&amp;gt; p)  ==&amp;gt;  True&lt;br /&gt;
--    esTeoremaPorTableros (p --&amp;gt; q)  ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esTeoremaPorTableros :: Prop -&amp;gt; Bool&lt;br /&gt;
esTeoremaPorTableros f = null (modelosTab [no f])&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona &lt;br /&gt;
&lt;br /&gt;
esTeoremaPorTableros1 :: Prop -&amp;gt; Bool&lt;br /&gt;
esTeoremaPorTableros1 f = modelosTab [Neg f] == [] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Consecuencia por tableros                                          --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15: Definir la función&lt;br /&gt;
--    esDeduciblePorTableros :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esDeduciblePorTableros fs f) se verifica si la fórmula f es&lt;br /&gt;
-- consecuencia (mediante tableros) del conjunto de fórmulas fs. Por&lt;br /&gt;
-- ejemplo,&lt;br /&gt;
--    esDeduciblePorTableros [p --&amp;gt; q, q --&amp;gt; r] (p --&amp;gt; r)   ==&amp;gt;  True&lt;br /&gt;
--    esDeduciblePorTableros [p --&amp;gt; q, q --&amp;gt; r] (p &amp;lt;--&amp;gt; r)  ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esDeduciblePorTableros :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esDeduciblePorTableros fs f = null (modelosGenerales (no f:fs))&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
esDeduciblePorTableros1 :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esDeduciblePorTableros1 fs f = modelosTab ((Neg f):fs) == []&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_5&amp;diff=230</id>
		<title>Relación 5</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_5&amp;diff=230"/>
		<updated>2015-04-01T17:07:25Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R5: Argumentación en lógica de primer orden *}&lt;br /&gt;
&lt;br /&gt;
theory R5_sol&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es formalizar en lógica de primer orden&lt;br /&gt;
  argumentos expresados en lenguaje natural.&lt;br /&gt;
&lt;br /&gt;
  Antes de escribir la soluciones, comprobar con APLI2 la corrección de la&lt;br /&gt;
  formalización. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Formalizar el siguiente argumento &lt;br /&gt;
     Sócrates es un hombre. &lt;br /&gt;
     Los hombres son mortales. &lt;br /&gt;
     Luego, Sócrates es mortal.&lt;br /&gt;
  Usar s    para Sócrates&lt;br /&gt;
       H(x) para x es un hombre          &lt;br /&gt;
       M(x) para x es mortal&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio1&lt;br /&gt;
   assumes &amp;quot;H(s)&amp;quot;&lt;br /&gt;
           &amp;quot;H(x) ⟶ M(x)&amp;quot;&lt;br /&gt;
   shows &amp;quot;M(s)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Formalizar el siguiente argumento&lt;br /&gt;
     Hay estudiantes inteligentes y hay estudiantes trabajadores. Por&lt;br /&gt;
     tanto, hay estudiantes inteligentes y trabajadores.&lt;br /&gt;
  Usar I(x) para x es inteligente&lt;br /&gt;
       T(x) para x es trabajador&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio2&lt;br /&gt;
assumes &amp;quot;(∃x. I(x)) ∧ (∃x. T(x))&amp;quot; &lt;br /&gt;
  shows   &amp;quot;∃x. I(x) ∧ T(x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Formalizar el siguiente argumento&lt;br /&gt;
     Todos los participantes son vencedores. Hay como máximo un&lt;br /&gt;
     vencedor. Hay como máximo un participante. Por lo tanto, hay&lt;br /&gt;
     exactamente un participante. &lt;br /&gt;
  Usar P(x) para x es un participante&lt;br /&gt;
       V(x) para x es un vencedor&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Formalizar el siguiente argumento&lt;br /&gt;
     Todo aquel que entre en el país y no sea un VIP será cacheado por&lt;br /&gt;
     un aduanero. Hay un contrabandista que entra en el país y que solo&lt;br /&gt;
     podrá ser cacheado por contrabandistas. Ningún contrabandista es un&lt;br /&gt;
     VIP. Por tanto, algún aduanero es contrabandista.&lt;br /&gt;
  Usar A(x)    para x es aduanero&lt;br /&gt;
       Ca(x,y) para x cachea a y&lt;br /&gt;
       Co(x)   para x es contrabandista&lt;br /&gt;
       E(x)    para x entra en el pais&lt;br /&gt;
       V(x)    para x es un VIP&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Formalizar el siguiente argumento&lt;br /&gt;
     Juan teme a María. Pedro es temido por Juan. Luego, alguien teme a&lt;br /&gt;
     María y a Pedro.&lt;br /&gt;
  Usar j      para Juan  &lt;br /&gt;
       m      para María&lt;br /&gt;
       p      para Pedro&lt;br /&gt;
       T(x,y) para x teme a y&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio5&lt;br /&gt;
   assumes &amp;quot;T(j,m)&amp;quot;&lt;br /&gt;
           &amp;quot;T(j,p)&amp;quot;&lt;br /&gt;
   shows &amp;quot;∃x. T(x,m) ∧ T(x,p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Formalizar el siguiente argumento&lt;br /&gt;
     Los hermanos tienen el mismo padre. Juan es hermano de Luis. Carlos&lt;br /&gt;
     es padre de Luis. Por tanto, Carlos es padre de Juan.&lt;br /&gt;
  Usar H(x,y) para x es hermano de y&lt;br /&gt;
       P(x,y) para x es padre de y&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio6&lt;br /&gt;
  assumes &amp;quot;∀x y z. H(x,y) ⟶ P(z,x) ∧ P(z,y)&amp;quot;&lt;br /&gt;
          &amp;quot;H(x,y) → H(y,x)&amp;quot;&lt;br /&gt;
          &amp;quot;H(j,l)&amp;quot;&lt;br /&gt;
          &amp;quot;P(c,l)&amp;quot;&lt;br /&gt;
  shows &amp;quot;P(c,j)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Formalizar el siguiente argumento&lt;br /&gt;
     La existencia de algún canal de TV pública, supone un acicate para&lt;br /&gt;
     cualquier canal de TV privada; el que un canal de TV tenga un&lt;br /&gt;
     acicate, supone una gran satisfacción para cualquiera de sus&lt;br /&gt;
     directivos; en Madrid hay varios canales públicos de TV; TV5 es un&lt;br /&gt;
     canal de TV privada; por tanto, todos los directivos de TV5 están&lt;br /&gt;
     satisfechos. &lt;br /&gt;
  Usar Pu(x)  para x es un canal de TV pública&lt;br /&gt;
       Pr(x)  para x es un canal de TV privada&lt;br /&gt;
       A(x)   para x posee un acicate&lt;br /&gt;
       D(x,y) para x es un directivo del canal y&lt;br /&gt;
       S(x)   para x está satisfecho &lt;br /&gt;
       t      para TV5&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Formalizar el siguiente argumento&lt;br /&gt;
     Quien intente entrar en un país y no tenga pasaporte, encontrará&lt;br /&gt;
     algún aduanero que le impida el paso. A algunas personas&lt;br /&gt;
     motorizadas que intentan entrar en un país le impiden el paso&lt;br /&gt;
     únicamente personas motorizadas. Ninguna persona motorizada tiene&lt;br /&gt;
     pasaporte. Por tanto, ciertos aduaneros están motorizados.&lt;br /&gt;
  Usar E(x)   para x entra en un país&lt;br /&gt;
       P(x)   para x tiene pasaporte&lt;br /&gt;
       A(x)   para x es aduanero&lt;br /&gt;
       I(x,y) para x impide el paso a y&lt;br /&gt;
       M(x)   para x está motorizada&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio8&lt;br /&gt;
   assumes &amp;quot;∀x. E(x) ∧ ¬P(x) ⟶ ∃z. A(z) ∧ I(z,x)&amp;quot;&lt;br /&gt;
           &amp;quot;∃x. M(x) ⟶ ∃z. M(z) ∧ I(z,x)&amp;quot;&lt;br /&gt;
           &amp;quot;M(x) ⟶ ¬P(x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. A(x) ∧ M(x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Formalizar el siguiente argumento&lt;br /&gt;
     Los aficionados al fútbol aplauden a cualquier futbolista&lt;br /&gt;
     extranjero. Juanito no aplaude a futbolistas extranjeros. Por&lt;br /&gt;
     tanto, si hay algún futbolista extranjero nacionalizado español,&lt;br /&gt;
     Juanito no es aficionado al fútbol.&lt;br /&gt;
  Usar Af(x)   para x es aficicionado al fútbol&lt;br /&gt;
       Ap(x,y) para x aplaude a y&lt;br /&gt;
       E(x)    para x es un futbolista extranjero&lt;br /&gt;
       N(x)    para x es un futbolista nacionalizado español&lt;br /&gt;
       j       para Juanito&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio9&lt;br /&gt;
assumes &amp;quot;∀x. Af(x) ⟶ (∀y. E(y) ⟶ Ap(x,y))&amp;quot;&lt;br /&gt;
          &amp;quot;∀x. E(x) ⟶ ¬Ap(j,x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(∃x. E(x) ∧ N(x)) ⟶ ¬Af(j)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Formalizar el siguiente argumento&lt;br /&gt;
     Ningún aristócrata debe ser condenado a galeras a menos que sus&lt;br /&gt;
     crímenes sean vergonzosos y lleve una vida licenciosa. En la ciudad&lt;br /&gt;
     hay aristócratas que han cometido crímenes vergonzosos aunque su&lt;br /&gt;
     forma de vida no sea licenciosa. Por tanto, hay algún aristócrata&lt;br /&gt;
     que no está condenado a galeras. &lt;br /&gt;
  Usar A(x)  para x es aristócrata&lt;br /&gt;
       G(x)  para x está condenado a galeras&lt;br /&gt;
       L(x)  para x lleva una vida licenciosa&lt;br /&gt;
       V(x)  para x ha cometido crímenes vergonzoso&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Formalizar el siguiente argumento&lt;br /&gt;
     Todo individuo que esté conforme con el contenido de cualquier&lt;br /&gt;
     acuerdo internacional lo apoya o se inhibe en absoluto de asuntos&lt;br /&gt;
     políticos. Cualquiera que se inhiba de los asuntos políticos, no&lt;br /&gt;
     participará en el próximo referéndum. Todo español, está conforme&lt;br /&gt;
     con el acuerdo internacional de Maastricht, al que sin embargo no&lt;br /&gt;
     apoya. Por tanto, cualquier individuo o no es español, o en otro&lt;br /&gt;
     caso, está conforme con el contenido del acuerdo internacional de&lt;br /&gt;
     Maastricht y no participará en el próximo referéndum. &lt;br /&gt;
  Usar C(x,y) para la persona x conforme con el contenido del acuerdo y&lt;br /&gt;
       A(x,y) para la persona x apoya el acuerdo y&lt;br /&gt;
       I(x)   para la persona x se inibe de asuntos políticos&lt;br /&gt;
       R(x)   para la persona x participará en el próximo referéndum&lt;br /&gt;
       E(x)   para la persona x es española&lt;br /&gt;
       m      para el acuerdo de Maastricht&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Formalizar el siguiente argumento&lt;br /&gt;
     Toda persona pobre tiene un padre rico. Por tanto, existe una&lt;br /&gt;
     persona rica que tiene un abuelo rico.&lt;br /&gt;
  Usar R(x) para x es rico&lt;br /&gt;
       p(x) para el padre de x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Formalizar el siguiente argumento&lt;br /&gt;
     Todo deprimido que estima a un submarinista es listo. Cualquiera&lt;br /&gt;
     que se estime a sí mismo es listo. Ningún deprimido se estima a sí&lt;br /&gt;
     mismo. Por tanto, ningún deprimido estima a un submarinista.&lt;br /&gt;
  Usar D(x)   para x está deprimido&lt;br /&gt;
       E(x,y) para x estima a y&lt;br /&gt;
       L(x)   para x es listo&lt;br /&gt;
       S(x)   para x es submarinista&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Formalizar el siguiente argumento&lt;br /&gt;
     Todos los robots obedecen a los amigos del programador jefe.&lt;br /&gt;
     Alvaro es amigo del programador jefe, pero Benito no le&lt;br /&gt;
     obedece. Por tanto, Benito no es un robot.&lt;br /&gt;
  Usar R(x)    para x es un robot&lt;br /&gt;
       Ob(x,y) para x obedece a y&lt;br /&gt;
       A(x)    para x es amigo del programador jefe&lt;br /&gt;
       b       para Benito&lt;br /&gt;
       a       para Alvaro&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Formalizar el siguiente argumento&lt;br /&gt;
     En una pecera nadan una serie de peces. Se observa que:&lt;br /&gt;
     * Hay algún pez x que para cualquier pez y, si el pez x no se come&lt;br /&gt;
       al pez y entonces existe un pez z tal que z es un tiburón o bien&lt;br /&gt;
       z protege al pez y. &lt;br /&gt;
     * No hay ningún pez que se coma a todos los demás.&lt;br /&gt;
     * Ningún pez protege a ningún otro.&lt;br /&gt;
     Por tanto, existe algún tiburón en la pecera.&lt;br /&gt;
  Usar C(x,y) para x se come a y &lt;br /&gt;
       P(x,y) para x protege a y&lt;br /&gt;
       T(x)   para x es un tiburón&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Formalizar el siguiente argumento&lt;br /&gt;
     Supongamos conocidos los siguientes hechos acerca del número de&lt;br /&gt;
     aprobados de dos asignaturas A y B: &lt;br /&gt;
     * Si todos los alumnos aprueban la asignatura A, entonces todos&lt;br /&gt;
       aprueban la asignatura B.&lt;br /&gt;
     * Si algún delegado de la clase aprueba A y B, entonces todos los &lt;br /&gt;
       alumnos aprueban A.&lt;br /&gt;
     * Si nadie aprueba B, entonces ningún delegado aprueba A.&lt;br /&gt;
     * Si Manuel no aprueba B, entonces nadie aprueba B.&lt;br /&gt;
     Por tanto, si Manuel es un delegado y aprueba la asignatura A,&lt;br /&gt;
     entonces todos los alumnos aprueban las asignaturas A y B.&lt;br /&gt;
  Usar A(x,y) para x aprueba la asignatura y&lt;br /&gt;
       D(x)   para x es delegado&lt;br /&gt;
       m      para Manuel&lt;br /&gt;
       a      para la asignatura A&lt;br /&gt;
       b      para la asignatura B&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Formalizar el siguiente argumento&lt;br /&gt;
     En cierto país oriental se ha celebrado la fase final del&lt;br /&gt;
     campeonato mundial de fútbol. Cierto diario deportivo ha publicado&lt;br /&gt;
     las siguientes estadísticas de tan magno acontecimiento: &lt;br /&gt;
     * A todos los porteros que no vistieron camiseta negra les marcó un&lt;br /&gt;
       gol algún delantero europeo.  &lt;br /&gt;
     * Algún portero jugó con botas blancas y sólo le marcaron goles&lt;br /&gt;
       jugadores con botas blancas.  &lt;br /&gt;
     * Ningún portero se marcó un gol a sí mismo. &lt;br /&gt;
     * Ningún jugador con botas blancas vistió camiseta negra. &lt;br /&gt;
     Por tanto, algún delantero europeo jugó con botas blancas.&lt;br /&gt;
  Usar P(x)   para x es portero&lt;br /&gt;
       D(x)   para x es delantero europeo &lt;br /&gt;
       N(x)   para x viste camiseta negra&lt;br /&gt;
       B(x)   para x juega con botas blancas &lt;br /&gt;
       M(x,y) para x marcó un gol a y&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Formalizar el siguiente argumento&lt;br /&gt;
     Las relaciones de parentesco verifican la siguientes propiedades&lt;br /&gt;
     generales:  &lt;br /&gt;
     * Si x es hermano de y, entonces y es hermano de x. &lt;br /&gt;
     * Todo el mundo es hijo de alguien. &lt;br /&gt;
     * Nadie es hijo del hermano de su padre. &lt;br /&gt;
     * Cualquier padre de una persona es también padre de todos los&lt;br /&gt;
       hermanos de esa persona. &lt;br /&gt;
     * Nadie es hijo ni hermano de sí mismo. &lt;br /&gt;
     Tenemos los siguientes miembros de la familia Peláez: Don Antonio,&lt;br /&gt;
     Don Luis, Antoñito y Manolito y sabemos que Don Antonio y Don Luis&lt;br /&gt;
     son hermanos, Antoñito y Manolito son hermanos, y Antoñito es hijo&lt;br /&gt;
     de Don Antonio. Por tanto, Don Luis no es el padre de Manolito.&lt;br /&gt;
  Usar A       para Don Antonio&lt;br /&gt;
       He(x,y) para x es hermano de y &lt;br /&gt;
       Hi(x,y) para x es hijo de y  &lt;br /&gt;
       L       para Don Luis&lt;br /&gt;
       a       para Antoñito&lt;br /&gt;
       m       para Manolito&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. [Problema del apisonador de Schubert (en inglés, &lt;br /&gt;
  &amp;quot;Schubert’s steamroller&amp;quot;)] Formalizar el siguiente argumento &lt;br /&gt;
     Si uno de los miembros del club afeita a algún otro (incluido a&lt;br /&gt;
     sí mismo), entonces todos los miembros del club lo han afeitado&lt;br /&gt;
     a él (aunque no necesariamente al mismo tiempo). Guido, Lorenzo,&lt;br /&gt;
     Petruccio y Cesare pertenecen al club de barberos. Guido ha&lt;br /&gt;
     afeitado a Cesare. Por tanto, Petruccio ha afeitado a Lorenzo.&lt;br /&gt;
  Usar g      para Guido&lt;br /&gt;
       l      para Lorenzo&lt;br /&gt;
       p      para Petruccio&lt;br /&gt;
       c      para Cesare&lt;br /&gt;
       B(x)   para x es un miembro del club de barberos&lt;br /&gt;
       A(x,y) para x ha afeitado a y&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Formalizar el siguiente argumento&lt;br /&gt;
     Carlos afeita a todos los habitantes de Las Chinas que no se&lt;br /&gt;
     afeitan a sí mismo y sólo a ellos. Carlos es un habitante de las&lt;br /&gt;
     Chinas. Por consiguiente, Carlos no afeita a nadie.&lt;br /&gt;
  Usar A(x,y) para x afeita a y&lt;br /&gt;
       C(x)   para x es un habitante de Las Chinas&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Formalizar el siguiente argumento&lt;br /&gt;
     Quien desprecia a todos los fanáticos desprecia también a todos los&lt;br /&gt;
     políticos. Alguien no desprecia a un determinado político. Por&lt;br /&gt;
     consiguiente, hay un fanático al que no todo el mundo desprecia.&lt;br /&gt;
   Usar D(x,y) para x desprecia a y&lt;br /&gt;
        F(x)   para x es fanático&lt;br /&gt;
        P(x)   para x es político&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Formalizar el siguiente argumento&lt;br /&gt;
     El hombre puro ama todo lo que es puro. Por tanto, el hombre puro&lt;br /&gt;
     se ama a sí mismo.&lt;br /&gt;
  Usar A(x,y) para x ama a y&lt;br /&gt;
       H(x)   para x es un hombre&lt;br /&gt;
       P(x)   para x es puro&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. Formalizar el siguiente argumento&lt;br /&gt;
     Ningún socio del club está en deuda con el tesorero del club. Si&lt;br /&gt;
     un socio del club no paga su cuota está en deuda con el tesorero&lt;br /&gt;
     del club. Por tanto, si el tesorero del club es socio del club,&lt;br /&gt;
     entonces paga su cuota. &lt;br /&gt;
  Usar P(x) para x es socio del club&lt;br /&gt;
       Q(x) para x paga su cuota&lt;br /&gt;
       R(x) para x está en deuda con el tesorero&lt;br /&gt;
       a    para el tesorero del club&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Formalizar el siguiente argumento&lt;br /&gt;
     1. Los lobos, zorros, pájaros, orugas y caracoles son animales y&lt;br /&gt;
        existen algunos ejemplares de estos animales. &lt;br /&gt;
     2. También hay algunas semillas y las semillas son plantas. &lt;br /&gt;
     3. A todo animal le gusta o bien comer todo tipo de plantas o bien&lt;br /&gt;
        le gusta comerse a todos los animales más pequeños que él mismo&lt;br /&gt;
        que gustan de comer algunas plantas. &lt;br /&gt;
     4. Las orugas y los caracoles son mucho más pequeños que los&lt;br /&gt;
        pájaros, que son mucho más pequeños que los zorros que a su vez&lt;br /&gt;
        son mucho más pequeños que los lobos. &lt;br /&gt;
     5. A los lobos no les gusta comer ni zorros ni semillas, mientras&lt;br /&gt;
        que a los pájaros les gusta comer orugas pero no caracoles. &lt;br /&gt;
     6. Las orugas y los caracoles gustan de comer algunas plantas. &lt;br /&gt;
     7. Luego, existe un animal al que le gusta comerse un animal al que&lt;br /&gt;
        le gusta comer semillas.  &lt;br /&gt;
  Usar A(x)    para x es un animal&lt;br /&gt;
       Ca(x)   para x es un caracol&lt;br /&gt;
       Co(x,y) para x le gusta comerse a y&lt;br /&gt;
       L(x)    para x es un lobo&lt;br /&gt;
       M(x,y)  para x es más pequeño que y&lt;br /&gt;
       Or(x)   para x es una oruga&lt;br /&gt;
       Pa(x)   para x es un pájaro&lt;br /&gt;
       Pl(x)   para x es una planta&lt;br /&gt;
       S(x)    para x es una semilla&lt;br /&gt;
       Z(x)    para x es un zorro&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Formalizar el siguiente argumento &lt;br /&gt;
     Rosa ama a Curro. Paco no simpatiza con Ana. Quien no simpatiza con&lt;br /&gt;
     Ana ama a Rosa. Si una persona ama a otra, la segunda ama a la&lt;br /&gt;
     primera. Hay como máximo una persona que ama a Rosa. Por tanto,&lt;br /&gt;
     Paco es Curro. &lt;br /&gt;
  Usar A(x,y) para x ama a y &lt;br /&gt;
       S(x,y) para x simpatiza con y &lt;br /&gt;
       a      para Ana&lt;br /&gt;
       c      para Curro&lt;br /&gt;
       p      para Paco &lt;br /&gt;
       r      para Rosa&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Formalizar el siguiente argumento &lt;br /&gt;
     Sólo hay un sofista que enseña gratuitamente, y éste es&lt;br /&gt;
     Sócrates. Sócrates argumenta mejor que ningún otro sofista. Platón&lt;br /&gt;
     argumenta mejor que algún sofista que enseña gratuitamente. Si una&lt;br /&gt;
     persona argumenta mejor que otra segunda, entonces la segunda no&lt;br /&gt;
     argumenta mejor que la primera. Por consiguiente, Platón no es un&lt;br /&gt;
     sofista. &lt;br /&gt;
  Usar G(x)   para x enseña gratuitamente&lt;br /&gt;
       M(x,y) para x argumenta mejor que y&lt;br /&gt;
       S(x)   para x es un sofista&lt;br /&gt;
       p      para Platón&lt;br /&gt;
       s      para Sócrates&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Formalizar el siguiente argumento &lt;br /&gt;
     Todos los filósofos se han preguntado qué es la filosofía. Los que&lt;br /&gt;
     se preguntan qué es la filosofía se vuelven locos. Nietzsche es&lt;br /&gt;
     filósofo. El maestro de Nietzsche no acabó loco. Por tanto,&lt;br /&gt;
     Nietzsche y su maestro son diferentes personas. &lt;br /&gt;
  Usar F(x) para x es filósofo&lt;br /&gt;
       L(x) para x se vuelve loco&lt;br /&gt;
       P(x) para x se ha preguntado qué es la filosofía.&lt;br /&gt;
       m    para el maestro de Nietzsche&lt;br /&gt;
       n    para Nietzsche&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Formalizar el siguiente argumento &lt;br /&gt;
     Los padres son mayores que los hijos. Juan es el padre de Luis. Por&lt;br /&gt;
     tanto, Juan es mayor que Luis.&lt;br /&gt;
  Usar M(x,y) para x es mayor que y&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Formalizar el siguiente argumento &lt;br /&gt;
     El esposo de la hermana de Toni es Roberto. La hermana de Toni es&lt;br /&gt;
     María. Por tanto, el esposo de María es Roberto. &lt;br /&gt;
  Usar e(x) para el esposo de x&lt;br /&gt;
       h    para la hermana de Toni&lt;br /&gt;
       m    para María&lt;br /&gt;
       r    para Roberto&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. Formalizar el siguiente argumento &lt;br /&gt;
     Luis y Jaime tienen el mismo padre. La madre de Rosa es&lt;br /&gt;
     Eva. Eva ama a Carlos. Carlos es el padre de Jaime. Por tanto,&lt;br /&gt;
     la madre de Rosa ama al padre de Luis.&lt;br /&gt;
  Usar A(x,y) para x ama a y&lt;br /&gt;
       m(x)   para la madre de x&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
       e      para Eva&lt;br /&gt;
       j      para Jaime&lt;br /&gt;
       l      para Luis&lt;br /&gt;
       r      para Rosa&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Formalizar el siguiente argumento &lt;br /&gt;
     Si dos personas son hermanos, entonces tienen la misma madre y el&lt;br /&gt;
     mismo padre. Juan es hermano de Luis. Por tanto, la madre del padre&lt;br /&gt;
     de Juan es la madre del padre de Luis.&lt;br /&gt;
  Usar H(x,y) para x es hermano de y&lt;br /&gt;
       m(x)   para la madre de x&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. Formalizar el siguiente argumento &lt;br /&gt;
     Todos los miembros del claustro son asturianos. El secretario forma&lt;br /&gt;
     parte del claustro. El señor Martínez es el secretario. Por tanto,&lt;br /&gt;
     el señor Martínez es asturiano.&lt;br /&gt;
  Usar C(x) para x es miembro del claustro&lt;br /&gt;
       A(x) para x es asturiano&lt;br /&gt;
       s    para el secretario&lt;br /&gt;
       m    para el señor Martínez&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Formalizar el siguiente argumento &lt;br /&gt;
     Eduardo pudo haber visto al asesino. Antonio fue el primer testigo&lt;br /&gt;
     de la defensa. O Eduardo estaba en clase o Antonio dio falso&lt;br /&gt;
     testimonio. Nadie en clase pudo haber visto al asesino. Luego, el&lt;br /&gt;
     primer testigo de la defensa dio falso testimonio. &lt;br /&gt;
  Usar C(x) para x estaba en clase&lt;br /&gt;
       F(x) para x dio falso testimonio&lt;br /&gt;
       V(x) para x pudo haber visto al asesino&lt;br /&gt;
       a    para Antonio&lt;br /&gt;
       e    para Eduardo&lt;br /&gt;
       p    para el primer testigo de la defensa&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Formalizar el siguiente argumento &lt;br /&gt;
     La luna hoy es redonda. La luna de hace dos semanas tenía forma de&lt;br /&gt;
     cuarto creciente. Luna no hay más que una, es decir, siempre es la&lt;br /&gt;
     misma. Luego existe algo que es a la vez redondo y con forma de&lt;br /&gt;
     cuarto creciente. &lt;br /&gt;
  Usar L(x) para la luna del momento x&lt;br /&gt;
       R(x) para x es redonda&lt;br /&gt;
       C(x) para x tiene forma de cuarto creciente&lt;br /&gt;
       h    para hoy&lt;br /&gt;
       d    para hace dos semanas&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Formalizar el siguiente argumento &lt;br /&gt;
     Juana sólo tiene un marido. Juana está casada con Tomás. Tomás es&lt;br /&gt;
     delgado y Guillermo no. Luego, Juana no está casada con Guillermo. &lt;br /&gt;
  Usar D(x)   para x es delgado&lt;br /&gt;
       C(x,y) para x está casada con y&lt;br /&gt;
       g      para Guillermo&lt;br /&gt;
       j      para Juana&lt;br /&gt;
       t      para Tomás&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Formalizar el siguiente argumento &lt;br /&gt;
     Sultán no es Chitón. Sultán no obtendrá un plátano a menos que&lt;br /&gt;
     pueda resolver cualquier problema. Si el chimpancé Chitón trabaja&lt;br /&gt;
     más que Sultán resolverá problemas que Sultán no puede resolver. &lt;br /&gt;
     Todos los chimpancés distintos de Sultán trabajan más que Sultán. &lt;br /&gt;
     Por consiguiente, Sultán no obtendrá un plátano.&lt;br /&gt;
  Usar Pl(x)  para x obtiene el plátano&lt;br /&gt;
       Pr(x)  para x es un problema&lt;br /&gt;
       R(x,y) para x resuelve y&lt;br /&gt;
       T(x,y) para x trabaja más que y&lt;br /&gt;
       c      para Chitón&lt;br /&gt;
       s      para Sultán&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_5&amp;diff=229</id>
		<title>Relación 5</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_5&amp;diff=229"/>
		<updated>2015-03-31T12:17:39Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R5: Argumentación en lógica de primer orden *}&lt;br /&gt;
&lt;br /&gt;
theory R5_sol&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es formalizar en lógica de primer orden&lt;br /&gt;
  argumentos expresados en lenguaje natural.&lt;br /&gt;
&lt;br /&gt;
  Antes de escribir la soluciones, comprobar con APLI2 la corrección de la&lt;br /&gt;
  formalización. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Formalizar el siguiente argumento &lt;br /&gt;
     Sócrates es un hombre. &lt;br /&gt;
     Los hombres son mortales. &lt;br /&gt;
     Luego, Sócrates es mortal.&lt;br /&gt;
  Usar s    para Sócrates&lt;br /&gt;
       H(x) para x es un hombre          &lt;br /&gt;
       M(x) para x es mortal&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio1&lt;br /&gt;
   assumes &amp;quot;H(s)&amp;quot;&lt;br /&gt;
           &amp;quot;H(x) ⟶ M(x)&amp;quot;&lt;br /&gt;
   shows &amp;quot;M(s)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Formalizar el siguiente argumento&lt;br /&gt;
     Hay estudiantes inteligentes y hay estudiantes trabajadores. Por&lt;br /&gt;
     tanto, hay estudiantes inteligentes y trabajadores.&lt;br /&gt;
  Usar I(x) para x es inteligente&lt;br /&gt;
       T(x) para x es trabajador&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio2&lt;br /&gt;
  assumes &amp;quot;I(x)&amp;quot;&lt;br /&gt;
          &amp;quot;T(x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;I(x) ∧ T(x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Formalizar el siguiente argumento&lt;br /&gt;
     Todos los participantes son vencedores. Hay como máximo un&lt;br /&gt;
     vencedor. Hay como máximo un participante. Por lo tanto, hay&lt;br /&gt;
     exactamente un participante. &lt;br /&gt;
  Usar P(x) para x es un participante&lt;br /&gt;
       V(x) para x es un vencedor&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Formalizar el siguiente argumento&lt;br /&gt;
     Todo aquel que entre en el país y no sea un VIP será cacheado por&lt;br /&gt;
     un aduanero. Hay un contrabandista que entra en el país y que solo&lt;br /&gt;
     podrá ser cacheado por contrabandistas. Ningún contrabandista es un&lt;br /&gt;
     VIP. Por tanto, algún aduanero es contrabandista.&lt;br /&gt;
  Usar A(x)    para x es aduanero&lt;br /&gt;
       Ca(x,y) para x cachea a y&lt;br /&gt;
       Co(x)   para x es contrabandista&lt;br /&gt;
       E(x)    para x entra en el pais&lt;br /&gt;
       V(x)    para x es un VIP&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Formalizar el siguiente argumento&lt;br /&gt;
     Juan teme a María. Pedro es temido por Juan. Luego, alguien teme a&lt;br /&gt;
     María y a Pedro.&lt;br /&gt;
  Usar j      para Juan  &lt;br /&gt;
       m      para María&lt;br /&gt;
       p      para Pedro&lt;br /&gt;
       T(x,y) para x teme a y&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio5&lt;br /&gt;
   assumes &amp;quot;T(j,m)&amp;quot;&lt;br /&gt;
           &amp;quot;T(j,p)&amp;quot;&lt;br /&gt;
   shows &amp;quot;∃x. T(x,m) ∧ T(x,p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Formalizar el siguiente argumento&lt;br /&gt;
     Los hermanos tienen el mismo padre. Juan es hermano de Luis. Carlos&lt;br /&gt;
     es padre de Luis. Por tanto, Carlos es padre de Juan.&lt;br /&gt;
  Usar H(x,y) para x es hermano de y&lt;br /&gt;
       P(x,y) para x es padre de y&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio6&lt;br /&gt;
  assumes &amp;quot;∀x y z. H(x,y) ⟶ P(z,x) ∧ P(z,y)&amp;quot;&lt;br /&gt;
          &amp;quot;H(j,l)&amp;quot;&lt;br /&gt;
          &amp;quot;P(c,l)&amp;quot;&lt;br /&gt;
  shows &amp;quot;P(c,j)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Formalizar el siguiente argumento&lt;br /&gt;
     La existencia de algún canal de TV pública, supone un acicate para&lt;br /&gt;
     cualquier canal de TV privada; el que un canal de TV tenga un&lt;br /&gt;
     acicate, supone una gran satisfacción para cualquiera de sus&lt;br /&gt;
     directivos; en Madrid hay varios canales públicos de TV; TV5 es un&lt;br /&gt;
     canal de TV privada; por tanto, todos los directivos de TV5 están&lt;br /&gt;
     satisfechos. &lt;br /&gt;
  Usar Pu(x)  para x es un canal de TV pública&lt;br /&gt;
       Pr(x)  para x es un canal de TV privada&lt;br /&gt;
       A(x)   para x posee un acicate&lt;br /&gt;
       D(x,y) para x es un directivo del canal y&lt;br /&gt;
       S(x)   para x está satisfecho &lt;br /&gt;
       t      para TV5&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Formalizar el siguiente argumento&lt;br /&gt;
     Quien intente entrar en un país y no tenga pasaporte, encontrará&lt;br /&gt;
     algún aduanero que le impida el paso. A algunas personas&lt;br /&gt;
     motorizadas que intentan entrar en un país le impiden el paso&lt;br /&gt;
     únicamente personas motorizadas. Ninguna persona motorizada tiene&lt;br /&gt;
     pasaporte. Por tanto, ciertos aduaneros están motorizados.&lt;br /&gt;
  Usar E(x)   para x entra en un país&lt;br /&gt;
       P(x)   para x tiene pasaporte&lt;br /&gt;
       A(x)   para x es aduanero&lt;br /&gt;
       I(x,y) para x impide el paso a y&lt;br /&gt;
       M(x)   para x está motorizada&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio8&lt;br /&gt;
   assumes &amp;quot;∀x. E(x) ∧ ¬P(x) ⟶ ∃z. A(z) ∧ I(z,x)&amp;quot;&lt;br /&gt;
           &amp;quot;∃x. M(x) ⟶ ∃z. M(z) ∧ I(z,x)&amp;quot;&lt;br /&gt;
           &amp;quot;M(x) ⟶ ¬P(x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. A(x) ∧ M(x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Formalizar el siguiente argumento&lt;br /&gt;
     Los aficionados al fútbol aplauden a cualquier futbolista&lt;br /&gt;
     extranjero. Juanito no aplaude a futbolistas extranjeros. Por&lt;br /&gt;
     tanto, si hay algún futbolista extranjero nacionalizado español,&lt;br /&gt;
     Juanito no es aficionado al fútbol.&lt;br /&gt;
  Usar Af(x)   para x es aficicionado al fútbol&lt;br /&gt;
       Ap(x,y) para x aplaude a y&lt;br /&gt;
       E(x)    para x es un futbolista extranjero&lt;br /&gt;
       N(x)    para x es un futbolista nacionalizado español&lt;br /&gt;
       j       para Juanito&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio9&lt;br /&gt;
   assumes &amp;quot;∀x y. Af(x) ∧ E(y) ⟶ Ap(x,y)&amp;quot;&lt;br /&gt;
           &amp;quot;∀y. E(y) ⟶ ¬Ap(j,y)&amp;quot;&lt;br /&gt;
   shows &amp;quot;∃y. N(y) ⟶ ¬Af(j)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Formalizar el siguiente argumento&lt;br /&gt;
     Ningún aristócrata debe ser condenado a galeras a menos que sus&lt;br /&gt;
     crímenes sean vergonzosos y lleve una vida licenciosa. En la ciudad&lt;br /&gt;
     hay aristócratas que han cometido crímenes vergonzosos aunque su&lt;br /&gt;
     forma de vida no sea licenciosa. Por tanto, hay algún aristócrata&lt;br /&gt;
     que no está condenado a galeras. &lt;br /&gt;
  Usar A(x)  para x es aristócrata&lt;br /&gt;
       G(x)  para x está condenado a galeras&lt;br /&gt;
       L(x)  para x lleva una vida licenciosa&lt;br /&gt;
       V(x)  para x ha cometido crímenes vergonzoso&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Formalizar el siguiente argumento&lt;br /&gt;
     Todo individuo que esté conforme con el contenido de cualquier&lt;br /&gt;
     acuerdo internacional lo apoya o se inhibe en absoluto de asuntos&lt;br /&gt;
     políticos. Cualquiera que se inhiba de los asuntos políticos, no&lt;br /&gt;
     participará en el próximo referéndum. Todo español, está conforme&lt;br /&gt;
     con el acuerdo internacional de Maastricht, al que sin embargo no&lt;br /&gt;
     apoya. Por tanto, cualquier individuo o no es español, o en otro&lt;br /&gt;
     caso, está conforme con el contenido del acuerdo internacional de&lt;br /&gt;
     Maastricht y no participará en el próximo referéndum. &lt;br /&gt;
  Usar C(x,y) para la persona x conforme con el contenido del acuerdo y&lt;br /&gt;
       A(x,y) para la persona x apoya el acuerdo y&lt;br /&gt;
       I(x)   para la persona x se inibe de asuntos políticos&lt;br /&gt;
       R(x)   para la persona x participará en el próximo referéndum&lt;br /&gt;
       E(x)   para la persona x es española&lt;br /&gt;
       m      para el acuerdo de Maastricht&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Formalizar el siguiente argumento&lt;br /&gt;
     Toda persona pobre tiene un padre rico. Por tanto, existe una&lt;br /&gt;
     persona rica que tiene un abuelo rico.&lt;br /&gt;
  Usar R(x) para x es rico&lt;br /&gt;
       p(x) para el padre de x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Formalizar el siguiente argumento&lt;br /&gt;
     Todo deprimido que estima a un submarinista es listo. Cualquiera&lt;br /&gt;
     que se estime a sí mismo es listo. Ningún deprimido se estima a sí&lt;br /&gt;
     mismo. Por tanto, ningún deprimido estima a un submarinista.&lt;br /&gt;
  Usar D(x)   para x está deprimido&lt;br /&gt;
       E(x,y) para x estima a y&lt;br /&gt;
       L(x)   para x es listo&lt;br /&gt;
       S(x)   para x es submarinista&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Formalizar el siguiente argumento&lt;br /&gt;
     Todos los robots obedecen a los amigos del programador jefe.&lt;br /&gt;
     Alvaro es amigo del programador jefe, pero Benito no le&lt;br /&gt;
     obedece. Por tanto, Benito no es un robot.&lt;br /&gt;
  Usar R(x)    para x es un robot&lt;br /&gt;
       Ob(x,y) para x obedece a y&lt;br /&gt;
       A(x)    para x es amigo del programador jefe&lt;br /&gt;
       b       para Benito&lt;br /&gt;
       a       para Alvaro&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Formalizar el siguiente argumento&lt;br /&gt;
     En una pecera nadan una serie de peces. Se observa que:&lt;br /&gt;
     * Hay algún pez x que para cualquier pez y, si el pez x no se come&lt;br /&gt;
       al pez y entonces existe un pez z tal que z es un tiburón o bien&lt;br /&gt;
       z protege al pez y. &lt;br /&gt;
     * No hay ningún pez que se coma a todos los demás.&lt;br /&gt;
     * Ningún pez protege a ningún otro.&lt;br /&gt;
     Por tanto, existe algún tiburón en la pecera.&lt;br /&gt;
  Usar C(x,y) para x se come a y &lt;br /&gt;
       P(x,y) para x protege a y&lt;br /&gt;
       T(x)   para x es un tiburón&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Formalizar el siguiente argumento&lt;br /&gt;
     Supongamos conocidos los siguientes hechos acerca del número de&lt;br /&gt;
     aprobados de dos asignaturas A y B: &lt;br /&gt;
     * Si todos los alumnos aprueban la asignatura A, entonces todos&lt;br /&gt;
       aprueban la asignatura B.&lt;br /&gt;
     * Si algún delegado de la clase aprueba A y B, entonces todos los &lt;br /&gt;
       alumnos aprueban A.&lt;br /&gt;
     * Si nadie aprueba B, entonces ningún delegado aprueba A.&lt;br /&gt;
     * Si Manuel no aprueba B, entonces nadie aprueba B.&lt;br /&gt;
     Por tanto, si Manuel es un delegado y aprueba la asignatura A,&lt;br /&gt;
     entonces todos los alumnos aprueban las asignaturas A y B.&lt;br /&gt;
  Usar A(x,y) para x aprueba la asignatura y&lt;br /&gt;
       D(x)   para x es delegado&lt;br /&gt;
       m      para Manuel&lt;br /&gt;
       a      para la asignatura A&lt;br /&gt;
       b      para la asignatura B&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Formalizar el siguiente argumento&lt;br /&gt;
     En cierto país oriental se ha celebrado la fase final del&lt;br /&gt;
     campeonato mundial de fútbol. Cierto diario deportivo ha publicado&lt;br /&gt;
     las siguientes estadísticas de tan magno acontecimiento: &lt;br /&gt;
     * A todos los porteros que no vistieron camiseta negra les marcó un&lt;br /&gt;
       gol algún delantero europeo.  &lt;br /&gt;
     * Algún portero jugó con botas blancas y sólo le marcaron goles&lt;br /&gt;
       jugadores con botas blancas.  &lt;br /&gt;
     * Ningún portero se marcó un gol a sí mismo. &lt;br /&gt;
     * Ningún jugador con botas blancas vistió camiseta negra. &lt;br /&gt;
     Por tanto, algún delantero europeo jugó con botas blancas.&lt;br /&gt;
  Usar P(x)   para x es portero&lt;br /&gt;
       D(x)   para x es delantero europeo &lt;br /&gt;
       N(x)   para x viste camiseta negra&lt;br /&gt;
       B(x)   para x juega con botas blancas &lt;br /&gt;
       M(x,y) para x marcó un gol a y&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Formalizar el siguiente argumento&lt;br /&gt;
     Las relaciones de parentesco verifican la siguientes propiedades&lt;br /&gt;
     generales:  &lt;br /&gt;
     * Si x es hermano de y, entonces y es hermano de x. &lt;br /&gt;
     * Todo el mundo es hijo de alguien. &lt;br /&gt;
     * Nadie es hijo del hermano de su padre. &lt;br /&gt;
     * Cualquier padre de una persona es también padre de todos los&lt;br /&gt;
       hermanos de esa persona. &lt;br /&gt;
     * Nadie es hijo ni hermano de sí mismo. &lt;br /&gt;
     Tenemos los siguientes miembros de la familia Peláez: Don Antonio,&lt;br /&gt;
     Don Luis, Antoñito y Manolito y sabemos que Don Antonio y Don Luis&lt;br /&gt;
     son hermanos, Antoñito y Manolito son hermanos, y Antoñito es hijo&lt;br /&gt;
     de Don Antonio. Por tanto, Don Luis no es el padre de Manolito.&lt;br /&gt;
  Usar A       para Don Antonio&lt;br /&gt;
       He(x,y) para x es hermano de y &lt;br /&gt;
       Hi(x,y) para x es hijo de y  &lt;br /&gt;
       L       para Don Luis&lt;br /&gt;
       a       para Antoñito&lt;br /&gt;
       m       para Manolito&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. [Problema del apisonador de Schubert (en inglés, &lt;br /&gt;
  &amp;quot;Schubert’s steamroller&amp;quot;)] Formalizar el siguiente argumento &lt;br /&gt;
     Si uno de los miembros del club afeita a algún otro (incluido a&lt;br /&gt;
     sí mismo), entonces todos los miembros del club lo han afeitado&lt;br /&gt;
     a él (aunque no necesariamente al mismo tiempo). Guido, Lorenzo,&lt;br /&gt;
     Petruccio y Cesare pertenecen al club de barberos. Guido ha&lt;br /&gt;
     afeitado a Cesare. Por tanto, Petruccio ha afeitado a Lorenzo.&lt;br /&gt;
  Usar g      para Guido&lt;br /&gt;
       l      para Lorenzo&lt;br /&gt;
       p      para Petruccio&lt;br /&gt;
       c      para Cesare&lt;br /&gt;
       B(x)   para x es un miembro del club de barberos&lt;br /&gt;
       A(x,y) para x ha afeitado a y&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Formalizar el siguiente argumento&lt;br /&gt;
     Carlos afeita a todos los habitantes de Las Chinas que no se&lt;br /&gt;
     afeitan a sí mismo y sólo a ellos. Carlos es un habitante de las&lt;br /&gt;
     Chinas. Por consiguiente, Carlos no afeita a nadie.&lt;br /&gt;
  Usar A(x,y) para x afeita a y&lt;br /&gt;
       C(x)   para x es un habitante de Las Chinas&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Formalizar el siguiente argumento&lt;br /&gt;
     Quien desprecia a todos los fanáticos desprecia también a todos los&lt;br /&gt;
     políticos. Alguien no desprecia a un determinado político. Por&lt;br /&gt;
     consiguiente, hay un fanático al que no todo el mundo desprecia.&lt;br /&gt;
   Usar D(x,y) para x desprecia a y&lt;br /&gt;
        F(x)   para x es fanático&lt;br /&gt;
        P(x)   para x es político&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Formalizar el siguiente argumento&lt;br /&gt;
     El hombre puro ama todo lo que es puro. Por tanto, el hombre puro&lt;br /&gt;
     se ama a sí mismo.&lt;br /&gt;
  Usar A(x,y) para x ama a y&lt;br /&gt;
       H(x)   para x es un hombre&lt;br /&gt;
       P(x)   para x es puro&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. Formalizar el siguiente argumento&lt;br /&gt;
     Ningún socio del club está en deuda con el tesorero del club. Si&lt;br /&gt;
     un socio del club no paga su cuota está en deuda con el tesorero&lt;br /&gt;
     del club. Por tanto, si el tesorero del club es socio del club,&lt;br /&gt;
     entonces paga su cuota. &lt;br /&gt;
  Usar P(x) para x es socio del club&lt;br /&gt;
       Q(x) para x paga su cuota&lt;br /&gt;
       R(x) para x está en deuda con el tesorero&lt;br /&gt;
       a    para el tesorero del club&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Formalizar el siguiente argumento&lt;br /&gt;
     1. Los lobos, zorros, pájaros, orugas y caracoles son animales y&lt;br /&gt;
        existen algunos ejemplares de estos animales. &lt;br /&gt;
     2. También hay algunas semillas y las semillas son plantas. &lt;br /&gt;
     3. A todo animal le gusta o bien comer todo tipo de plantas o bien&lt;br /&gt;
        le gusta comerse a todos los animales más pequeños que él mismo&lt;br /&gt;
        que gustan de comer algunas plantas. &lt;br /&gt;
     4. Las orugas y los caracoles son mucho más pequeños que los&lt;br /&gt;
        pájaros, que son mucho más pequeños que los zorros que a su vez&lt;br /&gt;
        son mucho más pequeños que los lobos. &lt;br /&gt;
     5. A los lobos no les gusta comer ni zorros ni semillas, mientras&lt;br /&gt;
        que a los pájaros les gusta comer orugas pero no caracoles. &lt;br /&gt;
     6. Las orugas y los caracoles gustan de comer algunas plantas. &lt;br /&gt;
     7. Luego, existe un animal al que le gusta comerse un animal al que&lt;br /&gt;
        le gusta comer semillas.  &lt;br /&gt;
  Usar A(x)    para x es un animal&lt;br /&gt;
       Ca(x)   para x es un caracol&lt;br /&gt;
       Co(x,y) para x le gusta comerse a y&lt;br /&gt;
       L(x)    para x es un lobo&lt;br /&gt;
       M(x,y)  para x es más pequeño que y&lt;br /&gt;
       Or(x)   para x es una oruga&lt;br /&gt;
       Pa(x)   para x es un pájaro&lt;br /&gt;
       Pl(x)   para x es una planta&lt;br /&gt;
       S(x)    para x es una semilla&lt;br /&gt;
       Z(x)    para x es un zorro&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Formalizar el siguiente argumento &lt;br /&gt;
     Rosa ama a Curro. Paco no simpatiza con Ana. Quien no simpatiza con&lt;br /&gt;
     Ana ama a Rosa. Si una persona ama a otra, la segunda ama a la&lt;br /&gt;
     primera. Hay como máximo una persona que ama a Rosa. Por tanto,&lt;br /&gt;
     Paco es Curro. &lt;br /&gt;
  Usar A(x,y) para x ama a y &lt;br /&gt;
       S(x,y) para x simpatiza con y &lt;br /&gt;
       a      para Ana&lt;br /&gt;
       c      para Curro&lt;br /&gt;
       p      para Paco &lt;br /&gt;
       r      para Rosa&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Formalizar el siguiente argumento &lt;br /&gt;
     Sólo hay un sofista que enseña gratuitamente, y éste es&lt;br /&gt;
     Sócrates. Sócrates argumenta mejor que ningún otro sofista. Platón&lt;br /&gt;
     argumenta mejor que algún sofista que enseña gratuitamente. Si una&lt;br /&gt;
     persona argumenta mejor que otra segunda, entonces la segunda no&lt;br /&gt;
     argumenta mejor que la primera. Por consiguiente, Platón no es un&lt;br /&gt;
     sofista. &lt;br /&gt;
  Usar G(x)   para x enseña gratuitamente&lt;br /&gt;
       M(x,y) para x argumenta mejor que y&lt;br /&gt;
       S(x)   para x es un sofista&lt;br /&gt;
       p      para Platón&lt;br /&gt;
       s      para Sócrates&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Formalizar el siguiente argumento &lt;br /&gt;
     Todos los filósofos se han preguntado qué es la filosofía. Los que&lt;br /&gt;
     se preguntan qué es la filosofía se vuelven locos. Nietzsche es&lt;br /&gt;
     filósofo. El maestro de Nietzsche no acabó loco. Por tanto,&lt;br /&gt;
     Nietzsche y su maestro son diferentes personas. &lt;br /&gt;
  Usar F(x) para x es filósofo&lt;br /&gt;
       L(x) para x se vuelve loco&lt;br /&gt;
       P(x) para x se ha preguntado qué es la filosofía.&lt;br /&gt;
       m    para el maestro de Nietzsche&lt;br /&gt;
       n    para Nietzsche&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Formalizar el siguiente argumento &lt;br /&gt;
     Los padres son mayores que los hijos. Juan es el padre de Luis. Por&lt;br /&gt;
     tanto, Juan es mayor que Luis.&lt;br /&gt;
  Usar M(x,y) para x es mayor que y&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Formalizar el siguiente argumento &lt;br /&gt;
     El esposo de la hermana de Toni es Roberto. La hermana de Toni es&lt;br /&gt;
     María. Por tanto, el esposo de María es Roberto. &lt;br /&gt;
  Usar e(x) para el esposo de x&lt;br /&gt;
       h    para la hermana de Toni&lt;br /&gt;
       m    para María&lt;br /&gt;
       r    para Roberto&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. Formalizar el siguiente argumento &lt;br /&gt;
     Luis y Jaime tienen el mismo padre. La madre de Rosa es&lt;br /&gt;
     Eva. Eva ama a Carlos. Carlos es el padre de Jaime. Por tanto,&lt;br /&gt;
     la madre de Rosa ama al padre de Luis.&lt;br /&gt;
  Usar A(x,y) para x ama a y&lt;br /&gt;
       m(x)   para la madre de x&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
       e      para Eva&lt;br /&gt;
       j      para Jaime&lt;br /&gt;
       l      para Luis&lt;br /&gt;
       r      para Rosa&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Formalizar el siguiente argumento &lt;br /&gt;
     Si dos personas son hermanos, entonces tienen la misma madre y el&lt;br /&gt;
     mismo padre. Juan es hermano de Luis. Por tanto, la madre del padre&lt;br /&gt;
     de Juan es la madre del padre de Luis.&lt;br /&gt;
  Usar H(x,y) para x es hermano de y&lt;br /&gt;
       m(x)   para la madre de x&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. Formalizar el siguiente argumento &lt;br /&gt;
     Todos los miembros del claustro son asturianos. El secretario forma&lt;br /&gt;
     parte del claustro. El señor Martínez es el secretario. Por tanto,&lt;br /&gt;
     el señor Martínez es asturiano.&lt;br /&gt;
  Usar C(x) para x es miembro del claustro&lt;br /&gt;
       A(x) para x es asturiano&lt;br /&gt;
       s    para el secretario&lt;br /&gt;
       m    para el señor Martínez&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Formalizar el siguiente argumento &lt;br /&gt;
     Eduardo pudo haber visto al asesino. Antonio fue el primer testigo&lt;br /&gt;
     de la defensa. O Eduardo estaba en clase o Antonio dio falso&lt;br /&gt;
     testimonio. Nadie en clase pudo haber visto al asesino. Luego, el&lt;br /&gt;
     primer testigo de la defensa dio falso testimonio. &lt;br /&gt;
  Usar C(x) para x estaba en clase&lt;br /&gt;
       F(x) para x dio falso testimonio&lt;br /&gt;
       V(x) para x pudo haber visto al asesino&lt;br /&gt;
       a    para Antonio&lt;br /&gt;
       e    para Eduardo&lt;br /&gt;
       p    para el primer testigo de la defensa&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Formalizar el siguiente argumento &lt;br /&gt;
     La luna hoy es redonda. La luna de hace dos semanas tenía forma de&lt;br /&gt;
     cuarto creciente. Luna no hay más que una, es decir, siempre es la&lt;br /&gt;
     misma. Luego existe algo que es a la vez redondo y con forma de&lt;br /&gt;
     cuarto creciente. &lt;br /&gt;
  Usar L(x) para la luna del momento x&lt;br /&gt;
       R(x) para x es redonda&lt;br /&gt;
       C(x) para x tiene forma de cuarto creciente&lt;br /&gt;
       h    para hoy&lt;br /&gt;
       d    para hace dos semanas&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Formalizar el siguiente argumento &lt;br /&gt;
     Juana sólo tiene un marido. Juana está casada con Tomás. Tomás es&lt;br /&gt;
     delgado y Guillermo no. Luego, Juana no está casada con Guillermo. &lt;br /&gt;
  Usar D(x)   para x es delgado&lt;br /&gt;
       C(x,y) para x está casada con y&lt;br /&gt;
       g      para Guillermo&lt;br /&gt;
       j      para Juana&lt;br /&gt;
       t      para Tomás&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Formalizar el siguiente argumento &lt;br /&gt;
     Sultán no es Chitón. Sultán no obtendrá un plátano a menos que&lt;br /&gt;
     pueda resolver cualquier problema. Si el chimpancé Chitón trabaja&lt;br /&gt;
     más que Sultán resolverá problemas que Sultán no puede resolver. &lt;br /&gt;
     Todos los chimpancés distintos de Sultán trabajan más que Sultán. &lt;br /&gt;
     Por consiguiente, Sultán no obtendrá un plátano.&lt;br /&gt;
  Usar Pl(x)  para x obtiene el plátano&lt;br /&gt;
       Pr(x)  para x es un problema&lt;br /&gt;
       R(x,y) para x resuelve y&lt;br /&gt;
       T(x,y) para x trabaja más que y&lt;br /&gt;
       c      para Chitón&lt;br /&gt;
       s      para Sultán&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_5&amp;diff=228</id>
		<title>Relación 5</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_5&amp;diff=228"/>
		<updated>2015-03-31T12:16:47Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R5: Argumentación en lógica de primer orden *}&lt;br /&gt;
&lt;br /&gt;
theory R5_sol&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es formalizar en lógica de primer orden&lt;br /&gt;
  argumentos expresados en lenguaje natural.&lt;br /&gt;
&lt;br /&gt;
  Antes de escribir la soluciones, comprobar con APLI2 la corrección de la&lt;br /&gt;
  formalización. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Formalizar el siguiente argumento &lt;br /&gt;
     Sócrates es un hombre. &lt;br /&gt;
     Los hombres son mortales. &lt;br /&gt;
     Luego, Sócrates es mortal.&lt;br /&gt;
  Usar s    para Sócrates&lt;br /&gt;
       H(x) para x es un hombre          &lt;br /&gt;
       M(x) para x es mortal&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio1&lt;br /&gt;
   assumes &amp;quot;H(s)&amp;quot;&lt;br /&gt;
           &amp;quot;H(x) ⟶ M(x)&amp;quot;&lt;br /&gt;
   shows &amp;quot;M(s)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Formalizar el siguiente argumento&lt;br /&gt;
     Hay estudiantes inteligentes y hay estudiantes trabajadores. Por&lt;br /&gt;
     tanto, hay estudiantes inteligentes y trabajadores.&lt;br /&gt;
  Usar I(x) para x es inteligente&lt;br /&gt;
       T(x) para x es trabajador&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio2&lt;br /&gt;
  assumes &amp;quot;I(x)&amp;quot;&lt;br /&gt;
          &amp;quot;T(x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;I(x) ∧ T(x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Formalizar el siguiente argumento&lt;br /&gt;
     Todos los participantes son vencedores. Hay como máximo un&lt;br /&gt;
     vencedor. Hay como máximo un participante. Por lo tanto, hay&lt;br /&gt;
     exactamente un participante. &lt;br /&gt;
  Usar P(x) para x es un participante&lt;br /&gt;
       V(x) para x es un vencedor&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Formalizar el siguiente argumento&lt;br /&gt;
     Todo aquel que entre en el país y no sea un VIP será cacheado por&lt;br /&gt;
     un aduanero. Hay un contrabandista que entra en el país y que solo&lt;br /&gt;
     podrá ser cacheado por contrabandistas. Ningún contrabandista es un&lt;br /&gt;
     VIP. Por tanto, algún aduanero es contrabandista.&lt;br /&gt;
  Usar A(x)    para x es aduanero&lt;br /&gt;
       Ca(x,y) para x cachea a y&lt;br /&gt;
       Co(x)   para x es contrabandista&lt;br /&gt;
       E(x)    para x entra en el pais&lt;br /&gt;
       V(x)    para x es un VIP&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Formalizar el siguiente argumento&lt;br /&gt;
     Juan teme a María. Pedro es temido por Juan. Luego, alguien teme a&lt;br /&gt;
     María y a Pedro.&lt;br /&gt;
  Usar j      para Juan  &lt;br /&gt;
       m      para María&lt;br /&gt;
       p      para Pedro&lt;br /&gt;
       T(x,y) para x teme a y&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio5&lt;br /&gt;
   assumes &amp;quot;T(j,m)&amp;quot;&lt;br /&gt;
           &amp;quot;T(j,p)&amp;quot;&lt;br /&gt;
   shows &amp;quot;∃x. T(x,m) ∧ T(x,p)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Formalizar el siguiente argumento&lt;br /&gt;
     Los hermanos tienen el mismo padre. Juan es hermano de Luis. Carlos&lt;br /&gt;
     es padre de Luis. Por tanto, Carlos es padre de Juan.&lt;br /&gt;
  Usar H(x,y) para x es hermano de y&lt;br /&gt;
       P(x,y) para x es padre de y&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio6&lt;br /&gt;
  assumes &amp;quot;∀x y z. H(x,y) ⟶ P(z,x) ∧ P(z,y)&amp;quot;&lt;br /&gt;
          &amp;quot;H(j,l)&amp;quot;&lt;br /&gt;
          &amp;quot;P(c,l)&amp;quot;&lt;br /&gt;
  shows &amp;quot;P(c,j)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Formalizar el siguiente argumento&lt;br /&gt;
     La existencia de algún canal de TV pública, supone un acicate para&lt;br /&gt;
     cualquier canal de TV privada; el que un canal de TV tenga un&lt;br /&gt;
     acicate, supone una gran satisfacción para cualquiera de sus&lt;br /&gt;
     directivos; en Madrid hay varios canales públicos de TV; TV5 es un&lt;br /&gt;
     canal de TV privada; por tanto, todos los directivos de TV5 están&lt;br /&gt;
     satisfechos. &lt;br /&gt;
  Usar Pu(x)  para x es un canal de TV pública&lt;br /&gt;
       Pr(x)  para x es un canal de TV privada&lt;br /&gt;
       A(x)   para x posee un acicate&lt;br /&gt;
       D(x,y) para x es un directivo del canal y&lt;br /&gt;
       S(x)   para x está satisfecho &lt;br /&gt;
       t      para TV5&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Formalizar el siguiente argumento&lt;br /&gt;
     Quien intente entrar en un país y no tenga pasaporte, encontrará&lt;br /&gt;
     algún aduanero que le impida el paso. A algunas personas&lt;br /&gt;
     motorizadas que intentan entrar en un país le impiden el paso&lt;br /&gt;
     únicamente personas motorizadas. Ninguna persona motorizada tiene&lt;br /&gt;
     pasaporte. Por tanto, ciertos aduaneros están motorizados.&lt;br /&gt;
  Usar E(x)   para x entra en un país&lt;br /&gt;
       P(x)   para x tiene pasaporte&lt;br /&gt;
       A(x)   para x es aduanero&lt;br /&gt;
       I(x,y) para x impide el paso a y&lt;br /&gt;
       M(x)   para x está motorizada&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio8&lt;br /&gt;
   assumes &amp;quot;∀x. E(x) ∧ ¬P(x) ⟶ ∃z. A(z) ∧ I(z,x)&amp;quot;&lt;br /&gt;
           &amp;quot;∃x. M(x) ⟶ ∃z. M(z) ∧ I(z,x)&amp;quot;&lt;br /&gt;
           &amp;quot;M(x) ⟶ ¬P(x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. A(x) ∧ M(x)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Formalizar el siguiente argumento&lt;br /&gt;
     Los aficionados al fútbol aplauden a cualquier futbolista&lt;br /&gt;
     extranjero. Juanito no aplaude a futbolistas extranjeros. Por&lt;br /&gt;
     tanto, si hay algún futbolista extranjero nacionalizado español,&lt;br /&gt;
     Juanito no es aficionado al fútbol.&lt;br /&gt;
  Usar Af(x)   para x es aficicionado al fútbol&lt;br /&gt;
       Ap(x,y) para x aplaude a y&lt;br /&gt;
       E(x)    para x es un futbolista extranjero&lt;br /&gt;
       N(x)    para x es un futbolista nacionalizado español&lt;br /&gt;
       j       para Juanito&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio9&lt;br /&gt;
   assumes &amp;quot;∀x y. Af(x) ∧ E(y) ⟶ Ap(x,y)&amp;quot;&lt;br /&gt;
           &amp;quot;∀y. E(y) ⟶ ¬Ap(j,y)&amp;quot;&lt;br /&gt;
   shows &amp;quot;∃y. N(y) ⟶ ¬Af(j)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Formalizar el siguiente argumento&lt;br /&gt;
     Ningún aristócrata debe ser condenado a galeras a menos que sus&lt;br /&gt;
     crímenes sean vergonzosos y lleve una vida licenciosa. En la ciudad&lt;br /&gt;
     hay aristócratas que han cometido crímenes vergonzosos aunque su&lt;br /&gt;
     forma de vida no sea licenciosa. Por tanto, hay algún aristócrata&lt;br /&gt;
     que no está condenado a galeras. &lt;br /&gt;
  Usar A(x)  para x es aristócrata&lt;br /&gt;
       G(x)  para x está condenado a galeras&lt;br /&gt;
       L(x)  para x lleva una vida licenciosa&lt;br /&gt;
       V(x)  para x ha cometido crímenes vergonzoso&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Formalizar el siguiente argumento&lt;br /&gt;
     Todo individuo que esté conforme con el contenido de cualquier&lt;br /&gt;
     acuerdo internacional lo apoya o se inhibe en absoluto de asuntos&lt;br /&gt;
     políticos. Cualquiera que se inhiba de los asuntos políticos, no&lt;br /&gt;
     participará en el próximo referéndum. Todo español, está conforme&lt;br /&gt;
     con el acuerdo internacional de Maastricht, al que sin embargo no&lt;br /&gt;
     apoya. Por tanto, cualquier individuo o no es español, o en otro&lt;br /&gt;
     caso, está conforme con el contenido del acuerdo internacional de&lt;br /&gt;
     Maastricht y no participará en el próximo referéndum. &lt;br /&gt;
  Usar C(x,y) para la persona x conforme con el contenido del acuerdo y&lt;br /&gt;
       A(x,y) para la persona x apoya el acuerdo y&lt;br /&gt;
       I(x)   para la persona x se inibe de asuntos políticos&lt;br /&gt;
       R(x)   para la persona x participará en el próximo referéndum&lt;br /&gt;
       E(x)   para la persona x es española&lt;br /&gt;
       m      para el acuerdo de Maastricht&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Formalizar el siguiente argumento&lt;br /&gt;
     Toda persona pobre tiene un padre rico. Por tanto, existe una&lt;br /&gt;
     persona rica que tiene un abuelo rico.&lt;br /&gt;
  Usar R(x) para x es rico&lt;br /&gt;
       p(x) para el padre de x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Formalizar el siguiente argumento&lt;br /&gt;
     Todo deprimido que estima a un submarinista es listo. Cualquiera&lt;br /&gt;
     que se estime a sí mismo es listo. Ningún deprimido se estima a sí&lt;br /&gt;
     mismo. Por tanto, ningún deprimido estima a un submarinista.&lt;br /&gt;
  Usar D(x)   para x está deprimido&lt;br /&gt;
       E(x,y) para x estima a y&lt;br /&gt;
       L(x)   para x es listo&lt;br /&gt;
       S(x)   para x es submarinista&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Formalizar el siguiente argumento&lt;br /&gt;
     Todos los robots obedecen a los amigos del programador jefe.&lt;br /&gt;
     Alvaro es amigo del programador jefe, pero Benito no le&lt;br /&gt;
     obedece. Por tanto, Benito no es un robot.&lt;br /&gt;
  Usar R(x)    para x es un robot&lt;br /&gt;
       Ob(x,y) para x obedece a y&lt;br /&gt;
       A(x)    para x es amigo del programador jefe&lt;br /&gt;
       b       para Benito&lt;br /&gt;
       a       para Alvaro&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Formalizar el siguiente argumento&lt;br /&gt;
     En una pecera nadan una serie de peces. Se observa que:&lt;br /&gt;
     * Hay algún pez x que para cualquier pez y, si el pez x no se come&lt;br /&gt;
       al pez y entonces existe un pez z tal que z es un tiburón o bien&lt;br /&gt;
       z protege al pez y. &lt;br /&gt;
     * No hay ningún pez que se coma a todos los demás.&lt;br /&gt;
     * Ningún pez protege a ningún otro.&lt;br /&gt;
     Por tanto, existe algún tiburón en la pecera.&lt;br /&gt;
  Usar C(x,y) para x se come a y &lt;br /&gt;
       P(x,y) para x protege a y&lt;br /&gt;
       T(x)   para x es un tiburón&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Formalizar el siguiente argumento&lt;br /&gt;
     Supongamos conocidos los siguientes hechos acerca del número de&lt;br /&gt;
     aprobados de dos asignaturas A y B: &lt;br /&gt;
     * Si todos los alumnos aprueban la asignatura A, entonces todos&lt;br /&gt;
       aprueban la asignatura B.&lt;br /&gt;
     * Si algún delegado de la clase aprueba A y B, entonces todos los &lt;br /&gt;
       alumnos aprueban A.&lt;br /&gt;
     * Si nadie aprueba B, entonces ningún delegado aprueba A.&lt;br /&gt;
     * Si Manuel no aprueba B, entonces nadie aprueba B.&lt;br /&gt;
     Por tanto, si Manuel es un delegado y aprueba la asignatura A,&lt;br /&gt;
     entonces todos los alumnos aprueban las asignaturas A y B.&lt;br /&gt;
  Usar A(x,y) para x aprueba la asignatura y&lt;br /&gt;
       D(x)   para x es delegado&lt;br /&gt;
       m      para Manuel&lt;br /&gt;
       a      para la asignatura A&lt;br /&gt;
       b      para la asignatura B&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Formalizar el siguiente argumento&lt;br /&gt;
     En cierto país oriental se ha celebrado la fase final del&lt;br /&gt;
     campeonato mundial de fútbol. Cierto diario deportivo ha publicado&lt;br /&gt;
     las siguientes estadísticas de tan magno acontecimiento: &lt;br /&gt;
     * A todos los porteros que no vistieron camiseta negra les marcó un&lt;br /&gt;
       gol algún delantero europeo.  &lt;br /&gt;
     * Algún portero jugó con botas blancas y sólo le marcaron goles&lt;br /&gt;
       jugadores con botas blancas.  &lt;br /&gt;
     * Ningún portero se marcó un gol a sí mismo. &lt;br /&gt;
     * Ningún jugador con botas blancas vistió camiseta negra. &lt;br /&gt;
     Por tanto, algún delantero europeo jugó con botas blancas.&lt;br /&gt;
  Usar P(x)   para x es portero&lt;br /&gt;
       D(x)   para x es delantero europeo &lt;br /&gt;
       N(x)   para x viste camiseta negra&lt;br /&gt;
       B(x)   para x juega con botas blancas &lt;br /&gt;
       M(x,y) para x marcó un gol a y&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Formalizar el siguiente argumento&lt;br /&gt;
     Las relaciones de parentesco verifican la siguientes propiedades&lt;br /&gt;
     generales:  &lt;br /&gt;
     * Si x es hermano de y, entonces y es hermano de x. &lt;br /&gt;
     * Todo el mundo es hijo de alguien. &lt;br /&gt;
     * Nadie es hijo del hermano de su padre. &lt;br /&gt;
     * Cualquier padre de una persona es también padre de todos los&lt;br /&gt;
       hermanos de esa persona. &lt;br /&gt;
     * Nadie es hijo ni hermano de sí mismo. &lt;br /&gt;
     Tenemos los siguientes miembros de la familia Peláez: Don Antonio,&lt;br /&gt;
     Don Luis, Antoñito y Manolito y sabemos que Don Antonio y Don Luis&lt;br /&gt;
     son hermanos, Antoñito y Manolito son hermanos, y Antoñito es hijo&lt;br /&gt;
     de Don Antonio. Por tanto, Don Luis no es el padre de Manolito.&lt;br /&gt;
  Usar A       para Don Antonio&lt;br /&gt;
       He(x,y) para x es hermano de y &lt;br /&gt;
       Hi(x,y) para x es hijo de y  &lt;br /&gt;
       L       para Don Luis&lt;br /&gt;
       a       para Antoñito&lt;br /&gt;
       m       para Manolito&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. [Problema del apisonador de Schubert (en inglés, &lt;br /&gt;
  &amp;quot;Schubert’s steamroller&amp;quot;)] Formalizar el siguiente argumento &lt;br /&gt;
     Si uno de los miembros del club afeita a algún otro (incluido a&lt;br /&gt;
     sí mismo), entonces todos los miembros del club lo han afeitado&lt;br /&gt;
     a él (aunque no necesariamente al mismo tiempo). Guido, Lorenzo,&lt;br /&gt;
     Petruccio y Cesare pertenecen al club de barberos. Guido ha&lt;br /&gt;
     afeitado a Cesare. Por tanto, Petruccio ha afeitado a Lorenzo.&lt;br /&gt;
  Usar g      para Guido&lt;br /&gt;
       l      para Lorenzo&lt;br /&gt;
       p      para Petruccio&lt;br /&gt;
       c      para Cesare&lt;br /&gt;
       B(x)   para x es un miembro del club de barberos&lt;br /&gt;
       A(x,y) para x ha afeitado a y&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Formalizar el siguiente argumento&lt;br /&gt;
     Carlos afeita a todos los habitantes de Las Chinas que no se&lt;br /&gt;
     afeitan a sí mismo y sólo a ellos. Carlos es un habitante de las&lt;br /&gt;
     Chinas. Por consiguiente, Carlos no afeita a nadie.&lt;br /&gt;
  Usar A(x,y) para x afeita a y&lt;br /&gt;
       C(x)   para x es un habitante de Las Chinas&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Formalizar el siguiente argumento&lt;br /&gt;
     Quien desprecia a todos los fanáticos desprecia también a todos los&lt;br /&gt;
     políticos. Alguien no desprecia a un determinado político. Por&lt;br /&gt;
     consiguiente, hay un fanático al que no todo el mundo desprecia.&lt;br /&gt;
   Usar D(x,y) para x desprecia a y&lt;br /&gt;
        F(x)   para x es fanático&lt;br /&gt;
        P(x)   para x es político&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Formalizar el siguiente argumento&lt;br /&gt;
     El hombre puro ama todo lo que es puro. Por tanto, el hombre puro&lt;br /&gt;
     se ama a sí mismo.&lt;br /&gt;
  Usar A(x,y) para x ama a y&lt;br /&gt;
       H(x)   para x es un hombre&lt;br /&gt;
       P(x)   para x es puro&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. Formalizar el siguiente argumento&lt;br /&gt;
     Ningún socio del club está en deuda con el tesorero del club. Si&lt;br /&gt;
     un socio del club no paga su cuota está en deuda con el tesorero&lt;br /&gt;
     del club. Por tanto, si el tesorero del club es socio del club,&lt;br /&gt;
     entonces paga su cuota. &lt;br /&gt;
  Usar P(x) para x es socio del club&lt;br /&gt;
       Q(x) para x paga su cuota&lt;br /&gt;
       R(x) para x está en deuda con el tesorero&lt;br /&gt;
       a    para el tesorero del club&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Formalizar el siguiente argumento&lt;br /&gt;
     1. Los lobos, zorros, pájaros, orugas y caracoles son animales y&lt;br /&gt;
        existen algunos ejemplares de estos animales. &lt;br /&gt;
     2. También hay algunas semillas y las semillas son plantas. &lt;br /&gt;
     3. A todo animal le gusta o bien comer todo tipo de plantas o bien&lt;br /&gt;
        le gusta comerse a todos los animales más pequeños que él mismo&lt;br /&gt;
        que gustan de comer algunas plantas. &lt;br /&gt;
     4. Las orugas y los caracoles son mucho más pequeños que los&lt;br /&gt;
        pájaros, que son mucho más pequeños que los zorros que a su vez&lt;br /&gt;
        son mucho más pequeños que los lobos. &lt;br /&gt;
     5. A los lobos no les gusta comer ni zorros ni semillas, mientras&lt;br /&gt;
        que a los pájaros les gusta comer orugas pero no caracoles. &lt;br /&gt;
     6. Las orugas y los caracoles gustan de comer algunas plantas. &lt;br /&gt;
     7. Luego, existe un animal al que le gusta comerse un animal al que&lt;br /&gt;
        le gusta comer semillas.  &lt;br /&gt;
  Usar A(x)    para x es un animal&lt;br /&gt;
       Ca(x)   para x es un caracol&lt;br /&gt;
       Co(x,y) para x le gusta comerse a y&lt;br /&gt;
       L(x)    para x es un lobo&lt;br /&gt;
       M(x,y)  para x es más pequeño que y&lt;br /&gt;
       Or(x)   para x es una oruga&lt;br /&gt;
       Pa(x)   para x es un pájaro&lt;br /&gt;
       Pl(x)   para x es una planta&lt;br /&gt;
       S(x)    para x es una semilla&lt;br /&gt;
       Z(x)    para x es un zorro&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Formalizar el siguiente argumento &lt;br /&gt;
     Rosa ama a Curro. Paco no simpatiza con Ana. Quien no simpatiza con&lt;br /&gt;
     Ana ama a Rosa. Si una persona ama a otra, la segunda ama a la&lt;br /&gt;
     primera. Hay como máximo una persona que ama a Rosa. Por tanto,&lt;br /&gt;
     Paco es Curro. &lt;br /&gt;
  Usar A(x,y) para x ama a y &lt;br /&gt;
       S(x,y) para x simpatiza con y &lt;br /&gt;
       a      para Ana&lt;br /&gt;
       c      para Curro&lt;br /&gt;
       p      para Paco &lt;br /&gt;
       r      para Rosa&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Formalizar el siguiente argumento &lt;br /&gt;
     Sólo hay un sofista que enseña gratuitamente, y éste es&lt;br /&gt;
     Sócrates. Sócrates argumenta mejor que ningún otro sofista. Platón&lt;br /&gt;
     argumenta mejor que algún sofista que enseña gratuitamente. Si una&lt;br /&gt;
     persona argumenta mejor que otra segunda, entonces la segunda no&lt;br /&gt;
     argumenta mejor que la primera. Por consiguiente, Platón no es un&lt;br /&gt;
     sofista. &lt;br /&gt;
  Usar G(x)   para x enseña gratuitamente&lt;br /&gt;
       M(x,y) para x argumenta mejor que y&lt;br /&gt;
       S(x)   para x es un sofista&lt;br /&gt;
       p      para Platón&lt;br /&gt;
       s      para Sócrates&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Formalizar el siguiente argumento &lt;br /&gt;
     Todos los filósofos se han preguntado qué es la filosofía. Los que&lt;br /&gt;
     se preguntan qué es la filosofía se vuelven locos. Nietzsche es&lt;br /&gt;
     filósofo. El maestro de Nietzsche no acabó loco. Por tanto,&lt;br /&gt;
     Nietzsche y su maestro son diferentes personas. &lt;br /&gt;
  Usar F(x) para x es filósofo&lt;br /&gt;
       L(x) para x se vuelve loco&lt;br /&gt;
       P(x) para x se ha preguntado qué es la filosofía.&lt;br /&gt;
       m    para el maestro de Nietzsche&lt;br /&gt;
       n    para Nietzsche&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Formalizar el siguiente argumento &lt;br /&gt;
     Los padres son mayores que los hijos. Juan es el padre de Luis. Por&lt;br /&gt;
     tanto, Juan es mayor que Luis.&lt;br /&gt;
  Usar M(x,y) para x es mayor que y&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Formalizar el siguiente argumento &lt;br /&gt;
     El esposo de la hermana de Toni es Roberto. La hermana de Toni es&lt;br /&gt;
     María. Por tanto, el esposo de María es Roberto. &lt;br /&gt;
  Usar e(x) para el esposo de x&lt;br /&gt;
       h    para la hermana de Toni&lt;br /&gt;
       m    para María&lt;br /&gt;
       r    para Roberto&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. Formalizar el siguiente argumento &lt;br /&gt;
     Luis y Jaime tienen el mismo padre. La madre de Rosa es&lt;br /&gt;
     Eva. Eva ama a Carlos. Carlos es el padre de Jaime. Por tanto,&lt;br /&gt;
     la madre de Rosa ama al padre de Luis.&lt;br /&gt;
  Usar A(x,y) para x ama a y&lt;br /&gt;
       m(x)   para la madre de x&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
       e      para Eva&lt;br /&gt;
       j      para Jaime&lt;br /&gt;
       l      para Luis&lt;br /&gt;
       r      para Rosa&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Formalizar el siguiente argumento &lt;br /&gt;
     Si dos personas son hermanos, entonces tienen la misma madre y el&lt;br /&gt;
     mismo padre. Juan es hermano de Luis. Por tanto, la madre del padre&lt;br /&gt;
     de Juan es la madre del padre de Luis.&lt;br /&gt;
  Usar H(x,y) para x es hermano de y&lt;br /&gt;
       m(x)   para la madre de x&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. Formalizar el siguiente argumento &lt;br /&gt;
     Todos los miembros del claustro son asturianos. El secretario forma&lt;br /&gt;
     parte del claustro. El señor Martínez es el secretario. Por tanto,&lt;br /&gt;
     el señor Martínez es asturiano.&lt;br /&gt;
  Usar C(x) para x es miembro del claustro&lt;br /&gt;
       A(x) para x es asturiano&lt;br /&gt;
       s    para el secretario&lt;br /&gt;
       m    para el señor Martínez&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Formalizar el siguiente argumento &lt;br /&gt;
     Eduardo pudo haber visto al asesino. Antonio fue el primer testigo&lt;br /&gt;
     de la defensa. O Eduardo estaba en clase o Antonio dio falso&lt;br /&gt;
     testimonio. Nadie en clase pudo haber visto al asesino. Luego, el&lt;br /&gt;
     primer testigo de la defensa dio falso testimonio. &lt;br /&gt;
  Usar C(x) para x estaba en clase&lt;br /&gt;
       F(x) para x dio falso testimonio&lt;br /&gt;
       V(x) para x pudo haber visto al asesino&lt;br /&gt;
       a    para Antonio&lt;br /&gt;
       e    para Eduardo&lt;br /&gt;
       p    para el primer testigo de la defensa&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Formalizar el siguiente argumento &lt;br /&gt;
     La luna hoy es redonda. La luna de hace dos semanas tenía forma de&lt;br /&gt;
     cuarto creciente. Luna no hay más que una, es decir, siempre es la&lt;br /&gt;
     misma. Luego existe algo que es a la vez redondo y con forma de&lt;br /&gt;
     cuarto creciente. &lt;br /&gt;
  Usar L(x) para la luna del momento x&lt;br /&gt;
       R(x) para x es redonda&lt;br /&gt;
       C(x) para x tiene forma de cuarto creciente&lt;br /&gt;
       h    para hoy&lt;br /&gt;
       d    para hace dos semanas&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Formalizar el siguiente argumento &lt;br /&gt;
     Juana sólo tiene un marido. Juana está casada con Tomás. Tomás es&lt;br /&gt;
     delgado y Guillermo no. Luego, Juana no está casada con Guillermo. &lt;br /&gt;
  Usar D(x)   para x es delgado&lt;br /&gt;
       C(x,y) para x está casada con y&lt;br /&gt;
       g      para Guillermo&lt;br /&gt;
       j      para Juana&lt;br /&gt;
       t      para Tomás&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Formalizar el siguiente argumento &lt;br /&gt;
     Sultán no es Chitón. Sultán no obtendrá un plátano a menos que&lt;br /&gt;
     pueda resolver cualquier problema. Si el chimpancé Chitón trabaja&lt;br /&gt;
     más que Sultán resolverá problemas que Sultán no puede resolver. &lt;br /&gt;
     Todos los chimpancés distintos de Sultán trabajan más que Sultán. &lt;br /&gt;
     Por consiguiente, Sultán no obtendrá un plátano.&lt;br /&gt;
  Usar Pl(x)  para x obtiene el plátano&lt;br /&gt;
       Pr(x)  para x es un problema&lt;br /&gt;
       R(x,y) para x resuelve y&lt;br /&gt;
       T(x,y) para x trabaja más que y&lt;br /&gt;
       c      para Chitón&lt;br /&gt;
       s      para Sultán&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_4&amp;diff=227</id>
		<title>Relación 4</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_4&amp;diff=227"/>
		<updated>2015-03-31T11:10:20Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang =&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R4: Deducción natural de primer orden *}&lt;br /&gt;
&lt;br /&gt;
theory R4&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, de los&lt;br /&gt;
  cuantificadores y de la igualdad: &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;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  · excluded_middel:(¬P ∨ P) &lt;br /&gt;
&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;
  · refl:       t = t&lt;br /&gt;
  · subst:      ⟦s = t; P s⟧ ⟹ P t&lt;br /&gt;
  · trans:      ⟦r = s; s = t⟧ ⟹ r = t&lt;br /&gt;
  · sym:        s = t ⟹ t = s&lt;br /&gt;
  · not_sym:    t ≠ s ⟹ s ≠ t&lt;br /&gt;
  · ssubst:     ⟦t = s; P s⟧ ⟹ P t&lt;br /&gt;
  · box_equals: ⟦a = b; a = c; b = d⟧ ⟹ a: = d&lt;br /&gt;
  · arg_cong:   x = y ⟹ f x = f y&lt;br /&gt;
  · fun_cong:   f = g ⟹ f x = g x&lt;br /&gt;
  · cong:       ⟦f = g; x = y⟧ ⟹ f x = g y&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
       ∀x. P x ⟶ Q x ⊢ (∀x. P x) ⟶ (∀x. Q x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_1a: &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;
proof (rule impI)&lt;br /&gt;
assume &amp;quot;∀x. P x&amp;quot;&lt;br /&gt;
  { fix a&lt;br /&gt;
    have &amp;quot;P a ⟶ Q a&amp;quot; using assms by (rule allE)&lt;br /&gt;
    have &amp;quot;P a&amp;quot; using `∀x. P x` by (rule allE)&lt;br /&gt;
    have &amp;quot;Q a&amp;quot; using `P a ⟶ Q a` `P a` by (rule mp)}&lt;br /&gt;
thus &amp;quot;∀x. Q x&amp;quot; by (rule allI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-María Dolores Mateo&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
       ∃x. ¬(P x) ⊢ ¬(∀x. P x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_2a: &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;
proof &lt;br /&gt;
assume &amp;quot;∀x. P x&amp;quot; &lt;br /&gt;
  obtain a where &amp;quot;¬ (P a)&amp;quot; using assms by (rule exE)&lt;br /&gt;
  have &amp;quot;P a&amp;quot; using `∀x. P x` by (rule allE)&lt;br /&gt;
  show &amp;quot;False&amp;quot; using `¬ (P a)` `P a` by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-María Dolores Mateo&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
       ∀x. P x ⊢ ∀y. P y&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_3a: &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;
proof &lt;br /&gt;
{ fix a&lt;br /&gt;
  show &amp;quot;P a&amp;quot; using assms by (rule allE)}&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-María Dolores Mateo&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
       ∀x. P x ⟶ Q x ⊢ (∀x. ¬(Q x)) ⟶ (∀x. ¬ (P x))&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
proof &lt;br /&gt;
assume &amp;quot;∀x. ¬(Q x)&amp;quot;&lt;br /&gt;
  { fix a&lt;br /&gt;
    have &amp;quot;P a ⟶ Q a&amp;quot; using assms by (rule allE)&lt;br /&gt;
    have &amp;quot;¬ (Q a)&amp;quot; using `∀x. ¬(Q x)` by (rule allE)&lt;br /&gt;
    have &amp;quot;¬(P a)&amp;quot; using `P a ⟶ Q a` `¬ (Q a)` by (rule mt)}&lt;br /&gt;
thus &amp;quot;∀x. ¬ (P x)&amp;quot; by (rule allI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-María Dolores Mateo&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
       ∀x. P x  ⟶ ¬(Q x) ⊢ ¬(∃x. P x ∧ Q x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
proof &lt;br /&gt;
assume &amp;quot;∃x. P x ∧ Q x&amp;quot; &lt;br /&gt;
  obtain a where &amp;quot;P a ∧ Q a&amp;quot; using `∃x. P x ∧ Q x` by (rule exE)&lt;br /&gt;
  have &amp;quot;P a&amp;quot; using `P a ∧ Q a` by (rule conjE)&lt;br /&gt;
  have &amp;quot;Q a&amp;quot; using `P a ∧ Q a` by (rule conjE)&lt;br /&gt;
  have &amp;quot;P a  ⟶ ¬(Q a)&amp;quot; using assms by (rule allE)&lt;br /&gt;
  have &amp;quot;¬(Q a)&amp;quot; using `P a  ⟶ ¬(Q a)` `P a` by (rule mp)&lt;br /&gt;
show &amp;quot;False&amp;quot; using `¬(Q a)` `Q a` by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-María Dolores Mateo&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
       ∀x y. P x y ⊢ ∀u v. P u v&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
&lt;br /&gt;
proof (rule allI)+&lt;br /&gt;
fix a b &lt;br /&gt;
have  &amp;quot;∀y. P a y&amp;quot; using assms by (rule allE)&lt;br /&gt;
thus &amp;quot; P a b&amp;quot; by (rule allE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--Jaime Alberto &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_6b: &lt;br /&gt;
  assumes 1: &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;
proof -&lt;br /&gt;
{fix u0 &lt;br /&gt;
 {fix v0&lt;br /&gt;
  have 2: &amp;quot;∀y. P u0 y&amp;quot; using 1  by (rule allE)&lt;br /&gt;
  have 3: &amp;quot;P u0 v0&amp;quot; using 2 by (rule allE)}&lt;br /&gt;
 then have 4: &amp;quot;∀v. P u0 v&amp;quot; by (rule allI)}&lt;br /&gt;
then show &amp;quot;∀u v. P u v&amp;quot; by (rule allI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
       ∃x y. P x y ⟹ ∃u v. P u v&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
&lt;br /&gt;
proof -&lt;br /&gt;
obtain a where &amp;quot;∃y. P a y&amp;quot; using assms by (rule exE)&lt;br /&gt;
then obtain b where &amp;quot;P a b&amp;quot; by (rule exE)&lt;br /&gt;
hence &amp;quot;∃v. P a v&amp;quot; by (rule exI)&lt;br /&gt;
thus &amp;quot;∃u v. P u v&amp;quot; by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
       ∃x. ∀y. P x y ⊢ ∀y. ∃x. P x y&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
&lt;br /&gt;
proof &lt;br /&gt;
obtain a where &amp;quot;∀y. P a y&amp;quot; using assms by (rule exE)&lt;br /&gt;
fix b &lt;br /&gt;
have &amp;quot;P a b&amp;quot; using `∀y. P a y` by (rule allE)&lt;br /&gt;
thus &amp;quot;∃x. P x b&amp;quot; by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
       ∃x. P a ⟶ Q x ⊢ P a ⟶ (∃x. Q x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
&lt;br /&gt;
proof&lt;br /&gt;
assume &amp;quot;P a&amp;quot;&lt;br /&gt;
obtain b where &amp;quot;P a ⟶ Q b&amp;quot; using assms by (rule exE)&lt;br /&gt;
have &amp;quot;Q b&amp;quot; using `P a ⟶ Q b` `P a` by (rule mp)&lt;br /&gt;
thus &amp;quot;∃x. Q x&amp;quot; by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
       P a ⟶ (∃x. Q x) ⊢ ∃x. P a ⟶ Q x &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_10a: &lt;br /&gt;
  fixes P Q :: &amp;quot;&amp;#039;b ⇒ bool&amp;quot; &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;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
       (∃x. P x) ⟶ Q a ⊢ ∀x. P x ⟶ Q a&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_11a: &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;
&lt;br /&gt;
proof &lt;br /&gt;
fix b&lt;br /&gt;
show &amp;quot;P b ⟶ Q a&amp;quot;  &lt;br /&gt;
proof&lt;br /&gt;
assume &amp;quot;P b&amp;quot;&lt;br /&gt;
hence &amp;quot;∃x. P x&amp;quot; by (rule exI)&lt;br /&gt;
show &amp;quot;Q a&amp;quot; using assms `∃x. P x` by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar&lt;br /&gt;
       ∀x. P x ⟶ Q a ⊢ ∃ x. P x ⟶ Q a&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_12a: &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;
&lt;br /&gt;
proof -&lt;br /&gt;
fix b&lt;br /&gt;
have &amp;quot;P b ⟶ Q a&amp;quot; using assms by (rule allE)&lt;br /&gt;
thus &amp;quot;∃x. P x ⟶ Q a&amp;quot; by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar&lt;br /&gt;
       (∀x. P x) ∨ (∀x. Q x) ⊢ ∀x. P x ∨ Q x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13a: &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;
&lt;br /&gt;
proof &lt;br /&gt;
fix a&lt;br /&gt;
show &amp;quot;P a ∨ Q a&amp;quot; using assms&lt;br /&gt;
proof&lt;br /&gt;
assume &amp;quot;∀x. P x&amp;quot;&lt;br /&gt;
hence &amp;quot;P a&amp;quot; by (rule allE)&lt;br /&gt;
thus &amp;quot;P a ∨ Q a&amp;quot; by (rule disjI1)&lt;br /&gt;
next&lt;br /&gt;
assume &amp;quot;∀x. Q x&amp;quot;&lt;br /&gt;
hence &amp;quot;Q a&amp;quot; by (rule allE)&lt;br /&gt;
thus &amp;quot;P a ∨ Q a&amp;quot; by (rule disjI2)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar&lt;br /&gt;
       ∃x. P x ∧ Q x ⊢ (∃x. P x) ∧ (∃x. Q x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_14a: &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;
&lt;br /&gt;
proof&lt;br /&gt;
obtain a where &amp;quot;P a ∧ Q a&amp;quot; using assms by (rule exE)&lt;br /&gt;
hence &amp;quot;P a&amp;quot; by (rule conjunct1)&lt;br /&gt;
thus &amp;quot;∃x. P x&amp;quot; by (rule exI)&lt;br /&gt;
have &amp;quot;Q a&amp;quot; using  `P a ∧ Q a` by (rule conjunct2)&lt;br /&gt;
thus &amp;quot;∃x. Q x&amp;quot; by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar&lt;br /&gt;
       ∀x y. P y ⟶ Q x ⊢ (∃y. P y) ⟶ (∀x. Q x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_15a: &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;
&lt;br /&gt;
proof&lt;br /&gt;
assume &amp;quot;∃y. P y&amp;quot;&lt;br /&gt;
then obtain b where &amp;quot;P b&amp;quot; by (rule exE)&lt;br /&gt;
{fix a &lt;br /&gt;
have &amp;quot;∀y. P y ⟶ Q a&amp;quot; using assms by (rule allE)&lt;br /&gt;
hence &amp;quot;P b ⟶ Q a&amp;quot; by (rule allE)&lt;br /&gt;
have &amp;quot;Q a&amp;quot; using `P b ⟶ Q a` `P b` by (rule mp)}&lt;br /&gt;
thus &amp;quot;∀x. Q x&amp;quot; by (rule allI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar&lt;br /&gt;
       ¬(∀x. ¬(P x)) ⊢ ∃x. P x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_16a: &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;
&lt;br /&gt;
proof-&lt;br /&gt;
fix x0&lt;br /&gt;
{assume 2: &amp;quot;¬(∃x. P x)&amp;quot; &lt;br /&gt;
 {fix x1&lt;br /&gt;
  {assume 3: &amp;quot;P x1&amp;quot;&lt;br /&gt;
   have 4: &amp;quot;∃x. P x&amp;quot; using 3 by (rule exI)&lt;br /&gt;
   have 5: &amp;quot;False&amp;quot; using 2 4 by (rule notE)}&lt;br /&gt;
 then have 6: &amp;quot;¬ P x1&amp;quot; by (rule notI)}&lt;br /&gt;
then have 7: &amp;quot;∀x. ¬ P x&amp;quot; by (rule allI)&lt;br /&gt;
have 8: &amp;quot;False&amp;quot; using 1 7 by (rule notE)}&lt;br /&gt;
then show &amp;quot;∃x. P x&amp;quot; by (rule ccontr)&lt;br /&gt;
qed &lt;br /&gt;
&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar&lt;br /&gt;
       ∀x. ¬(P x) ⊢ ¬(∃x. P x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_17a: &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;
&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)&amp;quot; using assms by (rule allE)&lt;br /&gt;
show False using `¬(P a)` `P a` by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar&lt;br /&gt;
       ∃x. P x ⊢ ¬(∀x. ¬(P x))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_18a: &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;
&lt;br /&gt;
proof &lt;br /&gt;
assume &amp;quot;∀x. ¬(P x)&amp;quot;&lt;br /&gt;
obtain a where &amp;quot;P a&amp;quot; using assms by (rule exE)&lt;br /&gt;
have &amp;quot;¬(P a)&amp;quot; using `∀x. ¬(P x)`  by (rule allE)&lt;br /&gt;
show False using `¬(P a)` `P a`by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar&lt;br /&gt;
       P a ⟶ (∀x. Q x) ⊢ ∀x. P a ⟶ Q x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19a: &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;
&lt;br /&gt;
proof &lt;br /&gt;
fix b&lt;br /&gt;
show &amp;quot;P a ⟶ Q b&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
assume &amp;quot;P a&amp;quot; &lt;br /&gt;
have &amp;quot;∀x. Q x&amp;quot; using assms `P a` by (rule mp)&lt;br /&gt;
thus &amp;quot;Q b&amp;quot; by (rule allE)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Demostrar&lt;br /&gt;
       {∀x y z. R x y ∧ R y z ⟶ R x z, &lt;br /&gt;
        ∀x. ¬(R x x)}&lt;br /&gt;
       ⊢ ∀x y. R x y ⟶ ¬(R y x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_20a: &lt;br /&gt;
  assumes &amp;quot;∀x y z. R x y ∧ R y z ⟶ R x z&amp;quot;&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;
&lt;br /&gt;
proof (rule allI)+&lt;br /&gt;
fix  a b &lt;br /&gt;
show &amp;quot;R a b ⟶ ¬(R b a )&amp;quot; &lt;br /&gt;
proof &lt;br /&gt;
assume 1:&amp;quot;R a b&amp;quot;&lt;br /&gt;
show&amp;quot;¬(R b a)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
assume 2:&amp;quot;R b a&amp;quot; &lt;br /&gt;
have 3:&amp;quot;R a b ∧ R b a&amp;quot; using 1 2..&lt;br /&gt;
have  &amp;quot;∀y z. R a y ∧ R y z ⟶ R a z&amp;quot; using assms(1)..&lt;br /&gt;
hence  &amp;quot;∀z. R a b ∧ R b z ⟶ R a z&amp;quot;..&lt;br /&gt;
hence 4:&amp;quot;R a b ∧ R b a ⟶ R a a&amp;quot;..&lt;br /&gt;
have 5:&amp;quot;R a a&amp;quot; using 4 3..&lt;br /&gt;
have 6:&amp;quot; ¬(R a a)&amp;quot; using assms(2)..&lt;br /&gt;
show False using 6 5..&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
--Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Demostrar&lt;br /&gt;
     {∀x. P x ∨ Q x, ∃x. ¬(Q x), ∀x. R x ⟶ ¬(P x)} ⊢ ∃x. ¬(R x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_21a:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ∨ Q x&amp;quot; &lt;br /&gt;
          &amp;quot;∃x. ¬(Q x)&amp;quot; &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;
&lt;br /&gt;
proof-&lt;br /&gt;
obtain a where &amp;quot;¬(Q a)&amp;quot; using assms(2) by (rule exE)&lt;br /&gt;
have &amp;quot;P a ∨ Q a&amp;quot; using assms(1) by (rule allE)&lt;br /&gt;
show &amp;quot;∃x. ¬(R x)&amp;quot; using `P a ∨ Q a`&lt;br /&gt;
proof&lt;br /&gt;
assume &amp;quot;P a&amp;quot;&lt;br /&gt;
hence 1:&amp;quot;¬¬(P a)&amp;quot; by (rule notnotI)&lt;br /&gt;
have 2:&amp;quot;R a ⟶ ¬(P a)&amp;quot; using assms(3) by (rule allE)&lt;br /&gt;
have &amp;quot;¬(R a)&amp;quot; using 2 1 by (rule mt)&lt;br /&gt;
thus &amp;quot;∃x. ¬(R x)&amp;quot; by (rule exI)&lt;br /&gt;
next&lt;br /&gt;
assume &amp;quot;Q a&amp;quot;&lt;br /&gt;
have False using `¬(Q a)` `Q a` by (rule notE) &lt;br /&gt;
thus &amp;quot;∃x. ¬(R x)&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Demostrar&lt;br /&gt;
     {∀x. P x ⟶ Q x ∨ R x, ¬(∃x. P x ∧ R x)} ⊢ ∀x. P x ⟶ Q x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_22a:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x ∨ R x&amp;quot; &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;
&lt;br /&gt;
proof&lt;br /&gt;
fix a &lt;br /&gt;
show &amp;quot;P a ⟶ Q a&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
assume 1:&amp;quot;P a&amp;quot;&lt;br /&gt;
have 2:&amp;quot;P a ⟶ Q a ∨ R a&amp;quot; using assms(1) by (rule allE)&lt;br /&gt;
have 3:&amp;quot;Q a ∨ R a&amp;quot; using  2 1 by (rule mp)&lt;br /&gt;
show &amp;quot;Q a&amp;quot; using 3 &lt;br /&gt;
proof&lt;br /&gt;
assume &amp;quot;Q a&amp;quot;&lt;br /&gt;
next &lt;br /&gt;
assume 4:&amp;quot;R a&amp;quot;&lt;br /&gt;
have &amp;quot;P a ∧ R a&amp;quot; using 1 4 by (rule conjI)&lt;br /&gt;
hence 5:&amp;quot;∃x. P x ∧ R x&amp;quot; by (rule exI)&lt;br /&gt;
have False using assms(2) 5 by (rule notE)&lt;br /&gt;
thus &amp;quot;Q a&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. Demostrar&lt;br /&gt;
     ∃x y. R x y ∨ R y x ⊢ ∃x y. R x y&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_23a:&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;
&lt;br /&gt;
proof -&lt;br /&gt;
obtain a where &amp;quot;∃y. R a y ∨ R y a &amp;quot; using assms by (rule exE)&lt;br /&gt;
then obtain b where 1:&amp;quot;R a b ∨ R b a&amp;quot; by (rule exE)&lt;br /&gt;
show &amp;quot;∃x y. R x y&amp;quot; using 1&lt;br /&gt;
proof&lt;br /&gt;
assume &amp;quot;R a b&amp;quot;&lt;br /&gt;
hence &amp;quot;∃y. R a y&amp;quot; by (rule exI)&lt;br /&gt;
thus &amp;quot;∃x y. R x y&amp;quot; by (rule exI)&lt;br /&gt;
next&lt;br /&gt;
assume &amp;quot;R b a&amp;quot;&lt;br /&gt;
hence &amp;quot;∃y. R b y&amp;quot; by (rule exI)&lt;br /&gt;
thus &amp;quot;∃x y. R x y&amp;quot; by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--Jaime Alberto &lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Demostrar&lt;br /&gt;
       (∃x. ∀y. P x y) ⟶ (∀y. ∃x. P x y)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_24a: &lt;br /&gt;
  &amp;quot;(∃x. ∀y. P x y) ⟶ (∀y. ∃x. P x y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof &lt;br /&gt;
assume &amp;quot;∃x. ∀y. P x y&amp;quot;&lt;br /&gt;
then obtain a where 1:&amp;quot;∀y. P a y&amp;quot; by (rule exE)&lt;br /&gt;
{fix b &lt;br /&gt;
have &amp;quot;P a b&amp;quot; using 1 by (rule allE)&lt;br /&gt;
hence &amp;quot;∃x. P x b&amp;quot; by (rule exI)}&lt;br /&gt;
thus &amp;quot;∀y. ∃x. P x y&amp;quot; by (rule allI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- Jaime Alberto &lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Demostrar&lt;br /&gt;
       (∀x. P x ⟶ Q) ⟷ ((∃x. P x) ⟶ Q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_25a: &lt;br /&gt;
  &amp;quot;(∀x. P x ⟶ Q) ⟷ ((∃x. P x) ⟶ Q)&amp;quot;&lt;br /&gt;
&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 3:&amp;quot;P a&amp;quot; by (rule exE)&lt;br /&gt;
have 4:&amp;quot;P a ⟶ Q&amp;quot;using 1 by (rule allE)&lt;br /&gt;
show &amp;quot;Q&amp;quot; using 4 3 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
next &lt;br /&gt;
assume 5:&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 6:&amp;quot;∃x. P x&amp;quot; by (rule exI)&lt;br /&gt;
show &amp;quot;Q&amp;quot; using 5 6 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--Jaime Alberto&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Demostrar&lt;br /&gt;
       ((∀x. P x) ∧ (∀x. Q x)) ⟷ (∀x. P x ∧ Q x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_26a: &lt;br /&gt;
  &amp;quot;((∀x. P x) ∧ (∀x. Q x)) ⟷ (∀x. P x ∧ Q x)&amp;quot;&lt;br /&gt;
  &amp;quot;((∀x. P x) ∧ (∀x. Q x)) ⟷ (∀x. P x ∧ Q x)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume 0: &amp;quot;(∀x. P x) ∧ (∀x. Q x)&amp;quot;&lt;br /&gt;
  have 1: &amp;quot;∀x. P x&amp;quot; using 0 by (rule conjunct1)&lt;br /&gt;
  have 2: &amp;quot;∀x. Q x&amp;quot; using 0 by (rule conjunct2)&lt;br /&gt;
  {fix a&lt;br /&gt;
    have 3: &amp;quot;P a&amp;quot; using 1 by (rule allE)&lt;br /&gt;
    have 4: &amp;quot;Q a&amp;quot; using 2 by (rule allE)&lt;br /&gt;
    have 5: &amp;quot;P a ∧ Q a&amp;quot; using 3 4 by (rule conjI)}&lt;br /&gt;
  thus &amp;quot;∀x. P x ∧ Q x&amp;quot; by (rule allI)&lt;br /&gt;
next&lt;br /&gt;
  assume 0: &amp;quot;∀x. P x ∧ Q x&amp;quot;&lt;br /&gt;
  {fix a&lt;br /&gt;
    have 1: &amp;quot;P a ∧ Q a&amp;quot; using 0 by (rule allE)&lt;br /&gt;
    have 2: &amp;quot;P a&amp;quot; using 1 by (rule conjunct1)}&lt;br /&gt;
  hence 3: &amp;quot;∀x. P x&amp;quot; by (rule allI)&lt;br /&gt;
 {fix a&lt;br /&gt;
    have 4: &amp;quot;P a ∧ Q a&amp;quot; using 0 by (rule allE)&lt;br /&gt;
    have 5: &amp;quot;Q a&amp;quot; using 4 by (rule conjunct2)}&lt;br /&gt;
  hence 6: &amp;quot;∀x. Q x&amp;quot; by (rule allI)&lt;br /&gt;
show &amp;quot;(∀x. P x) ∧ (∀x. Q x)&amp;quot; using 3 6 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Demostrar o refutar&lt;br /&gt;
       ((∀x. P x) ∨ (∀x. Q x)) ⟷ (∀x. P x ∨ Q x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_27a: &lt;br /&gt;
  &amp;quot;((∀x. P x) ∨ (∀x. Q x)) ⟷ (∀x. P x ∨ Q x)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume  &amp;quot;(∀x. P x) ∨ (∀x. Q x)&amp;quot;&lt;br /&gt;
    moreover&lt;br /&gt;
      {assume  &amp;quot;∀x. P x&amp;quot;&lt;br /&gt;
        {fix a&lt;br /&gt;
          have &amp;quot;P a&amp;quot; using `∀x. P x` by (rule allE)&lt;br /&gt;
          have  &amp;quot;P a ∨ Q a&amp;quot; using `P a` by (rule disjI1)}&lt;br /&gt;
        hence &amp;quot;∀x. P x ∨ Q x&amp;quot; by (rule allI)}&lt;br /&gt;
      moreover&lt;br /&gt;
        {assume  &amp;quot;∀x. Q x&amp;quot;&lt;br /&gt;
          {fix a&lt;br /&gt;
            have &amp;quot;Q a&amp;quot; using `∀x. Q x` by (rule allE)&lt;br /&gt;
            have  &amp;quot;P a ∨ Q a&amp;quot; using `Q a` by (rule disjI2)}&lt;br /&gt;
        hence &amp;quot;∀x. P x ∨ Q x&amp;quot; by (rule allI)}&lt;br /&gt;
      ultimately show &amp;quot;∀x. P x ∨ Q x&amp;quot; by (rule disjE)&lt;br /&gt;
next&lt;br /&gt;
  assume  &amp;quot;∀x. P x ∨ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text{* &lt;br /&gt;
Consideremos los números naturales, ℕ. Sea P = &amp;quot;Ser par&amp;quot; y Q = &amp;quot;Ser impar&amp;quot;. Claramente &lt;br /&gt;
∀x, P x ∨ Q x, pero es falso  (∀x P x)∨(∀x Q x), pues no todo número es par&lt;br /&gt;
 y no todo número es impar. Por tanto la propiedad, en general, es falsa. Es decir, &lt;br /&gt;
((∀x. P x) ∨ (∀x. Q x)) ⟶ (∀x. P x ∨ Q x) pero en general&lt;br /&gt;
 (∀x. P x ∨ Q x) no implica ((∀x. P x) ∨ (∀x. Q x))&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Demostrar o refutar&lt;br /&gt;
       ((∃x. P x) ∨ (∃x. Q x)) ⟷ (∃x. P x ∨ Q x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_28a: &lt;br /&gt;
  &amp;quot;((∃x. P x) ∨ (∃x. Q x)) ⟷ (∃x. P x ∨ Q x)&amp;quot;&lt;br /&gt;
&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; using 1&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;
hence &amp;quot;P a ∨ Q a&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 a where &amp;quot;Q a&amp;quot; by (rule exE)&lt;br /&gt;
hence &amp;quot;P a ∨ Q a&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;
next&lt;br /&gt;
assume &amp;quot;∃x. P x ∨ Q x&amp;quot; &lt;br /&gt;
then obtain a where 2:&amp;quot;P a ∨ Q a&amp;quot; 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 &amp;quot;P a&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 a&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;
-- Jaime Alberto &lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Demostrar o refutar&lt;br /&gt;
       (∀x. ∃y. P x y) ⟶ (∃y. ∀x. P x y)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_29: &lt;br /&gt;
&lt;br /&gt;
  &amp;quot;(∀x. ∃y. P x y) ⟶ (∃y. ∀x. P x y)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
text{*&lt;br /&gt;
Propiedad en general falsa. Sean los números naturales, y la propiedad P x y = &amp;quot;x + y es par&amp;quot;. Claramente, para todo x, existe un y tal que P x y se verifica (baste tomar y = x). Pero, sea cual sea el y natural que tomemos, da igual el y que tomemos: no para todo elemento que le sumemos la suma será par. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. Demostrar o refutar&lt;br /&gt;
       (¬(∀x. P x)) ⟷ (∃x. ¬P x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_30a: &lt;br /&gt;
  &amp;quot;(¬(∀x. P x)) ⟷ (∃x. ¬P x)&amp;quot;&lt;br /&gt;
proof (rule iffI)&lt;br /&gt;
   assume 1: &amp;quot;¬(∀x. P x)&amp;quot;&lt;br /&gt;
   show  &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;
   show &amp;quot;False&amp;quot;&lt;br /&gt;
   proof -&lt;br /&gt;
   { fix a&lt;br /&gt;
     { assume 3: &amp;quot;¬P a&amp;quot;&lt;br /&gt;
       have 4: &amp;quot;∃x.¬ P x&amp;quot; using 3 by (rule exI)&lt;br /&gt;
       have 5: &amp;quot;False&amp;quot; using 2 4 by (rule notE)}&lt;br /&gt;
    hence 6: &amp;quot;P a&amp;quot; by (rule ccontr)}&lt;br /&gt;
   hence 7: &amp;quot;∀x. P x&amp;quot; by (rule allI)&lt;br /&gt;
   show 8: &amp;quot;False&amp;quot; using 1 7 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
next&lt;br /&gt;
   assume 9: &amp;quot;∃x. ¬P x&amp;quot;&lt;br /&gt;
   show &amp;quot;¬(∀x. P x)&amp;quot;&lt;br /&gt;
   proof -&lt;br /&gt;
   {assume 10: &amp;quot;¬¬(∀x. P x)&amp;quot;&lt;br /&gt;
    have 11: &amp;quot;∀x. P x&amp;quot; using 10 by (rule notnotD)&lt;br /&gt;
    obtain a where 12: &amp;quot;¬P a&amp;quot; using 9 by (rule exE)&lt;br /&gt;
    have 13: &amp;quot;P a&amp;quot; using 11 by (rule allE)&lt;br /&gt;
    have 14: &amp;quot;False&amp;quot; using 12 13 by (rule notE)}&lt;br /&gt;
   thus 15: &amp;quot;¬(∀x. P x)&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Ejercicios sobre igualdad *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Demostrar o refutar&lt;br /&gt;
       P a ⟹ ∀x. x = a ⟶ P x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_31a:&lt;br /&gt;
  assumes &amp;quot;P a&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∀x. x = a ⟶ P x&amp;quot;&lt;br /&gt;
proof (rule allI)&lt;br /&gt;
  fix b&lt;br /&gt;
  show &amp;quot;b = a ⟶ P b&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;b = a&amp;quot;&lt;br /&gt;
  show &amp;quot;P b&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
  have 2: &amp;quot;a = b&amp;quot; using 1 by (rule sym)&lt;br /&gt;
  show 3: &amp;quot;P b&amp;quot; using 2 assms(1) by (rule subst)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. Demostrar o refutar&lt;br /&gt;
       ∃x y. R x y ∨ R y x; ¬(∃x. R x x)⟧ ⟹ ∃x y. x ≠ y&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_32a:&lt;br /&gt;
  fixes R :: &amp;quot;&amp;#039;c ⇒ &amp;#039;c ⇒ bool&amp;quot;&lt;br /&gt;
  assumes &amp;quot;∃x y. R x y ∨ R y x&amp;quot;&lt;br /&gt;
          &amp;quot;¬(∃x. R x x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃(x::&amp;#039;c) y. x ≠ y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Demostrar o refutar&lt;br /&gt;
     {∀x. P a x x, &lt;br /&gt;
      ∀x y z. P x y z ⟶ P (f x) y (f z)} &lt;br /&gt;
     ⊢ P (f a) a (f a)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_33a:&lt;br /&gt;
  assumes &amp;quot;∀x. P a x x&amp;quot;&lt;br /&gt;
          &amp;quot;∀x y z. P x y z ⟶ P (f x) y (f z)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;P (f a) a (f a)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have 1: &amp;quot;P a a a&amp;quot; using assms(1) by (rule allE)&lt;br /&gt;
    have 2: &amp;quot;∀y z. P a y z ⟶ P (f a) y (f z)&amp;quot; using assms(2) by (rule allE)&lt;br /&gt;
    have 3: &amp;quot;∀z. P a a z ⟶ P (f a) a (f z)&amp;quot; using 2 by (rule allE)&lt;br /&gt;
    have 4: &amp;quot;P a a a ⟶ P (f a) a (f a)&amp;quot; using 3 by (rule allE)&lt;br /&gt;
    show 5: &amp;quot;P (f a) a (f a)&amp;quot; using 4 1 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Demostrar o refutar&lt;br /&gt;
     {∀x. P a x x, &lt;br /&gt;
      ∀x y z. P x y z ⟶ P (f x) y (f z)⟧&lt;br /&gt;
     ⊢ ∃z. P (f a) z (f (f a))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_34a:&lt;br /&gt;
  assumes &amp;quot;∀x. P a x x&amp;quot; &lt;br /&gt;
          &amp;quot;∀x y z. P x y z ⟶ P (f x) y (f z)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃z. P (f a) z (f (f a))&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
   have 1: &amp;quot;P a (f a) (f a)&amp;quot; using assms(1) by (rule allE)&lt;br /&gt;
   have 2: &amp;quot;∀y z. P a y z ⟶ P (f a) y (f z)&amp;quot; using assms(2) by (rule allE)&lt;br /&gt;
   have 3: &amp;quot;∀z. P a (f a) z ⟶ P (f a) (f a) (f z)&amp;quot; using 2 by (rule allE)&lt;br /&gt;
   have 4: &amp;quot;P a (f a) (f a) ⟶ P (f a) (f a) (f (f a))&amp;quot; using 3 by (rule allE)&lt;br /&gt;
   have 5: &amp;quot;P (f a) (f a) (f (f a))&amp;quot; using 4 1 by (rule mp)&lt;br /&gt;
   show 6: &amp;quot;∃z. P (f a) z (f (f a))&amp;quot; using 5 by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Demostrar o refutar&lt;br /&gt;
     {∀y. Q a y, &lt;br /&gt;
      ∀x y. Q x y ⟶ Q (s x) (s y)} &lt;br /&gt;
     ⊢ ∃z. Qa z ∧ Q z (s (s a))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_35a:&lt;br /&gt;
  assumes &amp;quot;∀y. Q a y&amp;quot; &lt;br /&gt;
          &amp;quot;∀x y. Q x y ⟶ Q (s x) (s y)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;∃z. Q a z ∧ Q z (s (s a))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have 1: &amp;quot;Q a (s a)&amp;quot; using assms(1) by (rule allE)&lt;br /&gt;
    have 2: &amp;quot;∀y. Q a y ⟶ Q (s a) (s y)&amp;quot; using assms(2) by (rule allE)&lt;br /&gt;
    have 3: &amp;quot;Q a (s a) ⟶ Q (s a) (s (s a))&amp;quot; using 2 by (rule allE)&lt;br /&gt;
    have 4: &amp;quot;Q (s a) (s (s a))&amp;quot; using 3 1 by (rule mp)&lt;br /&gt;
    have 5: &amp;quot;Q a (s a) ∧ Q (s a) (s (s a))&amp;quot; using 1 4 by (rule conjI)&lt;br /&gt;
    show 6: &amp;quot;∃z. Q a z ∧ Q z (s (s a))&amp;quot; using 5 by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Demostrar o refutar&lt;br /&gt;
     {x = f x, odd (f x)} ⊢ odd x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_36a:&lt;br /&gt;
  assumes &amp;quot;x = f x&amp;quot; and&lt;br /&gt;
          &amp;quot;odd (f x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;odd x&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  show &amp;quot;odd x&amp;quot; using assms(1) assms(2) by (rule ssubst)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Demostrar o refutar&lt;br /&gt;
     {x = f x, triple (f x) (f x) x} ⊢ triple x x x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_37a:&lt;br /&gt;
  assumes &amp;quot;x = f x&amp;quot; and&lt;br /&gt;
          &amp;quot;triple (f x) (f x) x&amp;quot;&lt;br /&gt;
  shows &amp;quot;triple x x x&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   show &amp;quot;triple x x x&amp;quot; using assms(1) assms(2) by (rule ssubst)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_4&amp;diff=224</id>
		<title>Relación 4</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_4&amp;diff=224"/>
		<updated>2015-03-30T08:43:16Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang =&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R4: Deducción natural de primer orden *}&lt;br /&gt;
&lt;br /&gt;
theory R4&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, de los&lt;br /&gt;
  cuantificadores y de la igualdad: &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;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  · excluded_middel:(¬P ∨ P) &lt;br /&gt;
&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;
  · refl:       t = t&lt;br /&gt;
  · subst:      ⟦s = t; P s⟧ ⟹ P t&lt;br /&gt;
  · trans:      ⟦r = s; s = t⟧ ⟹ r = t&lt;br /&gt;
  · sym:        s = t ⟹ t = s&lt;br /&gt;
  · not_sym:    t ≠ s ⟹ s ≠ t&lt;br /&gt;
  · ssubst:     ⟦t = s; P s⟧ ⟹ P t&lt;br /&gt;
  · box_equals: ⟦a = b; a = c; b = d⟧ ⟹ a: = d&lt;br /&gt;
  · arg_cong:   x = y ⟹ f x = f y&lt;br /&gt;
  · fun_cong:   f = g ⟹ f x = g x&lt;br /&gt;
  · cong:       ⟦f = g; x = y⟧ ⟹ f x = g y&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
       ∀x. P x ⟶ Q x ⊢ (∀x. P x) ⟶ (∀x. Q x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_1a: &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;
proof (rule impI)&lt;br /&gt;
assume &amp;quot;∀x. P x&amp;quot;&lt;br /&gt;
  { fix a&lt;br /&gt;
    have &amp;quot;P a ⟶ Q a&amp;quot; using assms by (rule allE)&lt;br /&gt;
    have &amp;quot;P a&amp;quot; using `∀x. P x` by (rule allE)&lt;br /&gt;
    have &amp;quot;Q a&amp;quot; using `P a ⟶ Q a` `P a` by (rule mp)}&lt;br /&gt;
thus &amp;quot;∀x. Q x&amp;quot; by (rule allI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-María Dolores Mateo&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
       ∃x. ¬(P x) ⊢ ¬(∀x. P x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_2a: &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;
proof &lt;br /&gt;
assume &amp;quot;∀x. P x&amp;quot; &lt;br /&gt;
  obtain a where &amp;quot;¬ (P a)&amp;quot; using assms by (rule exE)&lt;br /&gt;
  have &amp;quot;P a&amp;quot; using `∀x. P x` by (rule allE)&lt;br /&gt;
  show &amp;quot;False&amp;quot; using `¬ (P a)` `P a` by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-María Dolores Mateo&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
       ∀x. P x ⊢ ∀y. P y&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_3a: &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;
proof &lt;br /&gt;
{ fix a&lt;br /&gt;
  show &amp;quot;P a&amp;quot; using assms by (rule allE)}&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-María Dolores Mateo&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
       ∀x. P x ⟶ Q x ⊢ (∀x. ¬(Q x)) ⟶ (∀x. ¬ (P x))&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
proof &lt;br /&gt;
assume &amp;quot;∀x. ¬(Q x)&amp;quot;&lt;br /&gt;
  { fix a&lt;br /&gt;
    have &amp;quot;P a ⟶ Q a&amp;quot; using assms by (rule allE)&lt;br /&gt;
    have &amp;quot;¬ (Q a)&amp;quot; using `∀x. ¬(Q x)` by (rule allE)&lt;br /&gt;
    have &amp;quot;¬(P a)&amp;quot; using `P a ⟶ Q a` `¬ (Q a)` by (rule mt)}&lt;br /&gt;
thus &amp;quot;∀x. ¬ (P x)&amp;quot; by (rule allI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-María Dolores Mateo&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
       ∀x. P x  ⟶ ¬(Q x) ⊢ ¬(∃x. P x ∧ Q x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
proof &lt;br /&gt;
assume &amp;quot;∃x. P x ∧ Q x&amp;quot; &lt;br /&gt;
  obtain a where &amp;quot;P a ∧ Q a&amp;quot; using `∃x. P x ∧ Q x` by (rule exE)&lt;br /&gt;
  have &amp;quot;P a&amp;quot; using `P a ∧ Q a` by (rule conjE)&lt;br /&gt;
  have &amp;quot;Q a&amp;quot; using `P a ∧ Q a` by (rule conjE)&lt;br /&gt;
  have &amp;quot;P a  ⟶ ¬(Q a)&amp;quot; using assms by (rule allE)&lt;br /&gt;
  have &amp;quot;¬(Q a)&amp;quot; using `P a  ⟶ ¬(Q a)` `P a` by (rule mp)&lt;br /&gt;
show &amp;quot;False&amp;quot; using `¬(Q a)` `Q a` by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-María Dolores Mateo&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
       ∀x y. P x y ⊢ ∀u v. P u v&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
&lt;br /&gt;
proof (rule allI)+&lt;br /&gt;
fix a b &lt;br /&gt;
have  &amp;quot;∀y. P a y&amp;quot; using assms by (rule allE)&lt;br /&gt;
thus &amp;quot; P a b&amp;quot; by (rule allE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--Jaime Alberto &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_6b: &lt;br /&gt;
  assumes 1: &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;
proof -&lt;br /&gt;
{fix u0 &lt;br /&gt;
 {fix v0&lt;br /&gt;
  have 2: &amp;quot;∀y. P u0 y&amp;quot; using 1  by (rule allE)&lt;br /&gt;
  have 3: &amp;quot;P u0 v0&amp;quot; using 2 by (rule allE)}&lt;br /&gt;
 then have 4: &amp;quot;∀v. P u0 v&amp;quot; by (rule allI)}&lt;br /&gt;
then show &amp;quot;∀u v. P u v&amp;quot; by (rule allI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
       ∃x y. P x y ⟹ ∃u v. P u v&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
&lt;br /&gt;
proof -&lt;br /&gt;
obtain a where &amp;quot;∃y. P a y&amp;quot; using assms by (rule exE)&lt;br /&gt;
then obtain b where &amp;quot;P a b&amp;quot; by (rule exE)&lt;br /&gt;
hence &amp;quot;∃v. P a v&amp;quot; by (rule exI)&lt;br /&gt;
thus &amp;quot;∃u v. P u v&amp;quot; by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
       ∃x. ∀y. P x y ⊢ ∀y. ∃x. P x y&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
&lt;br /&gt;
proof &lt;br /&gt;
obtain a where &amp;quot;∀y. P a y&amp;quot; using assms by (rule exE)&lt;br /&gt;
fix b &lt;br /&gt;
have &amp;quot;P a b&amp;quot; using `∀y. P a y` by (rule allE)&lt;br /&gt;
thus &amp;quot;∃x. P x b&amp;quot; by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
       ∃x. P a ⟶ Q x ⊢ P a ⟶ (∃x. Q x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
&lt;br /&gt;
proof&lt;br /&gt;
assume &amp;quot;P a&amp;quot;&lt;br /&gt;
obtain b where &amp;quot;P a ⟶ Q b&amp;quot; using assms by (rule exE)&lt;br /&gt;
have &amp;quot;Q b&amp;quot; using `P a ⟶ Q b` `P a` by (rule mp)&lt;br /&gt;
thus &amp;quot;∃x. Q x&amp;quot; by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
       P a ⟶ (∃x. Q x) ⊢ ∃x. P a ⟶ Q x &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_10a: &lt;br /&gt;
  fixes P Q :: &amp;quot;&amp;#039;b ⇒ bool&amp;quot; &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;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
       (∃x. P x) ⟶ Q a ⊢ ∀x. P x ⟶ Q a&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_11a: &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;
&lt;br /&gt;
proof &lt;br /&gt;
fix b&lt;br /&gt;
show &amp;quot;P b ⟶ Q a&amp;quot;  &lt;br /&gt;
proof&lt;br /&gt;
assume &amp;quot;P b&amp;quot;&lt;br /&gt;
hence &amp;quot;∃x. P x&amp;quot; by (rule exI)&lt;br /&gt;
show &amp;quot;Q a&amp;quot; using assms `∃x. P x` by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar&lt;br /&gt;
       ∀x. P x ⟶ Q a ⊢ ∃ x. P x ⟶ Q a&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_12a: &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;
&lt;br /&gt;
proof -&lt;br /&gt;
fix b&lt;br /&gt;
have &amp;quot;P b ⟶ Q a&amp;quot; using assms by (rule allE)&lt;br /&gt;
thus &amp;quot;∃x. P x ⟶ Q a&amp;quot; by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar&lt;br /&gt;
       (∀x. P x) ∨ (∀x. Q x) ⊢ ∀x. P x ∨ Q x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13a: &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;
&lt;br /&gt;
proof &lt;br /&gt;
fix a&lt;br /&gt;
show &amp;quot;P a ∨ Q a&amp;quot; using assms&lt;br /&gt;
proof&lt;br /&gt;
assume &amp;quot;∀x. P x&amp;quot;&lt;br /&gt;
hence &amp;quot;P a&amp;quot; by (rule allE)&lt;br /&gt;
thus &amp;quot;P a ∨ Q a&amp;quot; by (rule disjI1)&lt;br /&gt;
next&lt;br /&gt;
assume &amp;quot;∀x. Q x&amp;quot;&lt;br /&gt;
hence &amp;quot;Q a&amp;quot; by (rule allE)&lt;br /&gt;
thus &amp;quot;P a ∨ Q a&amp;quot; by (rule disjI2)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar&lt;br /&gt;
       ∃x. P x ∧ Q x ⊢ (∃x. P x) ∧ (∃x. Q x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_14a: &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;
&lt;br /&gt;
proof&lt;br /&gt;
obtain a where &amp;quot;P a ∧ Q a&amp;quot; using assms by (rule exE)&lt;br /&gt;
hence &amp;quot;P a&amp;quot; by (rule conjunct1)&lt;br /&gt;
thus &amp;quot;∃x. P x&amp;quot; by (rule exI)&lt;br /&gt;
have &amp;quot;Q a&amp;quot; using  `P a ∧ Q a` by (rule conjunct2)&lt;br /&gt;
thus &amp;quot;∃x. Q x&amp;quot; by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar&lt;br /&gt;
       ∀x y. P y ⟶ Q x ⊢ (∃y. P y) ⟶ (∀x. Q x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_15a: &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;
&lt;br /&gt;
proof&lt;br /&gt;
assume &amp;quot;∃y. P y&amp;quot;&lt;br /&gt;
then obtain b where &amp;quot;P b&amp;quot; by (rule exE)&lt;br /&gt;
{fix a &lt;br /&gt;
have &amp;quot;∀y. P y ⟶ Q a&amp;quot; using assms by (rule allE)&lt;br /&gt;
hence &amp;quot;P b ⟶ Q a&amp;quot; by (rule allE)&lt;br /&gt;
have &amp;quot;Q a&amp;quot; using `P b ⟶ Q a` `P b` by (rule mp)}&lt;br /&gt;
thus &amp;quot;∀x. Q x&amp;quot; by (rule allI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar&lt;br /&gt;
       ¬(∀x. ¬(P x)) ⊢ ∃x. P x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_16a: &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;
&lt;br /&gt;
proof-&lt;br /&gt;
fix x0&lt;br /&gt;
{assume 2: &amp;quot;¬(∃x. P x)&amp;quot; &lt;br /&gt;
 {fix x1&lt;br /&gt;
  {assume 3: &amp;quot;P x1&amp;quot;&lt;br /&gt;
   have 4: &amp;quot;∃x. P x&amp;quot; using 3 by (rule exI)&lt;br /&gt;
   have 5: &amp;quot;False&amp;quot; using 2 4 by (rule notE)}&lt;br /&gt;
 then have 6: &amp;quot;¬ P x1&amp;quot; by (rule notI)}&lt;br /&gt;
then have 7: &amp;quot;∀x. ¬ P x&amp;quot; by (rule allI)&lt;br /&gt;
have 8: &amp;quot;False&amp;quot; using 1 7 by (rule notE)}&lt;br /&gt;
then show &amp;quot;∃x. P x&amp;quot; by (rule ccontr)&lt;br /&gt;
qed &lt;br /&gt;
&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar&lt;br /&gt;
       ∀x. ¬(P x) ⊢ ¬(∃x. P x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_17a: &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;
&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)&amp;quot; using assms by (rule allE)&lt;br /&gt;
show False using `¬(P a)` `P a` by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar&lt;br /&gt;
       ∃x. P x ⊢ ¬(∀x. ¬(P x))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_18a: &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;
&lt;br /&gt;
proof &lt;br /&gt;
assume &amp;quot;∀x. ¬(P x)&amp;quot;&lt;br /&gt;
obtain a where &amp;quot;P a&amp;quot; using assms by (rule exE)&lt;br /&gt;
have &amp;quot;¬(P a)&amp;quot; using `∀x. ¬(P x)`  by (rule allE)&lt;br /&gt;
show False using `¬(P a)` `P a`by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar&lt;br /&gt;
       P a ⟶ (∀x. Q x) ⊢ ∀x. P a ⟶ Q x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19a: &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;
&lt;br /&gt;
proof &lt;br /&gt;
fix b&lt;br /&gt;
show &amp;quot;P a ⟶ Q b&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
assume &amp;quot;P a&amp;quot; &lt;br /&gt;
have &amp;quot;∀x. Q x&amp;quot; using assms `P a` by (rule mp)&lt;br /&gt;
thus &amp;quot;Q b&amp;quot; by (rule allE)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Demostrar&lt;br /&gt;
       {∀x y z. R x y ∧ R y z ⟶ R x z, &lt;br /&gt;
        ∀x. ¬(R x x)}&lt;br /&gt;
       ⊢ ∀x y. R x y ⟶ ¬(R y x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_20a: &lt;br /&gt;
  assumes &amp;quot;∀x y z. R x y ∧ R y z ⟶ R x z&amp;quot;&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;
&lt;br /&gt;
proof (rule allI)+&lt;br /&gt;
fix  a b &lt;br /&gt;
show &amp;quot;R a b ⟶ ¬(R b a )&amp;quot; &lt;br /&gt;
proof &lt;br /&gt;
assume 1:&amp;quot;R a b&amp;quot;&lt;br /&gt;
show&amp;quot;¬(R b a)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
assume 2:&amp;quot;R b a&amp;quot; &lt;br /&gt;
have 3:&amp;quot;R a b ∧ R b a&amp;quot; using 1 2..&lt;br /&gt;
have  &amp;quot;∀y z. R a y ∧ R y z ⟶ R a z&amp;quot; using assms(1)..&lt;br /&gt;
hence  &amp;quot;∀z. R a b ∧ R b z ⟶ R a z&amp;quot;..&lt;br /&gt;
hence 4:&amp;quot;R a b ∧ R b a ⟶ R a a&amp;quot;..&lt;br /&gt;
have 5:&amp;quot;R a a&amp;quot; using 4 3..&lt;br /&gt;
have 6:&amp;quot; ¬(R a a)&amp;quot; using assms(2)..&lt;br /&gt;
show False using 6 5..&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
--Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Demostrar&lt;br /&gt;
     {∀x. P x ∨ Q x, ∃x. ¬(Q x), ∀x. R x ⟶ ¬(P x)} ⊢ ∃x. ¬(R x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_21a:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ∨ Q x&amp;quot; &lt;br /&gt;
          &amp;quot;∃x. ¬(Q x)&amp;quot; &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;
&lt;br /&gt;
proof-&lt;br /&gt;
obtain a where &amp;quot;¬(Q a)&amp;quot; using assms(2) by (rule exE)&lt;br /&gt;
have &amp;quot;P a ∨ Q a&amp;quot; using assms(1) by (rule allE)&lt;br /&gt;
show &amp;quot;∃x. ¬(R x)&amp;quot; using `P a ∨ Q a`&lt;br /&gt;
proof&lt;br /&gt;
assume &amp;quot;P a&amp;quot;&lt;br /&gt;
hence 1:&amp;quot;¬¬(P a)&amp;quot; by (rule notnotI)&lt;br /&gt;
have 2:&amp;quot;R a ⟶ ¬(P a)&amp;quot; using assms(3) by (rule allE)&lt;br /&gt;
have &amp;quot;¬(R a)&amp;quot; using 2 1 by (rule mt)&lt;br /&gt;
thus &amp;quot;∃x. ¬(R x)&amp;quot; by (rule exI)&lt;br /&gt;
next&lt;br /&gt;
assume &amp;quot;Q a&amp;quot;&lt;br /&gt;
have False using `¬(Q a)` `Q a` by (rule notE) &lt;br /&gt;
thus &amp;quot;∃x. ¬(R x)&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Demostrar&lt;br /&gt;
     {∀x. P x ⟶ Q x ∨ R x, ¬(∃x. P x ∧ R x)} ⊢ ∀x. P x ⟶ Q x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_22a:&lt;br /&gt;
  assumes &amp;quot;∀x. P x ⟶ Q x ∨ R x&amp;quot; &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;
&lt;br /&gt;
proof&lt;br /&gt;
fix a &lt;br /&gt;
show &amp;quot;P a ⟶ Q a&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
assume 1:&amp;quot;P a&amp;quot;&lt;br /&gt;
have 2:&amp;quot;P a ⟶ Q a ∨ R a&amp;quot; using assms(1) by (rule allE)&lt;br /&gt;
have 3:&amp;quot;Q a ∨ R a&amp;quot; using  2 1 by (rule mp)&lt;br /&gt;
show &amp;quot;Q a&amp;quot; using 3 &lt;br /&gt;
proof&lt;br /&gt;
assume &amp;quot;Q a&amp;quot;&lt;br /&gt;
next &lt;br /&gt;
assume 4:&amp;quot;R a&amp;quot;&lt;br /&gt;
have &amp;quot;P a ∧ R a&amp;quot; using 1 4 by (rule conjI)&lt;br /&gt;
hence 5:&amp;quot;∃x. P x ∧ R x&amp;quot; by (rule exI)&lt;br /&gt;
have False using assms(2) 5 by (rule notE)&lt;br /&gt;
thus &amp;quot;Q a&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. Demostrar&lt;br /&gt;
     ∃x y. R x y ∨ R y x ⊢ ∃x y. R x y&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_23a:&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;
&lt;br /&gt;
proof -&lt;br /&gt;
obtain a where &amp;quot;∃y. R a y ∨ R y a &amp;quot; using assms by (rule exE)&lt;br /&gt;
then obtain b where 1:&amp;quot;R a b ∨ R b a&amp;quot; by (rule exE)&lt;br /&gt;
show &amp;quot;∃x y. R x y&amp;quot; using 1&lt;br /&gt;
proof&lt;br /&gt;
assume &amp;quot;R a b&amp;quot;&lt;br /&gt;
hence &amp;quot;∃y. R a y&amp;quot; by (rule exI)&lt;br /&gt;
thus &amp;quot;∃x y. R x y&amp;quot; by (rule exI)&lt;br /&gt;
next&lt;br /&gt;
assume &amp;quot;R b a&amp;quot;&lt;br /&gt;
hence &amp;quot;∃y. R b y&amp;quot; by (rule exI)&lt;br /&gt;
thus &amp;quot;∃x y. R x y&amp;quot; by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--Jaime Alberto &lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Demostrar&lt;br /&gt;
       (∃x. ∀y. P x y) ⟶ (∀y. ∃x. P x y)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_24a: &lt;br /&gt;
  &amp;quot;(∃x. ∀y. P x y) ⟶ (∀y. ∃x. P x y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof &lt;br /&gt;
assume &amp;quot;∃x. ∀y. P x y&amp;quot;&lt;br /&gt;
then obtain a where 1:&amp;quot;∀y. P a y&amp;quot; by (rule exE)&lt;br /&gt;
{fix b &lt;br /&gt;
have &amp;quot;P a b&amp;quot; using 1 by (rule allE)&lt;br /&gt;
hence &amp;quot;∃x. P x b&amp;quot; by (rule exI)}&lt;br /&gt;
thus &amp;quot;∀y. ∃x. P x y&amp;quot; by (rule allI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- Jaime Alberto &lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Demostrar&lt;br /&gt;
       (∀x. P x ⟶ Q) ⟷ ((∃x. P x) ⟶ Q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_25a: &lt;br /&gt;
  &amp;quot;(∀x. P x ⟶ Q) ⟷ ((∃x. P x) ⟶ Q)&amp;quot;&lt;br /&gt;
&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 3:&amp;quot;P a&amp;quot; by (rule exE)&lt;br /&gt;
have 4:&amp;quot;P a ⟶ Q&amp;quot;using 1 by (rule allE)&lt;br /&gt;
show &amp;quot;Q&amp;quot; using 4 3 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
next &lt;br /&gt;
assume 5:&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 6:&amp;quot;∃x. P x&amp;quot; by (rule exI)&lt;br /&gt;
show &amp;quot;Q&amp;quot; using 5 6 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--Jaime Alberto&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Demostrar&lt;br /&gt;
       ((∀x. P x) ∧ (∀x. Q x)) ⟷ (∀x. P x ∧ Q x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_26a: &lt;br /&gt;
  &amp;quot;((∀x. P x) ∧ (∀x. Q x)) ⟷ (∀x. P x ∧ Q x)&amp;quot;&lt;br /&gt;
  &amp;quot;((∀x. P x) ∧ (∀x. Q x)) ⟷ (∀x. P x ∧ Q x)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume 0: &amp;quot;(∀x. P x) ∧ (∀x. Q x)&amp;quot;&lt;br /&gt;
  have 1: &amp;quot;∀x. P x&amp;quot; using 0 by (rule conjunct1)&lt;br /&gt;
  have 2: &amp;quot;∀x. Q x&amp;quot; using 0 by (rule conjunct2)&lt;br /&gt;
  {fix a&lt;br /&gt;
    have 3: &amp;quot;P a&amp;quot; using 1 by (rule allE)&lt;br /&gt;
    have 4: &amp;quot;Q a&amp;quot; using 2 by (rule allE)&lt;br /&gt;
    have 5: &amp;quot;P a ∧ Q a&amp;quot; using 3 4 by (rule conjI)}&lt;br /&gt;
  thus &amp;quot;∀x. P x ∧ Q x&amp;quot; by (rule allI)&lt;br /&gt;
next&lt;br /&gt;
  assume 0: &amp;quot;∀x. P x ∧ Q x&amp;quot;&lt;br /&gt;
  {fix a&lt;br /&gt;
    have 1: &amp;quot;P a ∧ Q a&amp;quot; using 0 by (rule allE)&lt;br /&gt;
    have 2: &amp;quot;P a&amp;quot; using 1 by (rule conjunct1)}&lt;br /&gt;
  hence 3: &amp;quot;∀x. P x&amp;quot; by (rule allI)&lt;br /&gt;
 {fix a&lt;br /&gt;
    have 4: &amp;quot;P a ∧ Q a&amp;quot; using 0 by (rule allE)&lt;br /&gt;
    have 5: &amp;quot;Q a&amp;quot; using 4 by (rule conjunct2)}&lt;br /&gt;
  hence 6: &amp;quot;∀x. Q x&amp;quot; by (rule allI)&lt;br /&gt;
show &amp;quot;(∀x. P x) ∧ (∀x. Q x)&amp;quot; using 3 6 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Demostrar o refutar&lt;br /&gt;
       ((∀x. P x) ∨ (∀x. Q x)) ⟷ (∀x. P x ∨ Q x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_27a: &lt;br /&gt;
  &amp;quot;((∀x. P x) ∨ (∀x. Q x)) ⟷ (∀x. P x ∨ Q x)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume  &amp;quot;(∀x. P x) ∨ (∀x. Q x)&amp;quot;&lt;br /&gt;
    moreover&lt;br /&gt;
      {assume  &amp;quot;∀x. P x&amp;quot;&lt;br /&gt;
        {fix a&lt;br /&gt;
          have &amp;quot;P a&amp;quot; using `∀x. P x` by (rule allE)&lt;br /&gt;
          have  &amp;quot;P a ∨ Q a&amp;quot; using `P a` by (rule disjI1)}&lt;br /&gt;
        hence &amp;quot;∀x. P x ∨ Q x&amp;quot; by (rule allI)}&lt;br /&gt;
      moreover&lt;br /&gt;
        {assume  &amp;quot;∀x. Q x&amp;quot;&lt;br /&gt;
          {fix a&lt;br /&gt;
            have &amp;quot;Q a&amp;quot; using `∀x. Q x` by (rule allE)&lt;br /&gt;
            have  &amp;quot;P a ∨ Q a&amp;quot; using `Q a` by (rule disjI2)}&lt;br /&gt;
        hence &amp;quot;∀x. P x ∨ Q x&amp;quot; by (rule allI)}&lt;br /&gt;
      ultimately show &amp;quot;∀x. P x ∨ Q x&amp;quot; by (rule disjE)&lt;br /&gt;
next&lt;br /&gt;
  assume  &amp;quot;∀x. P x ∨ Q x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text{* &lt;br /&gt;
Consideremos los números naturales, ℕ. Sea P = &amp;quot;Ser par&amp;quot; y Q = &amp;quot;Ser impar&amp;quot;. Claramente &lt;br /&gt;
∀x, P x ∨ Q x, pero es falso  (∀x P x)∨(∀x Q x), pues no todo número es par&lt;br /&gt;
 y no todo número es impar. Por tanto la propiedad, en general, es falsa. Es decir, &lt;br /&gt;
((∀x. P x) ∨ (∀x. Q x)) ⟶ (∀x. P x ∨ Q x) pero en general&lt;br /&gt;
 (∀x. P x ∨ Q x) no implica ((∀x. P x) ∨ (∀x. Q x))&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Demostrar o refutar&lt;br /&gt;
       ((∃x. P x) ∨ (∃x. Q x)) ⟷ (∃x. P x ∨ Q x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_28a: &lt;br /&gt;
  &amp;quot;((∃x. P x) ∨ (∃x. Q x)) ⟷ (∃x. P x ∨ Q x)&amp;quot;&lt;br /&gt;
&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; using 1&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;
hence &amp;quot;P a ∨ Q a&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 a where &amp;quot;Q a&amp;quot; by (rule exE)&lt;br /&gt;
hence &amp;quot;P a ∨ Q a&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;
next&lt;br /&gt;
assume &amp;quot;∃x. P x ∨ Q x&amp;quot; &lt;br /&gt;
then obtain a where 2:&amp;quot;P a ∨ Q a&amp;quot; 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 &amp;quot;P a&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 a&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;
-- Jaime Alberto &lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Demostrar o refutar&lt;br /&gt;
       (∀x. ∃y. P x y) ⟶ (∃y. ∀x. P x y)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_29: &lt;br /&gt;
&lt;br /&gt;
  &amp;quot;(∀x. ∃y. P x y) ⟶ (∃y. ∀x. P x y)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
text{*&lt;br /&gt;
Propiedad en general falsa. Sean los números naturales, y la propiedad P x y = &amp;quot;x + y es par&amp;quot;. Claramente, para todo x, existe un y tal que P x y se verifica (baste tomar y = x). Pero, sea cual sea el y natural que tomemos, da igual el y que tomemos: no para todo elemento que le sumemos la suma será par. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. Demostrar o refutar&lt;br /&gt;
       (¬(∀x. P x)) ⟷ (∃x. ¬P x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_30a: &lt;br /&gt;
  &amp;quot;(¬(∀x. P x)) ⟷ (∃x. ¬P x)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
section {* Ejercicios sobre igualdad *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Demostrar o refutar&lt;br /&gt;
       P a ⟹ ∀x. x = a ⟶ P x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_31a:&lt;br /&gt;
  assumes &amp;quot;P a&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∀x. x = a ⟶ P x&amp;quot;&lt;br /&gt;
proof (rule allI)&lt;br /&gt;
  fix b&lt;br /&gt;
  show &amp;quot;b = a ⟶ P b&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;b = a&amp;quot;&lt;br /&gt;
  show &amp;quot;P b&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
  have 2: &amp;quot;a = b&amp;quot; using 1 by (rule sym)&lt;br /&gt;
  show 3: &amp;quot;P b&amp;quot; using 2 assms(1) by (rule subst)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. Demostrar o refutar&lt;br /&gt;
       ∃x y. R x y ∨ R y x; ¬(∃x. R x x)⟧ ⟹ ∃x y. x ≠ y&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_32a:&lt;br /&gt;
  fixes R :: &amp;quot;&amp;#039;c ⇒ &amp;#039;c ⇒ bool&amp;quot;&lt;br /&gt;
  assumes &amp;quot;∃x y. R x y ∨ R y x&amp;quot;&lt;br /&gt;
          &amp;quot;¬(∃x. R x x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃(x::&amp;#039;c) y. x ≠ y&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Demostrar o refutar&lt;br /&gt;
     {∀x. P a x x, &lt;br /&gt;
      ∀x y z. P x y z ⟶ P (f x) y (f z)} &lt;br /&gt;
     ⊢ P (f a) a (f a)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_33a:&lt;br /&gt;
  assumes &amp;quot;∀x. P a x x&amp;quot;&lt;br /&gt;
          &amp;quot;∀x y z. P x y z ⟶ P (f x) y (f z)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;P (f a) a (f a)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have 1: &amp;quot;P a a a&amp;quot; using assms(1) by (rule allE)&lt;br /&gt;
    have 2: &amp;quot;∀y z. P a y z ⟶ P (f a) y (f z)&amp;quot; using assms(2) by (rule allE)&lt;br /&gt;
    have 3: &amp;quot;∀z. P a a z ⟶ P (f a) a (f z)&amp;quot; using 2 by (rule allE)&lt;br /&gt;
    have 4: &amp;quot;P a a a ⟶ P (f a) a (f a)&amp;quot; using 3 by (rule allE)&lt;br /&gt;
    show 5: &amp;quot;P (f a) a (f a)&amp;quot; using 4 1 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Demostrar o refutar&lt;br /&gt;
     {∀x. P a x x, &lt;br /&gt;
      ∀x y z. P x y z ⟶ P (f x) y (f z)⟧&lt;br /&gt;
     ⊢ ∃z. P (f a) z (f (f a))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_34a:&lt;br /&gt;
  assumes &amp;quot;∀x. P a x x&amp;quot; &lt;br /&gt;
          &amp;quot;∀x y z. P x y z ⟶ P (f x) y (f z)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃z. P (f a) z (f (f a))&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
   have 1: &amp;quot;P a (f a) (f a)&amp;quot; using assms(1) by (rule allE)&lt;br /&gt;
   have 2: &amp;quot;∀y z. P a y z ⟶ P (f a) y (f z)&amp;quot; using assms(2) by (rule allE)&lt;br /&gt;
   have 3: &amp;quot;∀z. P a (f a) z ⟶ P (f a) (f a) (f z)&amp;quot; using 2 by (rule allE)&lt;br /&gt;
   have 4: &amp;quot;P a (f a) (f a) ⟶ P (f a) (f a) (f (f a))&amp;quot; using 3 by (rule allE)&lt;br /&gt;
   have 5: &amp;quot;P (f a) (f a) (f (f a))&amp;quot; using 4 1 by (rule mp)&lt;br /&gt;
   show 6: &amp;quot;∃z. P (f a) z (f (f a))&amp;quot; using 5 by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Demostrar o refutar&lt;br /&gt;
     {∀y. Q a y, &lt;br /&gt;
      ∀x y. Q x y ⟶ Q (s x) (s y)} &lt;br /&gt;
     ⊢ ∃z. Qa z ∧ Q z (s (s a))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_35a:&lt;br /&gt;
  assumes &amp;quot;∀y. Q a y&amp;quot; &lt;br /&gt;
          &amp;quot;∀x y. Q x y ⟶ Q (s x) (s y)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;∃z. Q a z ∧ Q z (s (s a))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have 1: &amp;quot;Q a (s a)&amp;quot; using assms(1) by (rule allE)&lt;br /&gt;
    have 2: &amp;quot;∀y. Q a y ⟶ Q (s a) (s y)&amp;quot; using assms(2) by (rule allE)&lt;br /&gt;
    have 3: &amp;quot;Q a (s a) ⟶ Q (s a) (s (s a))&amp;quot; using 2 by (rule allE)&lt;br /&gt;
    have 4: &amp;quot;Q (s a) (s (s a))&amp;quot; using 3 1 by (rule mp)&lt;br /&gt;
    have 5: &amp;quot;Q a (s a) ∧ Q (s a) (s (s a))&amp;quot; using 1 4 by (rule conjI)&lt;br /&gt;
    show 6: &amp;quot;∃z. Q a z ∧ Q z (s (s a))&amp;quot; using 5 by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Demostrar o refutar&lt;br /&gt;
     {x = f x, odd (f x)} ⊢ odd x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_36a:&lt;br /&gt;
  assumes &amp;quot;x = f x&amp;quot; and&lt;br /&gt;
          &amp;quot;odd (f x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;odd x&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  show &amp;quot;odd x&amp;quot; using assms(1) assms(2) by (rule ssubst)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Demostrar o refutar&lt;br /&gt;
     {x = f x, triple (f x) (f x) x} ⊢ triple x x x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_37a:&lt;br /&gt;
  assumes &amp;quot;x = f x&amp;quot; and&lt;br /&gt;
          &amp;quot;triple (f x) (f x) x&amp;quot;&lt;br /&gt;
  shows &amp;quot;triple x x x&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   show &amp;quot;triple x x x&amp;quot; using assms(1) assms(2) by (rule ssubst)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_3&amp;diff=181</id>
		<title>Relación 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_3&amp;diff=181"/>
		<updated>2015-03-14T20:06:47Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R3: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R3&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es demostrar cada uno de los ejercicios&lt;br /&gt;
  usando sólo las reglas básicas de deducción natural de la lógica&lt;br /&gt;
  proposicional (sin usar el método auto).&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación. *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Implicaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
       p ⟶ q, p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
      show &amp;quot;q&amp;quot; using assms(1) assms(2) by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ q, q ⟶ r, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof - have 1: &amp;quot;q&amp;quot; using assms(1) assms(3) by (rule mp)&lt;br /&gt;
         show &amp;quot;r&amp;quot; using assms(2) 1 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r), p ⟶ q, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
          &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have 1:&amp;quot;q⟶r&amp;quot; using assms(1) assms(3) by (rule mp)&lt;br /&gt;
    have 2:&amp;quot;q&amp;quot; using assms(2) assms(3) by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
qed  &lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     p ⟶ q, q ⟶ r ⊢ p ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proof -&lt;br /&gt;
        {assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
          have 2: &amp;quot;q&amp;quot; using assms(1) 1 by (rule mp)&lt;br /&gt;
          have 3: &amp;quot;r&amp;quot; using assms(2) 2 by (rule mp)}&lt;br /&gt;
          then show &amp;quot;p⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
 {assume 1: &amp;quot;q&amp;quot;&lt;br /&gt;
   {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 3:&amp;quot;q⟶r&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
     have &amp;quot;r&amp;quot; using 3 1 by (rule mp)}&lt;br /&gt;
   hence  &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
 then show &amp;quot;q⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed  &lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  {assume 1: &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
    {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 3: &amp;quot;q⟶r&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
      have 4: &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;r&amp;quot; using 3 4 by (rule mp)}&lt;br /&gt;
    hence &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p⟶q)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ⊢ q ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
proof-&lt;br /&gt;
{assume 1: &amp;quot;q&amp;quot;&lt;br /&gt;
        note `p`}&lt;br /&gt;
      thus &amp;quot;q⟶p&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ⊢ p ⟶ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_8:&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;
        {assume &amp;quot;q&amp;quot;&lt;br /&gt;
          note `p`}&lt;br /&gt;
        hence &amp;quot;q⟶p&amp;quot; by (rule impI)}&lt;br /&gt;
      thus &amp;quot;p⟶q⟶p&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     p ⟶ q ⊢ (q ⟶ r) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(q ⟶ r) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  {assume 1: &amp;quot;q⟶r&amp;quot;&lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 3: &amp;quot;q&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
      have 4: &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    hence &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;(q⟶r)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ (r ⟶ s)) ⊢ r ⟶ (q ⟶ (p ⟶ s))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ (r ⟶ s))&amp;quot; &lt;br /&gt;
  shows   &amp;quot;r ⟶ (q ⟶ (p ⟶ s))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 1: &amp;quot;r&amp;quot; &lt;br /&gt;
    {assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
      {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 4: &amp;quot;q ⟶ (r ⟶ s)&amp;quot; using assms(1) 3 by (rule mp)&lt;br /&gt;
        have 5: &amp;quot;r⟶s&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
        have 6: &amp;quot;s&amp;quot; using 5 1 by (rule mp)}&lt;br /&gt;
      hence &amp;quot;p⟶s&amp;quot; by (rule impI)}&lt;br /&gt;
    hence &amp;quot;q⟶(p⟶s)&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;r⟶(q⟶(p⟶s))&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
&lt;br /&gt;
proof- &lt;br /&gt;
  {assume 1: &amp;quot;p⟶(q⟶r)&amp;quot;&lt;br /&gt;
    { assume 2: &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
      {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 4: &amp;quot;q⟶r&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;
        have 6: &amp;quot;r&amp;quot; using 4 5 by (rule mp)}&lt;br /&gt;
      hence &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
    hence &amp;quot;(p⟶q)⟶(p⟶r)&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  {assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
    {assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
     {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
       note `q`}&lt;br /&gt;
     hence 4:&amp;quot;p⟶q&amp;quot; by (rule impI)&lt;br /&gt;
     have 5: &amp;quot;r&amp;quot; using assms(1) 4 by (rule mp)}&lt;br /&gt;
    hence &amp;quot;q⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;p⟶(q⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar&lt;br /&gt;
     p, q ⊢  p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
          &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof-&lt;br /&gt;
  show &amp;quot;p∧q&amp;quot; using assms(1) assms(2) by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof-&lt;br /&gt;
  show &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar&lt;br /&gt;
     p ∧ q ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof-&lt;br /&gt;
  show &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar&lt;br /&gt;
     p ∧ (q ∧ r) ⊢ (p ∧ q) ∧ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
  have 2: &amp;quot;q ∧ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
  have 3: &amp;quot;q&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;r&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;p ∧ q&amp;quot; using 1 3 by (rule conjI)&lt;br /&gt;
  show &amp;quot;(p ∧ q) ∧ r&amp;quot; using 5 4 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar&lt;br /&gt;
     (p ∧ q) ∧ r ⊢ p ∧ (q ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  have 1: &amp;quot;p ∧ q&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
  have 2: &amp;quot;r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;q ∧ r&amp;quot; using 4 2 by (rule conjI)&lt;br /&gt;
  show &amp;quot;p ∧(q ∧ r)&amp;quot; using 3 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof- &lt;br /&gt;
  {assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)}&lt;br /&gt;
  thus &amp;quot;p⟶q&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  {assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;p⟶q&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
    have 3: &amp;quot;p⟶r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 2 1 by (rule mp)&lt;br /&gt;
    have 5: &amp;quot;r&amp;quot; using 3 1 by (rule mp)&lt;br /&gt;
    have 6: &amp;quot;q ∧ r&amp;quot; using 4 5 by (rule conjI)}&lt;br /&gt;
  thus &amp;quot;p⟶(q ∧ r)&amp;quot; by(rule impI)  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Demostrar&lt;br /&gt;
     p ⟶ q ∧ r ⊢ (p ⟶ q) ∧ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q ∧ r&amp;quot; using  assms(1) 1 by (rule mp)&lt;br /&gt;
     have 3: &amp;quot;q&amp;quot; using 2 by (rule conjunct1)}&lt;br /&gt;
   thus &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
next &lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q ∧ r&amp;quot; using assms(1) 1 by (rule mp)&lt;br /&gt;
     have 3: &amp;quot;r&amp;quot; using 2 by (rule conjunct2)}&lt;br /&gt;
   thus &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ p ∧ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   { assume 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 ⟶ r&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
     have 4: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
     have 5: &amp;quot;r&amp;quot; using 3 4 by (rule mp)}&lt;br /&gt;
   thus &amp;quot;(p ∧ q) ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Demostrar&lt;br /&gt;
     p ∧ q ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes &amp;quot;p ∧ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     {assume 2: &amp;quot;q&amp;quot; &lt;br /&gt;
      have 3: &amp;quot;p ∧ q&amp;quot; using 1 2 by (rule conjI)&lt;br /&gt;
      have 4: &amp;quot;r&amp;quot; using assms(1) 3 by (rule mp)}&lt;br /&gt;
     then have 5: &amp;quot;q ⟶ r&amp;quot; by (rule impI)}&lt;br /&gt;
   thus &amp;quot;p ⟶ (q ⟶ r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ∧ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   { assume 1: &amp;quot;p ∧q&amp;quot;&lt;br /&gt;
     {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 3: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)}&lt;br /&gt;
     hence 4: &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
     have 5: &amp;quot;r&amp;quot; using assms(1) 4 by (rule mp)}&lt;br /&gt;
   thus &amp;quot;p ∧ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_24:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
    { assume 1: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
      have 3: &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
      have 4: &amp;quot;q ⟶ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      have 5: &amp;quot;r&amp;quot; using 4 3 by (rule mp)}&lt;br /&gt;
    thus &amp;quot;(p ⟶ q) ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Disyunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Demostrar&lt;br /&gt;
     p ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_25:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   show &amp;quot;p ∨ q&amp;quot; using assms(1) by (rule disjI1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Demostrar&lt;br /&gt;
     q ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_26:&lt;br /&gt;
  assumes &amp;quot;q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   show &amp;quot;p ∨ q&amp;quot; using assms(1) by (rule disjI2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Demostrar&lt;br /&gt;
     p ∨ q ⊢ q ∨ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_27:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   have &amp;quot;p ∨ q&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q ∨ p&amp;quot; using 1 by (rule disjI2)}&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;q&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q ∨ p&amp;quot; using 1 by (rule disjI1)}&lt;br /&gt;
   ultimately show &amp;quot;q ∨ p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_28:&lt;br /&gt;
  assumes &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    { assume 1: &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 3: &amp;quot;p ∨ r&amp;quot; using 2 by (rule disjI1)}&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
        have 5: &amp;quot;r&amp;quot; using assms(1) 4 by (rule mp)&lt;br /&gt;
        have 6: &amp;quot;p ∨ r&amp;quot; using 5 by (rule disjI2)}&lt;br /&gt;
       ultimately have &amp;quot;p ∨r&amp;quot;  by (rule disjE)}&lt;br /&gt;
    thus &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Demostrar&lt;br /&gt;
     p ∨ p ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_29:&lt;br /&gt;
  assumes &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have &amp;quot;p ∨ p&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p&amp;quot; using 1 by this}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;p&amp;quot; using 3 by this}&lt;br /&gt;
ultimately show &amp;quot;p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. Demostrar&lt;br /&gt;
     p ⊢ p ∨ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_30:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
    show &amp;quot;p ∨ p&amp;quot; using assms(1) by (rule disjI1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Demostrar&lt;br /&gt;
     p ∨ (q ∨ r) ⊢ (p ∨ q) ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_31:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∨ r&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
   have &amp;quot;p ∨ (q ∨ r)&amp;quot; using assms(1) by this&lt;br /&gt;
moreover &lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
       have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
       have 3: &amp;quot;(p ∨ q) ∨ r&amp;quot; using 2 by (rule disjI1)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 4: &amp;quot;q ∨ r&amp;quot;&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 5: &amp;quot;q&amp;quot;&lt;br /&gt;
        have 6: &amp;quot;p ∨ q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
        have 7: &amp;quot;(p ∨ q) ∨ r&amp;quot; using 6 by (rule disjI1)}&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 8: &amp;quot;r&amp;quot;&lt;br /&gt;
        have 9: &amp;quot;(p ∨ q) ∨ r&amp;quot; using 8 by (rule disjI2)}&lt;br /&gt;
      ultimately have &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjE)}&lt;br /&gt;
  ultimately show &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. Demostrar&lt;br /&gt;
     (p ∨ q) ∨ r ⊢ p ∨ (q ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_32:&lt;br /&gt;
  assumes &amp;quot;(p ∨ q) ∨ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   have &amp;quot;(p ∨ q) ∨ r&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
     moreover&lt;br /&gt;
     { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
       have 3: &amp;quot;p ∨ (q ∨ r)&amp;quot; using 2 by (rule disjI1)}&lt;br /&gt;
     moreover&lt;br /&gt;
     { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
       have 5: &amp;quot;q ∨ r&amp;quot; using 4 by (rule disjI1)&lt;br /&gt;
       have 6: &amp;quot;p ∨ (q ∨ r)&amp;quot; using 5 by (rule disjI2)}&lt;br /&gt;
     ultimately have &amp;quot;p ∨ (q ∨ r)&amp;quot; by (rule disjE)}&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 7: &amp;quot;r&amp;quot;&lt;br /&gt;
     have 8: &amp;quot;q ∨ r&amp;quot; using 7 by (rule disjI2)&lt;br /&gt;
     have 9: &amp;quot;p ∨ (q ∨ r)&amp;quot; using 8 by (rule disjI2)}&lt;br /&gt;
ultimately show &amp;quot;p ∨ (q ∨ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Demostrar&lt;br /&gt;
     p ∧ (q ∨ r) ⊢ (p ∧ q) ∨ (p ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_33:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have 1: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
    have 2: &amp;quot;q ∨ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;p ∧ q&amp;quot; using 1 3 by (rule conjI)&lt;br /&gt;
      have 5: &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; using 4 by (rule disjI1)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 6: &amp;quot;r&amp;quot;&lt;br /&gt;
      have 7: &amp;quot;p ∧ r&amp;quot; using 1 6 by (rule conjI)&lt;br /&gt;
      have 8: &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; using 7 by (rule disjI2)}&lt;br /&gt;
ultimately show &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Demostrar&lt;br /&gt;
     (p ∧ q) ∨ (p ∧ r) ⊢ p ∧ (q ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_34:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∨ r)&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
   have &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
     have 3: &amp;quot;q ∨ r&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
     have 4: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
     have 5: &amp;quot;p ∧ (q ∨ r)&amp;quot; using 4 3 by (rule conjI)}&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 6: &amp;quot;p ∧ r&amp;quot;&lt;br /&gt;
     have 7: &amp;quot;r&amp;quot; using 6 by (rule conjunct2)&lt;br /&gt;
     have 8: &amp;quot;q ∨ r&amp;quot; using 7 by (rule disjI2)&lt;br /&gt;
     have 9: &amp;quot;p&amp;quot; using 6 by (rule conjunct1)&lt;br /&gt;
     have 10: &amp;quot;p ∧ (q ∨ r)&amp;quot; using 9 8 by (rule conjI)}&lt;br /&gt;
ultimately show &amp;quot;p ∧ (q ∨ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Demostrar&lt;br /&gt;
     p ∨ (q ∧ r) ⊢ (p ∨ q) ∧ (p ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_35:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have &amp;quot;p ∨ (q ∧ r)&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
     have 3: &amp;quot;p ∨ r&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
     have 4: &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot; using 2 3 by (rule conjI)}&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 5: &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
     have 6: &amp;quot;q&amp;quot; using 5 by (rule conjunct1)&lt;br /&gt;
     have 7: &amp;quot;p ∨ q&amp;quot; using 6 by (rule disjI2)&lt;br /&gt;
     have 8: &amp;quot;r&amp;quot; using 5 by (rule conjunct2)&lt;br /&gt;
     have 9: &amp;quot;p ∨ r&amp;quot; using 8 by (rule disjI2)&lt;br /&gt;
     have 10: &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot; using 7 9 by (rule conjI)}&lt;br /&gt;
ultimately show &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Demostrar&lt;br /&gt;
     (p ∨ q) ∧ (p ∨ r) ⊢ p ∨ (q ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_36:&lt;br /&gt;
  assumes &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
     have &amp;quot;(p ∨ q)&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p ∨ (q ∧ r)&amp;quot; using 1 by (rule disjI1)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 3: &amp;quot;q&amp;quot; &lt;br /&gt;
      have 4: &amp;quot;p ∨ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 5: &amp;quot;p&amp;quot; &lt;br /&gt;
        have 6: &amp;quot;p ∨ (q ∧ r)&amp;quot; using 5 by (rule disjI1)}&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 7: &amp;quot;r&amp;quot;&lt;br /&gt;
        have 8: &amp;quot;q ∧ r&amp;quot; using 3 7 by (rule conjI)&lt;br /&gt;
        have 9: &amp;quot;p ∨ (q ∧ r)&amp;quot; using 8 by (rule disjI2)}&lt;br /&gt;
      ultimately have &amp;quot;p ∨ (q ∧ r)&amp;quot; by (rule disjE)}&lt;br /&gt;
ultimately show &amp;quot;p ∨ (q ∧ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_37:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    { assume 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 3: &amp;quot;p ⟶ r&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
        have 4: &amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 5: &amp;quot;q&amp;quot;&lt;br /&gt;
        have 6: &amp;quot;q ⟶ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
        have 7: &amp;quot;r&amp;quot; using 6 5 by (rule mp)}&lt;br /&gt;
      ultimately have &amp;quot;r&amp;quot; by (rule disjE)}&lt;br /&gt;
     thus &amp;quot;(p ∨ q) ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 38. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_38:&lt;br /&gt;
  assumes &amp;quot;p ∨ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
      have 3: &amp;quot;r&amp;quot; using assms(1) 2 by (rule mp)}&lt;br /&gt;
    thus &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
next&lt;br /&gt;
    { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 5: &amp;quot;p ∨ q&amp;quot; using 4 by (rule disjI2)&lt;br /&gt;
      have 6: &amp;quot;r&amp;quot; using assms(1) 5 by (rule mp)}&lt;br /&gt;
    thus &amp;quot;q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Negaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 39. Demostrar&lt;br /&gt;
     p ⊢ ¬¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_39:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    show &amp;quot;¬¬p&amp;quot; using assms(1) by (rule notnotI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 40. Demostrar&lt;br /&gt;
     ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_40:&lt;br /&gt;
  assumes &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;False&amp;quot; using assms(1) 1 by (rule notE)&lt;br /&gt;
      have 3: &amp;quot;q&amp;quot; using 2 by (rule FalseE)}&lt;br /&gt;
    thus &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 41. Demostrar&lt;br /&gt;
     p ⟶ q ⊢ ¬q ⟶ ¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_41:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    {assume 1: &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬p&amp;quot; using assms(1) 1 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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 42. Demostrar&lt;br /&gt;
     p∨q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_42:&lt;br /&gt;
  assumes &amp;quot;p∨q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
    have &amp;quot;p ∨ q&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p&amp;quot; using 1 by this}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;False&amp;quot; using assms(2) 3 by (rule notE)&lt;br /&gt;
      have 5: &amp;quot;p&amp;quot; using 4 by (rule FalseE)}&lt;br /&gt;
ultimately show &amp;quot;p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 42. Demostrar&lt;br /&gt;
     p ∨ q, ¬p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_43:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have &amp;quot;p ∨ q&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;False&amp;quot; using assms(2) 1 by (rule notE)&lt;br /&gt;
      have 3: &amp;quot;q&amp;quot; using 2 by (rule FalseE)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 4: &amp;quot;q&amp;quot; &lt;br /&gt;
      have 5: &amp;quot;q&amp;quot; using 4 by this}&lt;br /&gt;
ultimately show &amp;quot;q&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 40. Demostrar&lt;br /&gt;
     p ∨ q ⊢ ¬(¬p ∧ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_44:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
    assume 1: &amp;quot;¬¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬p ∧ ¬q&amp;quot; using 1 by (rule notnotD)&lt;br /&gt;
    have 3: &amp;quot;p ∨ q&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 4: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 5: &amp;quot;¬p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
      have 6: &amp;quot;False&amp;quot; using 5 4 by (rule notE)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 7: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 8: &amp;quot;¬q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
      have 9: &amp;quot;False&amp;quot; using 8 7 by (rule notE)}&lt;br /&gt;
ultimately show &amp;quot;False&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 45. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_45:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
    assume 1: &amp;quot;¬¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;¬p ∨ ¬q&amp;quot; using 1 by (rule notnotD)&lt;br /&gt;
      moreover&lt;br /&gt;
       {assume 3: &amp;quot;¬p&amp;quot;&lt;br /&gt;
        have 4: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
        have 5: &amp;quot;False&amp;quot; using 3 4 by (rule notE)}&lt;br /&gt;
      moreover &lt;br /&gt;
       { assume 6: &amp;quot;¬q&amp;quot;&lt;br /&gt;
         have 7: &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
         have 8: &amp;quot;False&amp;quot; using 6 7 by (rule notE)}&lt;br /&gt;
      ultimately show &amp;quot;False&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 46. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_46:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
    {assume 1: &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;p&amp;quot; using 1 by (rule notnotD)&lt;br /&gt;
    have 3: &amp;quot;p ∨ q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
    have 4: &amp;quot;False&amp;quot; using assms(1) 3 by (rule notE)}&lt;br /&gt;
    thus 5: &amp;quot;¬p&amp;quot; by (rule ccontr)&lt;br /&gt;
next&lt;br /&gt;
   { assume 6: &amp;quot;¬¬q&amp;quot;&lt;br /&gt;
     have 7: &amp;quot;q&amp;quot; using 6 by (rule notnotD)&lt;br /&gt;
     have 8: &amp;quot;p ∨ q&amp;quot; using 7 by (rule disjI2)&lt;br /&gt;
     have 9: &amp;quot;False&amp;quot; using assms(1) 8 by (rule notE)}&lt;br /&gt;
   thus 10: &amp;quot;¬q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 47. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_47:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
    assume 1: &amp;quot;¬¬(p ∨ q)&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule notnotD)&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;¬p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
      have 5: &amp;quot;False&amp;quot; using 4 3 by (rule notE)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 6: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 7: &amp;quot;¬q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      have 8: &amp;quot;False&amp;quot; using 7 6 by (rule notE)}&lt;br /&gt;
ultimately show &amp;quot;False&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 48. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_48:&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
     assume 1: &amp;quot;¬¬(p ∧ q)&amp;quot; &lt;br /&gt;
     have 2: &amp;quot;(p ∧ q)&amp;quot; using 1 by (rule notnotD)&lt;br /&gt;
     have 3: &amp;quot;¬p ∨ ¬q&amp;quot; using assms(1) by this&lt;br /&gt;
     moreover&lt;br /&gt;
       { assume 4: &amp;quot;¬p&amp;quot;&lt;br /&gt;
         have 5: &amp;quot;p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
         have 6: &amp;quot;False&amp;quot; using 4 5 by (rule notE)}&lt;br /&gt;
     moreover &lt;br /&gt;
       { assume 7: &amp;quot;¬q&amp;quot; &lt;br /&gt;
         have 8: &amp;quot;q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
         have 9: &amp;quot;False&amp;quot; using 7 8 by (rule notE)}&lt;br /&gt;
    ultimately show &amp;quot;False&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 49. Demostrar&lt;br /&gt;
     ⊢ ¬(p ∧ ¬p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_49:&lt;br /&gt;
  &amp;quot;¬(p ∧ ¬p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    {assume 1: &amp;quot;¬¬(p ∧ ¬p)&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;p ∧ ¬p&amp;quot; using 1 by (rule notnotD)&lt;br /&gt;
    have 3: &amp;quot;p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
    have 4: &amp;quot;¬p&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
    have 5: &amp;quot;False&amp;quot; using 4 3 by (rule notE)}&lt;br /&gt;
    thus &amp;quot;¬(p ∧ ¬p)&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 50. Demostrar&lt;br /&gt;
     p ∧ ¬p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_50:&lt;br /&gt;
  assumes &amp;quot;p ∧ ¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
     have 1: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
     have 2: &amp;quot;¬p&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
     have 3: &amp;quot;False&amp;quot; using 2 1 by (rule notE)&lt;br /&gt;
     show 4: &amp;quot;q&amp;quot; using 3 by (rule FalseE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 51. Demostrar&lt;br /&gt;
     ¬¬p ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_51:&lt;br /&gt;
  assumes &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    show &amp;quot;p&amp;quot; using assms(1) by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 52. Demostrar&lt;br /&gt;
     ⊢ p ∨ ¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_52:&lt;br /&gt;
  &amp;quot;p ∨ ¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have 1: &amp;quot;¬p ∨ p&amp;quot; by (rule excluded_middle)&lt;br /&gt;
    moreover&lt;br /&gt;
      { assume 2: &amp;quot;¬p&amp;quot;&lt;br /&gt;
        have 3: &amp;quot;p ∨ ¬p&amp;quot; using 2 by (rule disjI2)}&lt;br /&gt;
    moreover&lt;br /&gt;
      { assume 4: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 5: &amp;quot;p ∨ ¬p&amp;quot; using 4 by (rule disjI1)}&lt;br /&gt;
    ultimately show &amp;quot;p ∨ ¬p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 53. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_53:&lt;br /&gt;
  &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
     {assume 1: &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
       { assume 3: &amp;quot;¬p&amp;quot;&lt;br /&gt;
         have 4: &amp;quot;¬(p ⟶ q)&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
          { assume 5: &amp;quot;p&amp;quot;&lt;br /&gt;
            have 6: &amp;quot;False&amp;quot; using 3 5 by (rule notE)&lt;br /&gt;
            have 7: &amp;quot;q&amp;quot; using 6 by (rule FalseE)}&lt;br /&gt;
         hence 8: &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
         have 9: &amp;quot;False&amp;quot; using 4 8 by (rule notE)}&lt;br /&gt;
         hence 10: &amp;quot;p&amp;quot;  by (rule ccontr)}&lt;br /&gt;
     thus 11: &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 54. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_54:&lt;br /&gt;
  assumes &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
     assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
   have 2: &amp;quot;¬q ∨ q&amp;quot; by (rule excluded_middle)&lt;br /&gt;
   moreover&lt;br /&gt;
    { assume 3: &amp;quot;¬q&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;¬p&amp;quot; using assms(1) 3 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;False&amp;quot; using 4 1 by (rule notE)&lt;br /&gt;
      have 6: &amp;quot;q&amp;quot; using 5 by (rule FalseE)}&lt;br /&gt;
   moreover&lt;br /&gt;
    { assume 7: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 8: &amp;quot;q&amp;quot; using 7 by this}&lt;br /&gt;
   ultimately show  &amp;quot;q&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 55. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_55:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
     have 1: &amp;quot;¬p ∨ p&amp;quot; by (rule excluded_middle)&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 2: &amp;quot;¬p&amp;quot;&lt;br /&gt;
      have 3: &amp;quot;¬q ∨ q&amp;quot; by (rule excluded_middle)&lt;br /&gt;
      moreover&lt;br /&gt;
        { assume 4: &amp;quot;¬q&amp;quot;&lt;br /&gt;
          have 5: &amp;quot;¬p ∧ ¬ q&amp;quot; using 2 4 by (rule conjI)&lt;br /&gt;
          have 6: &amp;quot;False&amp;quot; using assms(1) 5 by (rule notE)&lt;br /&gt;
          have 7: &amp;quot;p ∨ q&amp;quot; using 6 by (rule FalseE)}&lt;br /&gt;
      moreover&lt;br /&gt;
        { assume 8: &amp;quot;q&amp;quot;&lt;br /&gt;
          have 9: &amp;quot;p ∨ q&amp;quot; using 8 by (rule disjI2)}&lt;br /&gt;
      ultimately have &amp;quot;p ∨ q&amp;quot; by (rule disjE)}&lt;br /&gt;
    moreover&lt;br /&gt;
      { assume 10: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 11: &amp;quot;p ∨ q&amp;quot; using 10 by (rule disjI1)}&lt;br /&gt;
   ultimately show &amp;quot;p ∨ q&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 56. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_56:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∨ ¬q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
    { assume 1: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬p ∨ ¬q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
    have 3: &amp;quot;False&amp;quot; using assms(1) 2 by (rule notE)}&lt;br /&gt;
    thus 4: &amp;quot;p&amp;quot; by (rule ccontr)&lt;br /&gt;
next &lt;br /&gt;
    { assume 5: &amp;quot;¬q&amp;quot;&lt;br /&gt;
      have 6: &amp;quot;¬p ∨ ¬q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
      have 7: &amp;quot;False&amp;quot; using assms(1) 6 by (rule notE)}&lt;br /&gt;
    thus 8: &amp;quot;q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 57. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_57:&lt;br /&gt;
  assumes &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
     have 1: &amp;quot;¬p ∨ p&amp;quot; by (rule excluded_middle)&lt;br /&gt;
     moreover&lt;br /&gt;
      { assume 2: &amp;quot;¬p&amp;quot;&lt;br /&gt;
        have 3: &amp;quot;¬p ∨ ¬q&amp;quot; using 2 by (rule disjI1)}&lt;br /&gt;
     moreover&lt;br /&gt;
      { assume 4: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 5: &amp;quot;¬q ∨ q&amp;quot; by (rule excluded_middle)&lt;br /&gt;
        moreover&lt;br /&gt;
         { assume 6: &amp;quot;¬q&amp;quot;&lt;br /&gt;
           have 7: &amp;quot;¬p ∨ ¬q&amp;quot; using 6 by (rule disjI2)}&lt;br /&gt;
         moreover&lt;br /&gt;
          { assume 8: &amp;quot;q&amp;quot;&lt;br /&gt;
            have 9: &amp;quot;p ∧ q&amp;quot; using 4 8 by (rule conjI)&lt;br /&gt;
            have 10: &amp;quot;False&amp;quot; using assms(1) 9 by (rule notE)&lt;br /&gt;
            have 11: &amp;quot;¬p ∨ ¬q&amp;quot; using 10 by (rule FalseE)}&lt;br /&gt;
         ultimately have &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjE)}&lt;br /&gt;
     ultimately show &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 58. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_58:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have &amp;quot;¬p ∨ p&amp;quot; by (rule excluded_middle)&lt;br /&gt;
    moreover&lt;br /&gt;
     { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
       { assume &amp;quot;p&amp;quot;&lt;br /&gt;
          with `¬p` have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
          hence &amp;quot;q&amp;quot; by (rule FalseE)}&lt;br /&gt;
       hence &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
       hence &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; by (rule disjI1)}&lt;br /&gt;
    moreover&lt;br /&gt;
     { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
        { assume &amp;quot;q&amp;quot;&lt;br /&gt;
           have &amp;quot;p&amp;quot;  using 1 by this}&lt;br /&gt;
        hence &amp;quot;q ⟶ p&amp;quot; by (rule impI)&lt;br /&gt;
        hence &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; by (rule disjI2)}&lt;br /&gt;
   ultimately show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_3&amp;diff=177</id>
		<title>Relación 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_3&amp;diff=177"/>
		<updated>2015-03-08T15:53:14Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R3: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R3&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es demostrar cada uno de los ejercicios&lt;br /&gt;
  usando sólo las reglas básicas de deducción natural de la lógica&lt;br /&gt;
  proposicional (sin usar el método auto).&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación. *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Implicaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
       p ⟶ q, p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
      show &amp;quot;q&amp;quot; using assms(1) assms(2) by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ q, q ⟶ r, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof - have 1: &amp;quot;q&amp;quot; using assms(1) assms(3) by (rule mp)&lt;br /&gt;
         show &amp;quot;r&amp;quot; using assms(2) 1 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r), p ⟶ q, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
          &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have 1:&amp;quot;q⟶r&amp;quot; using assms(1) assms(3) by (rule mp)&lt;br /&gt;
    have 2:&amp;quot;q&amp;quot; using assms(2) assms(3) by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
qed  &lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     p ⟶ q, q ⟶ r ⊢ p ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proof -&lt;br /&gt;
        {assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
          have 2: &amp;quot;q&amp;quot; using assms(1) 1 by (rule mp)&lt;br /&gt;
          have 3: &amp;quot;r&amp;quot; using assms(2) 2 by (rule mp)}&lt;br /&gt;
          then show &amp;quot;p⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
 {assume 1: &amp;quot;q&amp;quot;&lt;br /&gt;
   {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 3:&amp;quot;q⟶r&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
     have &amp;quot;r&amp;quot; using 3 1 by (rule mp)}&lt;br /&gt;
   hence  &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
 then show &amp;quot;q⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed  &lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  {assume 1: &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
    {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 3: &amp;quot;q⟶r&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
      have 4: &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;r&amp;quot; using 3 4 by (rule mp)}&lt;br /&gt;
    hence &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p⟶q)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ⊢ q ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
proof-&lt;br /&gt;
{assume 1: &amp;quot;q&amp;quot;&lt;br /&gt;
        note `p`}&lt;br /&gt;
      thus &amp;quot;q⟶p&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ⊢ p ⟶ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_8:&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;
        {assume &amp;quot;q&amp;quot;&lt;br /&gt;
          note `p`}&lt;br /&gt;
        hence &amp;quot;q⟶p&amp;quot; by (rule impI)}&lt;br /&gt;
      thus &amp;quot;p⟶q⟶p&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     p ⟶ q ⊢ (q ⟶ r) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(q ⟶ r) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  {assume 1: &amp;quot;q⟶r&amp;quot;&lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 3: &amp;quot;q&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
      have 4: &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    hence &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;(q⟶r)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ (r ⟶ s)) ⊢ r ⟶ (q ⟶ (p ⟶ s))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ (r ⟶ s))&amp;quot; &lt;br /&gt;
  shows   &amp;quot;r ⟶ (q ⟶ (p ⟶ s))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 1: &amp;quot;r&amp;quot; &lt;br /&gt;
    {assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
      {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 4: &amp;quot;q ⟶ (r ⟶ s)&amp;quot; using assms(1) 3 by (rule mp)&lt;br /&gt;
        have 5: &amp;quot;r⟶s&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
        have 6: &amp;quot;s&amp;quot; using 5 1 by (rule mp)}&lt;br /&gt;
      hence &amp;quot;p⟶s&amp;quot; by (rule impI)}&lt;br /&gt;
    hence &amp;quot;q⟶(p⟶s)&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;r⟶(q⟶(p⟶s))&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
&lt;br /&gt;
proof- &lt;br /&gt;
  {assume 1: &amp;quot;p⟶(q⟶r)&amp;quot;&lt;br /&gt;
    { assume 2: &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
      {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 4: &amp;quot;q⟶r&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;
        have 6: &amp;quot;r&amp;quot; using 4 5 by (rule mp)}&lt;br /&gt;
      hence &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
    hence &amp;quot;(p⟶q)⟶(p⟶r)&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  {assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
    {assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
     {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
       note `q`}&lt;br /&gt;
     hence 4:&amp;quot;p⟶q&amp;quot; by (rule impI)&lt;br /&gt;
     have 5: &amp;quot;r&amp;quot; using assms(1) 4 by (rule mp)}&lt;br /&gt;
    hence &amp;quot;q⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;p⟶(q⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar&lt;br /&gt;
     p, q ⊢  p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
          &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof-&lt;br /&gt;
  show &amp;quot;p∧q&amp;quot; using assms(1) assms(2) by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof-&lt;br /&gt;
  show &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar&lt;br /&gt;
     p ∧ q ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof-&lt;br /&gt;
  show &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar&lt;br /&gt;
     p ∧ (q ∧ r) ⊢ (p ∧ q) ∧ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
  have 2: &amp;quot;q ∧ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
  have 3: &amp;quot;q&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;r&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;p ∧ q&amp;quot; using 1 3 by (rule conjI)&lt;br /&gt;
  show &amp;quot;(p ∧ q) ∧ r&amp;quot; using 5 4 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar&lt;br /&gt;
     (p ∧ q) ∧ r ⊢ p ∧ (q ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  have 1: &amp;quot;p ∧ q&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
  have 2: &amp;quot;r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;q ∧ r&amp;quot; using 4 2 by (rule conjI)&lt;br /&gt;
  show &amp;quot;p ∧(q ∧ r)&amp;quot; using 3 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof- &lt;br /&gt;
  {assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)}&lt;br /&gt;
  thus &amp;quot;p⟶q&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  {assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;p⟶q&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
    have 3: &amp;quot;p⟶r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 2 1 by (rule mp)&lt;br /&gt;
    have 5: &amp;quot;r&amp;quot; using 3 1 by (rule mp)&lt;br /&gt;
    have 6: &amp;quot;q ∧ r&amp;quot; using 4 5 by (rule conjI)}&lt;br /&gt;
  thus &amp;quot;p⟶(q ∧ r)&amp;quot; by(rule impI)  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Demostrar&lt;br /&gt;
     p ⟶ q ∧ r ⊢ (p ⟶ q) ∧ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q ∧ r&amp;quot; using  assms(1) 1 by (rule mp)&lt;br /&gt;
     have 3: &amp;quot;q&amp;quot; using 2 by (rule conjunct1)}&lt;br /&gt;
   thus &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
next &lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q ∧ r&amp;quot; using assms(1) 1 by (rule mp)&lt;br /&gt;
     have 3: &amp;quot;r&amp;quot; using 2 by (rule conjunct2)}&lt;br /&gt;
   thus &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ p ∧ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   { assume 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 ⟶ r&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
     have 4: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
     have 5: &amp;quot;r&amp;quot; using 3 4 by (rule mp)}&lt;br /&gt;
   thus &amp;quot;(p ∧ q) ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Demostrar&lt;br /&gt;
     p ∧ q ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes &amp;quot;p ∧ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     {assume 2: &amp;quot;q&amp;quot; &lt;br /&gt;
      have 3: &amp;quot;p ∧ q&amp;quot; using 1 2 by (rule conjI)&lt;br /&gt;
      have 4: &amp;quot;r&amp;quot; using assms(1) 3 by (rule mp)}&lt;br /&gt;
     then have 5: &amp;quot;q ⟶ r&amp;quot; by (rule impI)}&lt;br /&gt;
   thus &amp;quot;p ⟶ (q ⟶ r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ∧ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   { assume 1: &amp;quot;p ∧q&amp;quot;&lt;br /&gt;
     {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 3: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)}&lt;br /&gt;
     hence 4: &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
     have 5: &amp;quot;r&amp;quot; using assms(1) 4 by (rule mp)}&lt;br /&gt;
   thus &amp;quot;p ∧ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_24:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
    { assume 1: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
      have 3: &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
      have 4: &amp;quot;q ⟶ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      have 5: &amp;quot;r&amp;quot; using 4 3 by (rule mp)}&lt;br /&gt;
    thus &amp;quot;(p ⟶ q) ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Disyunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Demostrar&lt;br /&gt;
     p ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_25:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   show &amp;quot;p ∨ q&amp;quot; using assms(1) by (rule disjI1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Demostrar&lt;br /&gt;
     q ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_26:&lt;br /&gt;
  assumes &amp;quot;q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   show &amp;quot;p ∨ q&amp;quot; using assms(1) by (rule disjI2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Demostrar&lt;br /&gt;
     p ∨ q ⊢ q ∨ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_27:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   have &amp;quot;p ∨ q&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q ∨ p&amp;quot; using 1 by (rule disjI2)}&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;q&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q ∨ p&amp;quot; using 1 by (rule disjI1)}&lt;br /&gt;
   ultimately show &amp;quot;q ∨ p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_28:&lt;br /&gt;
  assumes &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    { assume 1: &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 3: &amp;quot;p ∨ r&amp;quot; using 2 by (rule disjI1)}&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
        have 5: &amp;quot;r&amp;quot; using assms(1) 4 by (rule mp)&lt;br /&gt;
        have 6: &amp;quot;p ∨ r&amp;quot; using 5 by (rule disjI2)}&lt;br /&gt;
       ultimately have &amp;quot;p ∨r&amp;quot;  by (rule disjE)}&lt;br /&gt;
    thus &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Demostrar&lt;br /&gt;
     p ∨ p ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_29:&lt;br /&gt;
  assumes &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have &amp;quot;p ∨ p&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p&amp;quot; using 1 by this}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;p&amp;quot; using 3 by this}&lt;br /&gt;
ultimately show &amp;quot;p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. Demostrar&lt;br /&gt;
     p ⊢ p ∨ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_30:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
    show &amp;quot;p ∨ p&amp;quot; using assms(1) by (rule disjI1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Demostrar&lt;br /&gt;
     p ∨ (q ∨ r) ⊢ (p ∨ q) ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_31:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∨ r&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
   have &amp;quot;p ∨ (q ∨ r)&amp;quot; using assms(1) by this&lt;br /&gt;
moreover &lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
       have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
       have 3: &amp;quot;(p ∨ q) ∨ r&amp;quot; using 2 by (rule disjI1)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 4: &amp;quot;q ∨ r&amp;quot;&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 5: &amp;quot;q&amp;quot;&lt;br /&gt;
        have 6: &amp;quot;p ∨ q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
        have 7: &amp;quot;(p ∨ q) ∨ r&amp;quot; using 6 by (rule disjI1)}&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 8: &amp;quot;r&amp;quot;&lt;br /&gt;
        have 9: &amp;quot;(p ∨ q) ∨ r&amp;quot; using 8 by (rule disjI2)}&lt;br /&gt;
      ultimately have &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjE)}&lt;br /&gt;
  ultimately show &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. Demostrar&lt;br /&gt;
     (p ∨ q) ∨ r ⊢ p ∨ (q ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_32:&lt;br /&gt;
  assumes &amp;quot;(p ∨ q) ∨ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   have &amp;quot;(p ∨ q) ∨ r&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
     moreover&lt;br /&gt;
     { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
       have 3: &amp;quot;p ∨ (q ∨ r)&amp;quot; using 2 by (rule disjI1)}&lt;br /&gt;
     moreover&lt;br /&gt;
     { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
       have 5: &amp;quot;q ∨ r&amp;quot; using 4 by (rule disjI1)&lt;br /&gt;
       have 6: &amp;quot;p ∨ (q ∨ r)&amp;quot; using 5 by (rule disjI2)}&lt;br /&gt;
     ultimately have &amp;quot;p ∨ (q ∨ r)&amp;quot; by (rule disjE)}&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 7: &amp;quot;r&amp;quot;&lt;br /&gt;
     have 8: &amp;quot;q ∨ r&amp;quot; using 7 by (rule disjI2)&lt;br /&gt;
     have 9: &amp;quot;p ∨ (q ∨ r)&amp;quot; using 8 by (rule disjI2)}&lt;br /&gt;
ultimately show &amp;quot;p ∨ (q ∨ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Demostrar&lt;br /&gt;
     p ∧ (q ∨ r) ⊢ (p ∧ q) ∨ (p ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_33:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have 1: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
    have 2: &amp;quot;q ∨ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;p ∧ q&amp;quot; using 1 3 by (rule conjI)&lt;br /&gt;
      have 5: &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; using 4 by (rule disjI1)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 6: &amp;quot;r&amp;quot;&lt;br /&gt;
      have 7: &amp;quot;p ∧ r&amp;quot; using 1 6 by (rule conjI)&lt;br /&gt;
      have 8: &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; using 7 by (rule disjI2)}&lt;br /&gt;
ultimately show &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Demostrar&lt;br /&gt;
     (p ∧ q) ∨ (p ∧ r) ⊢ p ∧ (q ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_34:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∨ r)&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
   have &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
     have 3: &amp;quot;q ∨ r&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
     have 4: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
     have 5: &amp;quot;p ∧ (q ∨ r)&amp;quot; using 4 3 by (rule conjI)}&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 6: &amp;quot;p ∧ r&amp;quot;&lt;br /&gt;
     have 7: &amp;quot;r&amp;quot; using 6 by (rule conjunct2)&lt;br /&gt;
     have 8: &amp;quot;q ∨ r&amp;quot; using 7 by (rule disjI2)&lt;br /&gt;
     have 9: &amp;quot;p&amp;quot; using 6 by (rule conjunct1)&lt;br /&gt;
     have 10: &amp;quot;p ∧ (q ∨ r)&amp;quot; using 9 8 by (rule conjI)}&lt;br /&gt;
ultimately show &amp;quot;p ∧ (q ∨ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Demostrar&lt;br /&gt;
     p ∨ (q ∧ r) ⊢ (p ∨ q) ∧ (p ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_35:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have &amp;quot;p ∨ (q ∧ r)&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
     have 3: &amp;quot;p ∨ r&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
     have 4: &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot; using 2 3 by (rule conjI)}&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 5: &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
     have 6: &amp;quot;q&amp;quot; using 5 by (rule conjunct1)&lt;br /&gt;
     have 7: &amp;quot;p ∨ q&amp;quot; using 6 by (rule disjI2)&lt;br /&gt;
     have 8: &amp;quot;r&amp;quot; using 5 by (rule conjunct2)&lt;br /&gt;
     have 9: &amp;quot;p ∨ r&amp;quot; using 8 by (rule disjI2)&lt;br /&gt;
     have 10: &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot; using 7 9 by (rule conjI)}&lt;br /&gt;
ultimately show &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Demostrar&lt;br /&gt;
     (p ∨ q) ∧ (p ∨ r) ⊢ p ∨ (q ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_36:&lt;br /&gt;
  assumes &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
     have &amp;quot;(p ∨ q)&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p ∨ (q ∧ r)&amp;quot; using 1 by (rule disjI1)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 3: &amp;quot;q&amp;quot; &lt;br /&gt;
      have 4: &amp;quot;p ∨ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 5: &amp;quot;p&amp;quot; &lt;br /&gt;
        have 6: &amp;quot;p ∨ (q ∧ r)&amp;quot; using 5 by (rule disjI1)}&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 7: &amp;quot;r&amp;quot;&lt;br /&gt;
        have 8: &amp;quot;q ∧ r&amp;quot; using 3 7 by (rule conjI)&lt;br /&gt;
        have 9: &amp;quot;p ∨ (q ∧ r)&amp;quot; using 8 by (rule disjI2)}&lt;br /&gt;
      ultimately have &amp;quot;p ∨ (q ∧ r)&amp;quot; by (rule disjE)}&lt;br /&gt;
ultimately show &amp;quot;p ∨ (q ∧ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_37:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    { assume 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 3: &amp;quot;p ⟶ r&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
        have 4: &amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 5: &amp;quot;q&amp;quot;&lt;br /&gt;
        have 6: &amp;quot;q ⟶ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
        have 7: &amp;quot;r&amp;quot; using 6 5 by (rule mp)}&lt;br /&gt;
      ultimately have &amp;quot;r&amp;quot; by (rule disjE)}&lt;br /&gt;
     thus &amp;quot;(p ∨ q) ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 38. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_38:&lt;br /&gt;
  assumes &amp;quot;p ∨ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
      have 3: &amp;quot;r&amp;quot; using assms(1) 2 by (rule mp)}&lt;br /&gt;
    thus &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
next&lt;br /&gt;
    { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 5: &amp;quot;p ∨ q&amp;quot; using 4 by (rule disjI2)&lt;br /&gt;
      have 6: &amp;quot;r&amp;quot; using assms(1) 5 by (rule mp)}&lt;br /&gt;
    thus &amp;quot;q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Negaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 39. Demostrar&lt;br /&gt;
     p ⊢ ¬¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_39:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    show &amp;quot;¬¬p&amp;quot; using assms(1) by (rule notnotI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 40. Demostrar&lt;br /&gt;
     ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_40:&lt;br /&gt;
  assumes &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;False&amp;quot; using assms(1) 1 by (rule notE)&lt;br /&gt;
      have 3: &amp;quot;q&amp;quot; using 2 by (rule FalseE)}&lt;br /&gt;
    thus &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 41. Demostrar&lt;br /&gt;
     p ⟶ q ⊢ ¬q ⟶ ¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_41:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    {assume 1: &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬p&amp;quot; using assms(1) 1 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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 42. Demostrar&lt;br /&gt;
     p∨q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_42:&lt;br /&gt;
  assumes &amp;quot;p∨q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
    have &amp;quot;p ∨ q&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p&amp;quot; using 1 by this}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;False&amp;quot; using assms(2) 3 by (rule notE)&lt;br /&gt;
      have 5: &amp;quot;p&amp;quot; using 4 by (rule FalseE)}&lt;br /&gt;
ultimately show &amp;quot;p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 42. Demostrar&lt;br /&gt;
     p ∨ q, ¬p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_43:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have &amp;quot;p ∨ q&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;False&amp;quot; using assms(2) 1 by (rule notE)&lt;br /&gt;
      have 3: &amp;quot;q&amp;quot; using 2 by (rule FalseE)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 4: &amp;quot;q&amp;quot; &lt;br /&gt;
      have 5: &amp;quot;q&amp;quot; using 4 by this}&lt;br /&gt;
ultimately show &amp;quot;q&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 40. Demostrar&lt;br /&gt;
     p ∨ q ⊢ ¬(¬p ∧ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_44:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
    assume 1: &amp;quot;¬¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬p ∧ ¬q&amp;quot; using 1 by (rule notnotD)&lt;br /&gt;
    have 3: &amp;quot;p ∨ q&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 4: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 5: &amp;quot;¬p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
      have 6: &amp;quot;False&amp;quot; using 5 4 by (rule notE)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 7: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 8: &amp;quot;¬q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
      have 9: &amp;quot;False&amp;quot; using 8 7 by (rule notE)}&lt;br /&gt;
ultimately show &amp;quot;False&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 45. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_45:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
    assume 1: &amp;quot;¬¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;¬p ∨ ¬q&amp;quot; using 1 by (rule notnotD)&lt;br /&gt;
      moreover&lt;br /&gt;
       {assume 3: &amp;quot;¬p&amp;quot;&lt;br /&gt;
        have 4: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
        have 5: &amp;quot;False&amp;quot; using 3 4 by (rule notE)}&lt;br /&gt;
      moreover &lt;br /&gt;
       { assume 6: &amp;quot;¬q&amp;quot;&lt;br /&gt;
         have 7: &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
         have 8: &amp;quot;False&amp;quot; using 6 7 by (rule notE)}&lt;br /&gt;
      ultimately show &amp;quot;False&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 46. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_46:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
    {assume 1: &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;p&amp;quot; using 1 by (rule notnotD)&lt;br /&gt;
    have 3: &amp;quot;p ∨ q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
    have 4: &amp;quot;False&amp;quot; using assms(1) 3 by (rule notE)}&lt;br /&gt;
    thus 5: &amp;quot;¬p&amp;quot; by (rule ccontr)&lt;br /&gt;
next&lt;br /&gt;
   { assume 6: &amp;quot;¬¬q&amp;quot;&lt;br /&gt;
     have 7: &amp;quot;q&amp;quot; using 6 by (rule notnotD)&lt;br /&gt;
     have 8: &amp;quot;p ∨ q&amp;quot; using 7 by (rule disjI2)&lt;br /&gt;
     have 9: &amp;quot;False&amp;quot; using assms(1) 8 by (rule notE)}&lt;br /&gt;
   thus 10: &amp;quot;¬q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 47. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_47:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
    assume 1: &amp;quot;¬¬(p ∨ q)&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule notnotD)&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;¬p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
      have 5: &amp;quot;False&amp;quot; using 4 3 by (rule notE)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 6: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 7: &amp;quot;¬q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      have 8: &amp;quot;False&amp;quot; using 7 6 by (rule notE)}&lt;br /&gt;
ultimately show &amp;quot;False&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 48. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_48:&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
     assume 1: &amp;quot;¬¬(p ∧ q)&amp;quot; &lt;br /&gt;
     have 2: &amp;quot;(p ∧ q)&amp;quot; using 1 by (rule notnotD)&lt;br /&gt;
     have 3: &amp;quot;¬p ∨ ¬q&amp;quot; using assms(1) by this&lt;br /&gt;
     moreover&lt;br /&gt;
       { assume 4: &amp;quot;¬p&amp;quot;&lt;br /&gt;
         have 5: &amp;quot;p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
         have 6: &amp;quot;False&amp;quot; using 4 5 by (rule notE)}&lt;br /&gt;
     moreover &lt;br /&gt;
       { assume 7: &amp;quot;¬q&amp;quot; &lt;br /&gt;
         have 8: &amp;quot;q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
         have 9: &amp;quot;False&amp;quot; using 7 8 by (rule notE)}&lt;br /&gt;
    ultimately show &amp;quot;False&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 49. Demostrar&lt;br /&gt;
     ⊢ ¬(p ∧ ¬p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_49:&lt;br /&gt;
  &amp;quot;¬(p ∧ ¬p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    {assume 1: &amp;quot;¬¬(p ∧ ¬p)&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;p ∧ ¬p&amp;quot; using 1 by (rule notnotD)&lt;br /&gt;
    have 3: &amp;quot;p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
    have 4: &amp;quot;¬p&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
    have 5: &amp;quot;False&amp;quot; using 4 3 by (rule notE)}&lt;br /&gt;
    thus &amp;quot;¬(p ∧ ¬p)&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 50. Demostrar&lt;br /&gt;
     p ∧ ¬p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_50:&lt;br /&gt;
  assumes &amp;quot;p ∧ ¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
     have 1: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
     have 2: &amp;quot;¬p&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
     have 3: &amp;quot;False&amp;quot; using 2 1 by (rule notE)&lt;br /&gt;
     show 4: &amp;quot;q&amp;quot; using 3 by (rule FalseE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 51. Demostrar&lt;br /&gt;
     ¬¬p ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_51:&lt;br /&gt;
  assumes &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    show &amp;quot;p&amp;quot; using assms(1) by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 52. Demostrar&lt;br /&gt;
     ⊢ p ∨ ¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_52:&lt;br /&gt;
  &amp;quot;p ∨ ¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have 1: &amp;quot;¬p ∨ p&amp;quot; by (rule excluded_middle)&lt;br /&gt;
    moreover&lt;br /&gt;
      { assume 2: &amp;quot;¬p&amp;quot;&lt;br /&gt;
        have 3: &amp;quot;p ∨ ¬p&amp;quot; using 2 by (rule disjI2)}&lt;br /&gt;
    moreover&lt;br /&gt;
      { assume 4: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 5: &amp;quot;p ∨ ¬p&amp;quot; using 4 by (rule disjI1)}&lt;br /&gt;
    ultimately show &amp;quot;p ∨ ¬p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 53. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_53:&lt;br /&gt;
  &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
     {assume 1: &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
       { assume 3: &amp;quot;¬p&amp;quot;&lt;br /&gt;
         have 4: &amp;quot;¬(p ⟶ q)&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
          { assume 5: &amp;quot;p&amp;quot;&lt;br /&gt;
            have 6: &amp;quot;False&amp;quot; using 3 5 by (rule notE)&lt;br /&gt;
            have 7: &amp;quot;q&amp;quot; using 6 by (rule FalseE)}&lt;br /&gt;
         hence 8: &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
         have 9: &amp;quot;False&amp;quot; using 4 8 by (rule notE)}&lt;br /&gt;
         hence 10: &amp;quot;p&amp;quot;  by (rule ccontr)}&lt;br /&gt;
     thus 11: &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 54. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_54:&lt;br /&gt;
  assumes &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
     assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
   have 2: &amp;quot;¬q ∨ q&amp;quot; by (rule excluded_middle)&lt;br /&gt;
   moreover&lt;br /&gt;
    { assume 3: &amp;quot;¬q&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;¬p&amp;quot; using assms(1) 3 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;False&amp;quot; using 4 1 by (rule notE)&lt;br /&gt;
      have 6: &amp;quot;q&amp;quot; using 5 by (rule FalseE)}&lt;br /&gt;
   moreover&lt;br /&gt;
    { assume 7: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 8: &amp;quot;q&amp;quot; using 7 by this}&lt;br /&gt;
   ultimately show  &amp;quot;q&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 55. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_55:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
     have 1: &amp;quot;¬p ∨ p&amp;quot; by (rule excluded_middle)&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 2: &amp;quot;¬p&amp;quot;&lt;br /&gt;
      have 3: &amp;quot;¬q ∨ q&amp;quot; by (rule excluded_middle)&lt;br /&gt;
      moreover&lt;br /&gt;
        { assume 4: &amp;quot;¬q&amp;quot;&lt;br /&gt;
          have 5: &amp;quot;¬p ∧ ¬ q&amp;quot; using 2 4 by (rule conjI)&lt;br /&gt;
          have 6: &amp;quot;False&amp;quot; using assms(1) 5 by (rule notE)&lt;br /&gt;
          have 7: &amp;quot;p ∨ q&amp;quot; using 6 by (rule FalseE)}&lt;br /&gt;
      moreover&lt;br /&gt;
        { assume 8: &amp;quot;q&amp;quot;&lt;br /&gt;
          have 9: &amp;quot;p ∨ q&amp;quot; using 8 by (rule disjI2)}&lt;br /&gt;
      ultimately have &amp;quot;p ∨ q&amp;quot; by (rule disjE)}&lt;br /&gt;
    moreover&lt;br /&gt;
      { assume 10: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 11: &amp;quot;p ∨ q&amp;quot; using 10 by (rule disjI1)}&lt;br /&gt;
   ultimately show &amp;quot;p ∨ q&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 56. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_56:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∨ ¬q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
    { assume 1: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬p ∨ ¬q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
    have 3: &amp;quot;False&amp;quot; using assms(1) 2 by (rule notE)}&lt;br /&gt;
    thus 4: &amp;quot;p&amp;quot; by (rule ccontr)&lt;br /&gt;
next &lt;br /&gt;
    { assume 5: &amp;quot;¬q&amp;quot;&lt;br /&gt;
      have 6: &amp;quot;¬p ∨ ¬q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
      have 7: &amp;quot;False&amp;quot; using assms(1) 6 by (rule notE)}&lt;br /&gt;
    thus 8: &amp;quot;q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 57. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_57:&lt;br /&gt;
  assumes &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
     have 1: &amp;quot;¬p ∨ p&amp;quot; by (rule excluded_middle)&lt;br /&gt;
     moreover&lt;br /&gt;
      { assume 2: &amp;quot;¬p&amp;quot;&lt;br /&gt;
        have 3: &amp;quot;¬p ∨ ¬q&amp;quot; using 2 by (rule disjI1)}&lt;br /&gt;
     moreover&lt;br /&gt;
      { assume 4: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 5: &amp;quot;¬q ∨ q&amp;quot; by (rule excluded_middle)&lt;br /&gt;
        moreover&lt;br /&gt;
         { assume 6: &amp;quot;¬q&amp;quot;&lt;br /&gt;
           have 7: &amp;quot;¬p ∨ ¬q&amp;quot; using 6 by (rule disjI2)}&lt;br /&gt;
         moreover&lt;br /&gt;
          { assume 8: &amp;quot;q&amp;quot;&lt;br /&gt;
            have 9: &amp;quot;p ∧ q&amp;quot; using 4 8 by (rule conjI)&lt;br /&gt;
            have 10: &amp;quot;False&amp;quot; using assms(1) 9 by (rule notE)&lt;br /&gt;
            have 11: &amp;quot;¬p ∨ ¬q&amp;quot; using 10 by (rule FalseE)}&lt;br /&gt;
         ultimately have &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjE)}&lt;br /&gt;
     ultimately show &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 58. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_3&amp;diff=172</id>
		<title>Relación 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_3&amp;diff=172"/>
		<updated>2015-03-07T19:05:15Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R3: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R3&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es demostrar cada uno de los ejercicios&lt;br /&gt;
  usando sólo las reglas básicas de deducción natural de la lógica&lt;br /&gt;
  proposicional (sin usar el método auto).&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación. *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Implicaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
       p ⟶ q, p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
      show &amp;quot;q&amp;quot; using assms(1) assms(2) by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ q, q ⟶ r, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof - have 1: &amp;quot;q&amp;quot; using assms(1) assms(3) by (rule mp)&lt;br /&gt;
         show &amp;quot;r&amp;quot; using assms(2) 1 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r), p ⟶ q, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
          &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have 1:&amp;quot;q⟶r&amp;quot; using assms(1) assms(3) by (rule mp)&lt;br /&gt;
    have 2:&amp;quot;q&amp;quot; using assms(2) assms(3) by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
qed  &lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     p ⟶ q, q ⟶ r ⊢ p ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proof -&lt;br /&gt;
        {assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
          have 2: &amp;quot;q&amp;quot; using assms(1) 1 by (rule mp)&lt;br /&gt;
          have 3: &amp;quot;r&amp;quot; using assms(2) 2 by (rule mp)}&lt;br /&gt;
          then show &amp;quot;p⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
 {assume 1: &amp;quot;q&amp;quot;&lt;br /&gt;
   {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 3:&amp;quot;q⟶r&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
     have &amp;quot;r&amp;quot; using 3 1 by (rule mp)}&lt;br /&gt;
   hence  &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
 then show &amp;quot;q⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed  &lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  {assume 1: &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
    {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 3: &amp;quot;q⟶r&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
      have 4: &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;r&amp;quot; using 3 4 by (rule mp)}&lt;br /&gt;
    hence &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p⟶q)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ⊢ q ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
proof-&lt;br /&gt;
{assume 1: &amp;quot;q&amp;quot;&lt;br /&gt;
        note `p`}&lt;br /&gt;
      thus &amp;quot;q⟶p&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ⊢ p ⟶ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_8:&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;
        {assume &amp;quot;q&amp;quot;&lt;br /&gt;
          note `p`}&lt;br /&gt;
        hence &amp;quot;q⟶p&amp;quot; by (rule impI)}&lt;br /&gt;
      thus &amp;quot;p⟶q⟶p&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     p ⟶ q ⊢ (q ⟶ r) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(q ⟶ r) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  {assume 1: &amp;quot;q⟶r&amp;quot;&lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 3: &amp;quot;q&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
      have 4: &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    hence &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;(q⟶r)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ (r ⟶ s)) ⊢ r ⟶ (q ⟶ (p ⟶ s))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ (r ⟶ s))&amp;quot; &lt;br /&gt;
  shows   &amp;quot;r ⟶ (q ⟶ (p ⟶ s))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 1: &amp;quot;r&amp;quot; &lt;br /&gt;
    {assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
      {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 4: &amp;quot;q ⟶ (r ⟶ s)&amp;quot; using assms(1) 3 by (rule mp)&lt;br /&gt;
        have 5: &amp;quot;r⟶s&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
        have 6: &amp;quot;s&amp;quot; using 5 1 by (rule mp)}&lt;br /&gt;
      hence &amp;quot;p⟶s&amp;quot; by (rule impI)}&lt;br /&gt;
    hence &amp;quot;q⟶(p⟶s)&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;r⟶(q⟶(p⟶s))&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
&lt;br /&gt;
proof- &lt;br /&gt;
  {assume 1: &amp;quot;p⟶(q⟶r)&amp;quot;&lt;br /&gt;
    { assume 2: &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
      {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 4: &amp;quot;q⟶r&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;
        have 6: &amp;quot;r&amp;quot; using 4 5 by (rule mp)}&lt;br /&gt;
      hence &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
    hence &amp;quot;(p⟶q)⟶(p⟶r)&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  {assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
    {assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
     {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
       note `q`}&lt;br /&gt;
     hence 4:&amp;quot;p⟶q&amp;quot; by (rule impI)&lt;br /&gt;
     have 5: &amp;quot;r&amp;quot; using assms(1) 4 by (rule mp)}&lt;br /&gt;
    hence &amp;quot;q⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;p⟶(q⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar&lt;br /&gt;
     p, q ⊢  p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
          &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof-&lt;br /&gt;
  show &amp;quot;p∧q&amp;quot; using assms(1) assms(2) by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof-&lt;br /&gt;
  show &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar&lt;br /&gt;
     p ∧ q ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof-&lt;br /&gt;
  show &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar&lt;br /&gt;
     p ∧ (q ∧ r) ⊢ (p ∧ q) ∧ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
  have 2: &amp;quot;q ∧ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
  have 3: &amp;quot;q&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;r&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;p ∧ q&amp;quot; using 1 3 by (rule conjI)&lt;br /&gt;
  show &amp;quot;(p ∧ q) ∧ r&amp;quot; using 5 4 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar&lt;br /&gt;
     (p ∧ q) ∧ r ⊢ p ∧ (q ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  have 1: &amp;quot;p ∧ q&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
  have 2: &amp;quot;r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;q ∧ r&amp;quot; using 4 2 by (rule conjI)&lt;br /&gt;
  show &amp;quot;p ∧(q ∧ r)&amp;quot; using 3 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof- &lt;br /&gt;
  {assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)}&lt;br /&gt;
  thus &amp;quot;p⟶q&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  {assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;p⟶q&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
    have 3: &amp;quot;p⟶r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 2 1 by (rule mp)&lt;br /&gt;
    have 5: &amp;quot;r&amp;quot; using 3 1 by (rule mp)&lt;br /&gt;
    have 6: &amp;quot;q ∧ r&amp;quot; using 4 5 by (rule conjI)}&lt;br /&gt;
  thus &amp;quot;p⟶(q ∧ r)&amp;quot; by(rule impI)  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Demostrar&lt;br /&gt;
     p ⟶ q ∧ r ⊢ (p ⟶ q) ∧ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q ∧ r&amp;quot; using  assms(1) 1 by (rule mp)&lt;br /&gt;
     have 3: &amp;quot;q&amp;quot; using 2 by (rule conjunct1)}&lt;br /&gt;
   thus &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
next &lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q ∧ r&amp;quot; using assms(1) 1 by (rule mp)&lt;br /&gt;
     have 3: &amp;quot;r&amp;quot; using 2 by (rule conjunct2)}&lt;br /&gt;
   thus &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ p ∧ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   { assume 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 ⟶ r&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
     have 4: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
     have 5: &amp;quot;r&amp;quot; using 3 4 by (rule mp)}&lt;br /&gt;
   thus &amp;quot;(p ∧ q) ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Demostrar&lt;br /&gt;
     p ∧ q ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes &amp;quot;p ∧ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     {assume 2: &amp;quot;q&amp;quot; &lt;br /&gt;
      have 3: &amp;quot;p ∧ q&amp;quot; using 1 2 by (rule conjI)&lt;br /&gt;
      have 4: &amp;quot;r&amp;quot; using assms(1) 3 by (rule mp)}&lt;br /&gt;
     then have 5: &amp;quot;q ⟶ r&amp;quot; by (rule impI)}&lt;br /&gt;
   thus &amp;quot;p ⟶ (q ⟶ r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ∧ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   { assume 1: &amp;quot;p ∧q&amp;quot;&lt;br /&gt;
     {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 3: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)}&lt;br /&gt;
     hence 4: &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
     have 5: &amp;quot;r&amp;quot; using assms(1) 4 by (rule mp)}&lt;br /&gt;
   thus &amp;quot;p ∧ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_24:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
    { assume 1: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
      have 3: &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
      have 4: &amp;quot;q ⟶ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      have 5: &amp;quot;r&amp;quot; using 4 3 by (rule mp)}&lt;br /&gt;
    thus &amp;quot;(p ⟶ q) ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Disyunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Demostrar&lt;br /&gt;
     p ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_25:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   show &amp;quot;p ∨ q&amp;quot; using assms(1) by (rule disjI1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Demostrar&lt;br /&gt;
     q ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_26:&lt;br /&gt;
  assumes &amp;quot;q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   show &amp;quot;p ∨ q&amp;quot; using assms(1) by (rule disjI2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Demostrar&lt;br /&gt;
     p ∨ q ⊢ q ∨ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_27:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   have &amp;quot;p ∨ q&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q ∨ p&amp;quot; using 1 by (rule disjI2)}&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;q&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q ∨ p&amp;quot; using 1 by (rule disjI1)}&lt;br /&gt;
   ultimately show &amp;quot;q ∨ p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_28:&lt;br /&gt;
  assumes &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    { assume 1: &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 3: &amp;quot;p ∨ r&amp;quot; using 2 by (rule disjI1)}&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
        have 5: &amp;quot;r&amp;quot; using assms(1) 4 by (rule mp)&lt;br /&gt;
        have 6: &amp;quot;p ∨ r&amp;quot; using 5 by (rule disjI2)}&lt;br /&gt;
       ultimately have &amp;quot;p ∨r&amp;quot;  by (rule disjE)}&lt;br /&gt;
    thus &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Demostrar&lt;br /&gt;
     p ∨ p ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_29:&lt;br /&gt;
  assumes &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have &amp;quot;p ∨ p&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p&amp;quot; using 1 by this}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;p&amp;quot; using 3 by this}&lt;br /&gt;
ultimately show &amp;quot;p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. Demostrar&lt;br /&gt;
     p ⊢ p ∨ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_30:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
    show &amp;quot;p ∨ p&amp;quot; using assms(1) by (rule disjI1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Demostrar&lt;br /&gt;
     p ∨ (q ∨ r) ⊢ (p ∨ q) ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_31:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∨ r&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
   have &amp;quot;p ∨ (q ∨ r)&amp;quot; using assms(1) by this&lt;br /&gt;
moreover &lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
       have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
       have 3: &amp;quot;(p ∨ q) ∨ r&amp;quot; using 2 by (rule disjI1)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 4: &amp;quot;q ∨ r&amp;quot;&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 5: &amp;quot;q&amp;quot;&lt;br /&gt;
        have 6: &amp;quot;p ∨ q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
        have 7: &amp;quot;(p ∨ q) ∨ r&amp;quot; using 6 by (rule disjI1)}&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 8: &amp;quot;r&amp;quot;&lt;br /&gt;
        have 9: &amp;quot;(p ∨ q) ∨ r&amp;quot; using 8 by (rule disjI2)}&lt;br /&gt;
      ultimately have &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjE)}&lt;br /&gt;
  ultimately show &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. Demostrar&lt;br /&gt;
     (p ∨ q) ∨ r ⊢ p ∨ (q ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_32:&lt;br /&gt;
  assumes &amp;quot;(p ∨ q) ∨ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   have &amp;quot;(p ∨ q) ∨ r&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
     moreover&lt;br /&gt;
     { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
       have 3: &amp;quot;p ∨ (q ∨ r)&amp;quot; using 2 by (rule disjI1)}&lt;br /&gt;
     moreover&lt;br /&gt;
     { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
       have 5: &amp;quot;q ∨ r&amp;quot; using 4 by (rule disjI1)&lt;br /&gt;
       have 6: &amp;quot;p ∨ (q ∨ r)&amp;quot; using 5 by (rule disjI2)}&lt;br /&gt;
     ultimately have &amp;quot;p ∨ (q ∨ r)&amp;quot; by (rule disjE)}&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 7: &amp;quot;r&amp;quot;&lt;br /&gt;
     have 8: &amp;quot;q ∨ r&amp;quot; using 7 by (rule disjI2)&lt;br /&gt;
     have 9: &amp;quot;p ∨ (q ∨ r)&amp;quot; using 8 by (rule disjI2)}&lt;br /&gt;
ultimately show &amp;quot;p ∨ (q ∨ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Demostrar&lt;br /&gt;
     p ∧ (q ∨ r) ⊢ (p ∧ q) ∨ (p ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_33:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have 1: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
    have 2: &amp;quot;q ∨ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;p ∧ q&amp;quot; using 1 3 by (rule conjI)&lt;br /&gt;
      have 5: &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; using 4 by (rule disjI1)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 6: &amp;quot;r&amp;quot;&lt;br /&gt;
      have 7: &amp;quot;p ∧ r&amp;quot; using 1 6 by (rule conjI)&lt;br /&gt;
      have 8: &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; using 7 by (rule disjI2)}&lt;br /&gt;
ultimately show &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Demostrar&lt;br /&gt;
     (p ∧ q) ∨ (p ∧ r) ⊢ p ∧ (q ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_34:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∨ r)&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
   have &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
     have 3: &amp;quot;q ∨ r&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
     have 4: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
     have 5: &amp;quot;p ∧ (q ∨ r)&amp;quot; using 4 3 by (rule conjI)}&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 6: &amp;quot;p ∧ r&amp;quot;&lt;br /&gt;
     have 7: &amp;quot;r&amp;quot; using 6 by (rule conjunct2)&lt;br /&gt;
     have 8: &amp;quot;q ∨ r&amp;quot; using 7 by (rule disjI2)&lt;br /&gt;
     have 9: &amp;quot;p&amp;quot; using 6 by (rule conjunct1)&lt;br /&gt;
     have 10: &amp;quot;p ∧ (q ∨ r)&amp;quot; using 9 8 by (rule conjI)}&lt;br /&gt;
ultimately show &amp;quot;p ∧ (q ∨ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Demostrar&lt;br /&gt;
     p ∨ (q ∧ r) ⊢ (p ∨ q) ∧ (p ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_35:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have &amp;quot;p ∨ (q ∧ r)&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
     have 3: &amp;quot;p ∨ r&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
     have 4: &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot; using 2 3 by (rule conjI)}&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 5: &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
     have 6: &amp;quot;q&amp;quot; using 5 by (rule conjunct1)&lt;br /&gt;
     have 7: &amp;quot;p ∨ q&amp;quot; using 6 by (rule disjI2)&lt;br /&gt;
     have 8: &amp;quot;r&amp;quot; using 5 by (rule conjunct2)&lt;br /&gt;
     have 9: &amp;quot;p ∨ r&amp;quot; using 8 by (rule disjI2)&lt;br /&gt;
     have 10: &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot; using 7 9 by (rule conjI)}&lt;br /&gt;
ultimately show &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Demostrar&lt;br /&gt;
     (p ∨ q) ∧ (p ∨ r) ⊢ p ∨ (q ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_36:&lt;br /&gt;
  assumes &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
     have &amp;quot;(p ∨ q)&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p ∨ (q ∧ r)&amp;quot; using 1 by (rule disjI1)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 3: &amp;quot;q&amp;quot; &lt;br /&gt;
      have 4: &amp;quot;p ∨ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 5: &amp;quot;p&amp;quot; &lt;br /&gt;
        have 6: &amp;quot;p ∨ (q ∧ r)&amp;quot; using 5 by (rule disjI1)}&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 7: &amp;quot;r&amp;quot;&lt;br /&gt;
        have 8: &amp;quot;q ∧ r&amp;quot; using 3 7 by (rule conjI)&lt;br /&gt;
        have 9: &amp;quot;p ∨ (q ∧ r)&amp;quot; using 8 by (rule disjI2)}&lt;br /&gt;
      ultimately have &amp;quot;p ∨ (q ∧ r)&amp;quot; by (rule disjE)}&lt;br /&gt;
ultimately show &amp;quot;p ∨ (q ∧ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_37:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    { assume 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 3: &amp;quot;p ⟶ r&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
        have 4: &amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 5: &amp;quot;q&amp;quot;&lt;br /&gt;
        have 6: &amp;quot;q ⟶ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
        have 7: &amp;quot;r&amp;quot; using 6 5 by (rule mp)}&lt;br /&gt;
      ultimately have &amp;quot;r&amp;quot; by (rule disjE)}&lt;br /&gt;
     thus &amp;quot;(p ∨ q) ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 38. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_38:&lt;br /&gt;
  assumes &amp;quot;p ∨ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
      have 3: &amp;quot;r&amp;quot; using assms(1) 2 by (rule mp)}&lt;br /&gt;
    thus &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
next&lt;br /&gt;
    { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 5: &amp;quot;p ∨ q&amp;quot; using 4 by (rule disjI2)&lt;br /&gt;
      have 6: &amp;quot;r&amp;quot; using assms(1) 5 by (rule mp)}&lt;br /&gt;
    thus &amp;quot;q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Negaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 39. Demostrar&lt;br /&gt;
     p ⊢ ¬¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_39:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    show &amp;quot;¬¬p&amp;quot; using assms(1) by (rule notnotI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 40. Demostrar&lt;br /&gt;
     ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_40:&lt;br /&gt;
  assumes &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;False&amp;quot; using assms(1) 1 by (rule notE)&lt;br /&gt;
      have 3: &amp;quot;q&amp;quot; using 2 by (rule FalseE)}&lt;br /&gt;
    thus &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 41. Demostrar&lt;br /&gt;
     p ⟶ q ⊢ ¬q ⟶ ¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_41:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    {assume 1: &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬p&amp;quot; using assms(1) 1 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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 42. Demostrar&lt;br /&gt;
     p∨q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_42:&lt;br /&gt;
  assumes &amp;quot;p∨q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
    have &amp;quot;p ∨ q&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p&amp;quot; using 1 by this}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;False&amp;quot; using assms(2) 3 by (rule notE)&lt;br /&gt;
      have 5: &amp;quot;p&amp;quot; using 4 by (rule FalseE)}&lt;br /&gt;
ultimately show &amp;quot;p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 42. Demostrar&lt;br /&gt;
     p ∨ q, ¬p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_43:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have &amp;quot;p ∨ q&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;False&amp;quot; using assms(2) 1 by (rule notE)&lt;br /&gt;
      have 3: &amp;quot;q&amp;quot; using 2 by (rule FalseE)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 4: &amp;quot;q&amp;quot; &lt;br /&gt;
      have 5: &amp;quot;q&amp;quot; using 4 by this}&lt;br /&gt;
ultimately show &amp;quot;q&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 40. Demostrar&lt;br /&gt;
     p ∨ q ⊢ ¬(¬p ∧ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_44:&lt;br /&gt;
  assumes &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 45. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_45:&lt;br /&gt;
  assumes &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 46. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_46:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
    {assume 1: &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;p&amp;quot; using 1 by (rule notnotD)&lt;br /&gt;
    have 3: &amp;quot;p ∨ q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
    have 4: &amp;quot;False&amp;quot; using assms(1) 3 by (rule notE)}&lt;br /&gt;
    thus 5: &amp;quot;¬p&amp;quot; by (rule ccontr)&lt;br /&gt;
next&lt;br /&gt;
   { assume 6: &amp;quot;¬¬q&amp;quot;&lt;br /&gt;
     have 7: &amp;quot;q&amp;quot; using 6 by (rule notnotD)&lt;br /&gt;
     have 8: &amp;quot;p ∨ q&amp;quot; using 7 by (rule disjI2)&lt;br /&gt;
     have 9: &amp;quot;False&amp;quot; using assms(1) 8 by (rule notE)}&lt;br /&gt;
   thus 10: &amp;quot;¬q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 47. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_47:&lt;br /&gt;
  assumes &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 48. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_48:&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 49. Demostrar&lt;br /&gt;
     ⊢ ¬(p ∧ ¬p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_49:&lt;br /&gt;
  &amp;quot;¬(p ∧ ¬p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    {assume 1: &amp;quot;¬¬(p ∧ ¬p)&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;p ∧ ¬p&amp;quot; using 1 by (rule notnotD)&lt;br /&gt;
    have 3: &amp;quot;p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
    have 4: &amp;quot;¬p&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
    have 5: &amp;quot;False&amp;quot; using 4 3 by (rule notE)}&lt;br /&gt;
    thus &amp;quot;¬(p ∧ ¬p)&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 50. Demostrar&lt;br /&gt;
     p ∧ ¬p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_50:&lt;br /&gt;
  assumes &amp;quot;p ∧ ¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
     have 1: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
     have 2: &amp;quot;¬p&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
     have 3: &amp;quot;False&amp;quot; using 2 1 by (rule notE)&lt;br /&gt;
     show 4: &amp;quot;q&amp;quot; using 3 by (rule FalseE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 51. Demostrar&lt;br /&gt;
     ¬¬p ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_51:&lt;br /&gt;
  assumes &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    show &amp;quot;p&amp;quot; using assms(1) by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 52. Demostrar&lt;br /&gt;
     ⊢ p ∨ ¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 53. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_53:&lt;br /&gt;
  &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
     {assume 1: &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
       { assume 3: &amp;quot;¬p&amp;quot;&lt;br /&gt;
         have 4: &amp;quot;¬(p ⟶ q)&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
          { assume 5: &amp;quot;p&amp;quot;&lt;br /&gt;
            have 6: &amp;quot;False&amp;quot; using 3 5 by (rule notE)&lt;br /&gt;
            have 7: &amp;quot;q&amp;quot; using 6 by (rule FalseE)}&lt;br /&gt;
         hence 8: &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
         have 9: &amp;quot;False&amp;quot; using 4 8 by (rule notE)}&lt;br /&gt;
         hence 10: &amp;quot;p&amp;quot;  by (rule ccontr)}&lt;br /&gt;
     thus 11: &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 54. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_54:&lt;br /&gt;
  assumes &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 55. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_55:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
     have 1: &amp;quot;¬p ∨ p&amp;quot; by (rule excluded_middle)&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 2: &amp;quot;¬p&amp;quot;&lt;br /&gt;
      have 3: &amp;quot;¬q ∨ q&amp;quot; by (rule excluded_middle)&lt;br /&gt;
      moreover&lt;br /&gt;
        { assume 4: &amp;quot;¬q&amp;quot;&lt;br /&gt;
          have 5: &amp;quot;¬p ∧ ¬ q&amp;quot; using 2 4 by (rule conjI)&lt;br /&gt;
          have 6: &amp;quot;False&amp;quot; using assms(1) 5 by (rule notE)&lt;br /&gt;
          have 7: &amp;quot;p ∨ q&amp;quot; using 6 by (rule FalseE)}&lt;br /&gt;
      moreover&lt;br /&gt;
        { assume 8: &amp;quot;q&amp;quot;&lt;br /&gt;
          have 9: &amp;quot;p ∨ q&amp;quot; using 8 by (rule disjI2)}&lt;br /&gt;
      ultimately have &amp;quot;p ∨ q&amp;quot; by (rule disjE)}&lt;br /&gt;
    moreover&lt;br /&gt;
      { assume 10: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 11: &amp;quot;p ∨ q&amp;quot; using 10 by (rule disjI1)}&lt;br /&gt;
   ultimately show &amp;quot;p ∨ q&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 56. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_56:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∨ ¬q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
    { assume 1: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬p ∨ ¬q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
    have 3: &amp;quot;False&amp;quot; using assms(1) 2 by (rule notE)}&lt;br /&gt;
    thus 4: &amp;quot;p&amp;quot; by (rule ccontr)&lt;br /&gt;
next &lt;br /&gt;
    { assume 5: &amp;quot;¬q&amp;quot;&lt;br /&gt;
      have 6: &amp;quot;¬p ∨ ¬q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
      have 7: &amp;quot;False&amp;quot; using assms(1) 6 by (rule notE)}&lt;br /&gt;
    thus 8: &amp;quot;q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 57. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_57:&lt;br /&gt;
  assumes &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
     have 1: &amp;quot;¬p ∨ p&amp;quot; by (rule excluded_middle)&lt;br /&gt;
     moreover&lt;br /&gt;
      { assume 2: &amp;quot;¬p&amp;quot;&lt;br /&gt;
        have 3: &amp;quot;¬p ∨ ¬q&amp;quot; using 2 by (rule disjI1)}&lt;br /&gt;
     moreover&lt;br /&gt;
      { assume 4: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 5: &amp;quot;¬q ∨ q&amp;quot; by (rule excluded_middle)&lt;br /&gt;
        moreover&lt;br /&gt;
         { assume 6: &amp;quot;¬q&amp;quot;&lt;br /&gt;
           have 7: &amp;quot;¬p ∨ ¬q&amp;quot; using 6 by (rule disjI2)}&lt;br /&gt;
         moreover&lt;br /&gt;
          { assume 8: &amp;quot;q&amp;quot;&lt;br /&gt;
            have 9: &amp;quot;p ∧ q&amp;quot; using 4 8 by (rule conjI)&lt;br /&gt;
            have 10: &amp;quot;False&amp;quot; using assms(1) 9 by (rule notE)&lt;br /&gt;
            have 11: &amp;quot;¬p ∨ ¬q&amp;quot; using 10 by (rule FalseE)}&lt;br /&gt;
         ultimately have &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjE)}&lt;br /&gt;
     ultimately show &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 58. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_3&amp;diff=171</id>
		<title>Relación 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_3&amp;diff=171"/>
		<updated>2015-03-07T12:35:11Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R3: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R3&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es demostrar cada uno de los ejercicios&lt;br /&gt;
  usando sólo las reglas básicas de deducción natural de la lógica&lt;br /&gt;
  proposicional (sin usar el método auto).&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación. *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Implicaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
       p ⟶ q, p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
      show &amp;quot;q&amp;quot; using assms(1) assms(2) by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ q, q ⟶ r, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof - have 1: &amp;quot;q&amp;quot; using assms(1) assms(3) by (rule mp)&lt;br /&gt;
         show &amp;quot;r&amp;quot; using assms(2) 1 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r), p ⟶ q, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
          &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have 1:&amp;quot;q⟶r&amp;quot; using assms(1) assms(3) by (rule mp)&lt;br /&gt;
    have 2:&amp;quot;q&amp;quot; using assms(2) assms(3) by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
qed  &lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     p ⟶ q, q ⟶ r ⊢ p ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proof -&lt;br /&gt;
        {assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
          have 2: &amp;quot;q&amp;quot; using assms(1) 1 by (rule mp)&lt;br /&gt;
          have 3: &amp;quot;r&amp;quot; using assms(2) 2 by (rule mp)}&lt;br /&gt;
          then show &amp;quot;p⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
 {assume 1: &amp;quot;q&amp;quot;&lt;br /&gt;
   {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 3:&amp;quot;q⟶r&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
     have &amp;quot;r&amp;quot; using 3 1 by (rule mp)}&lt;br /&gt;
   hence  &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
 then show &amp;quot;q⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed  &lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  {assume 1: &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
    {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 3: &amp;quot;q⟶r&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
      have 4: &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;r&amp;quot; using 3 4 by (rule mp)}&lt;br /&gt;
    hence &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p⟶q)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ⊢ q ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
proof-&lt;br /&gt;
{assume 1: &amp;quot;q&amp;quot;&lt;br /&gt;
        note `p`}&lt;br /&gt;
      thus &amp;quot;q⟶p&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ⊢ p ⟶ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_8:&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;
        {assume &amp;quot;q&amp;quot;&lt;br /&gt;
          note `p`}&lt;br /&gt;
        hence &amp;quot;q⟶p&amp;quot; by (rule impI)}&lt;br /&gt;
      thus &amp;quot;p⟶q⟶p&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     p ⟶ q ⊢ (q ⟶ r) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(q ⟶ r) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  {assume 1: &amp;quot;q⟶r&amp;quot;&lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 3: &amp;quot;q&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
      have 4: &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    hence &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;(q⟶r)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ (r ⟶ s)) ⊢ r ⟶ (q ⟶ (p ⟶ s))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ (r ⟶ s))&amp;quot; &lt;br /&gt;
  shows   &amp;quot;r ⟶ (q ⟶ (p ⟶ s))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 1: &amp;quot;r&amp;quot; &lt;br /&gt;
    {assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
      {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 4: &amp;quot;q ⟶ (r ⟶ s)&amp;quot; using assms(1) 3 by (rule mp)&lt;br /&gt;
        have 5: &amp;quot;r⟶s&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
        have 6: &amp;quot;s&amp;quot; using 5 1 by (rule mp)}&lt;br /&gt;
      hence &amp;quot;p⟶s&amp;quot; by (rule impI)}&lt;br /&gt;
    hence &amp;quot;q⟶(p⟶s)&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;r⟶(q⟶(p⟶s))&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
&lt;br /&gt;
proof- &lt;br /&gt;
  {assume 1: &amp;quot;p⟶(q⟶r)&amp;quot;&lt;br /&gt;
    { assume 2: &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
      {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 4: &amp;quot;q⟶r&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;
        have 6: &amp;quot;r&amp;quot; using 4 5 by (rule mp)}&lt;br /&gt;
      hence &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
    hence &amp;quot;(p⟶q)⟶(p⟶r)&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  {assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
    {assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
     {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
       note `q`}&lt;br /&gt;
     hence 4:&amp;quot;p⟶q&amp;quot; by (rule impI)&lt;br /&gt;
     have 5: &amp;quot;r&amp;quot; using assms(1) 4 by (rule mp)}&lt;br /&gt;
    hence &amp;quot;q⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;p⟶(q⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar&lt;br /&gt;
     p, q ⊢  p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
          &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof-&lt;br /&gt;
  show &amp;quot;p∧q&amp;quot; using assms(1) assms(2) by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof-&lt;br /&gt;
  show &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar&lt;br /&gt;
     p ∧ q ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof-&lt;br /&gt;
  show &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar&lt;br /&gt;
     p ∧ (q ∧ r) ⊢ (p ∧ q) ∧ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
  have 2: &amp;quot;q ∧ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
  have 3: &amp;quot;q&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;r&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;p ∧ q&amp;quot; using 1 3 by (rule conjI)&lt;br /&gt;
  show &amp;quot;(p ∧ q) ∧ r&amp;quot; using 5 4 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar&lt;br /&gt;
     (p ∧ q) ∧ r ⊢ p ∧ (q ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  have 1: &amp;quot;p ∧ q&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
  have 2: &amp;quot;r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;q ∧ r&amp;quot; using 4 2 by (rule conjI)&lt;br /&gt;
  show &amp;quot;p ∧(q ∧ r)&amp;quot; using 3 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof- &lt;br /&gt;
  {assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)}&lt;br /&gt;
  thus &amp;quot;p⟶q&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proof-&lt;br /&gt;
  {assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;p⟶q&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
    have 3: &amp;quot;p⟶r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 2 1 by (rule mp)&lt;br /&gt;
    have 5: &amp;quot;r&amp;quot; using 3 1 by (rule mp)&lt;br /&gt;
    have 6: &amp;quot;q ∧ r&amp;quot; using 4 5 by (rule conjI)}&lt;br /&gt;
  thus &amp;quot;p⟶(q ∧ r)&amp;quot; by(rule impI)  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Demostrar&lt;br /&gt;
     p ⟶ q ∧ r ⊢ (p ⟶ q) ∧ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q ∧ r&amp;quot; using  assms(1) 1 by (rule mp)&lt;br /&gt;
     have 3: &amp;quot;q&amp;quot; using 2 by (rule conjunct1)}&lt;br /&gt;
   thus &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
next &lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q ∧ r&amp;quot; using assms(1) 1 by (rule mp)&lt;br /&gt;
     have 3: &amp;quot;r&amp;quot; using 2 by (rule conjunct2)}&lt;br /&gt;
   thus &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ p ∧ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   { assume 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 ⟶ r&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
     have 4: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
     have 5: &amp;quot;r&amp;quot; using 3 4 by (rule mp)}&lt;br /&gt;
   thus &amp;quot;(p ∧ q) ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Demostrar&lt;br /&gt;
     p ∧ q ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes &amp;quot;p ∧ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     {assume 2: &amp;quot;q&amp;quot; &lt;br /&gt;
      have 3: &amp;quot;p ∧ q&amp;quot; using 1 2 by (rule conjI)&lt;br /&gt;
      have 4: &amp;quot;r&amp;quot; using assms(1) 3 by (rule mp)}&lt;br /&gt;
     then have 5: &amp;quot;q ⟶ r&amp;quot; by (rule impI)}&lt;br /&gt;
   thus &amp;quot;p ⟶ (q ⟶ r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ∧ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   { assume 1: &amp;quot;p ∧q&amp;quot;&lt;br /&gt;
     {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 3: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)}&lt;br /&gt;
     hence 4: &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
     have 5: &amp;quot;r&amp;quot; using assms(1) 4 by (rule mp)}&lt;br /&gt;
   thus &amp;quot;p ∧ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_24:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
    { assume 1: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
      have 3: &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
      have 4: &amp;quot;q ⟶ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      have 5: &amp;quot;r&amp;quot; using 4 3 by (rule mp)}&lt;br /&gt;
    thus &amp;quot;(p ⟶ q) ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Disyunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Demostrar&lt;br /&gt;
     p ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_25:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   show &amp;quot;p ∨ q&amp;quot; using assms(1) by (rule disjI1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Demostrar&lt;br /&gt;
     q ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_26:&lt;br /&gt;
  assumes &amp;quot;q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   show &amp;quot;p ∨ q&amp;quot; using assms(1) by (rule disjI2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Demostrar&lt;br /&gt;
     p ∨ q ⊢ q ∨ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_27:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   have &amp;quot;p ∨ q&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q ∨ p&amp;quot; using 1 by (rule disjI2)}&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;q&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q ∨ p&amp;quot; using 1 by (rule disjI1)}&lt;br /&gt;
   ultimately show &amp;quot;q ∨ p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_28:&lt;br /&gt;
  assumes &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    { assume 1: &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 3: &amp;quot;p ∨ r&amp;quot; using 2 by (rule disjI1)}&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
        have 5: &amp;quot;r&amp;quot; using assms(1) 4 by (rule mp)&lt;br /&gt;
        have 6: &amp;quot;p ∨ r&amp;quot; using 5 by (rule disjI2)}&lt;br /&gt;
       ultimately have &amp;quot;p ∨r&amp;quot;  by (rule disjE)}&lt;br /&gt;
    thus &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Demostrar&lt;br /&gt;
     p ∨ p ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_29:&lt;br /&gt;
  assumes &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have &amp;quot;p ∨ p&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p&amp;quot; using 1 by this}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;p&amp;quot; using 3 by this}&lt;br /&gt;
ultimately show &amp;quot;p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. Demostrar&lt;br /&gt;
     p ⊢ p ∨ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_30:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
    show &amp;quot;p ∨ p&amp;quot; using assms(1) by (rule disjI1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Demostrar&lt;br /&gt;
     p ∨ (q ∨ r) ⊢ (p ∨ q) ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_31:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∨ r&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
   have &amp;quot;p ∨ (q ∨ r)&amp;quot; using assms(1) by this&lt;br /&gt;
moreover &lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
       have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
       have 3: &amp;quot;(p ∨ q) ∨ r&amp;quot; using 2 by (rule disjI1)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 4: &amp;quot;q ∨ r&amp;quot;&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 5: &amp;quot;q&amp;quot;&lt;br /&gt;
        have 6: &amp;quot;p ∨ q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
        have 7: &amp;quot;(p ∨ q) ∨ r&amp;quot; using 6 by (rule disjI1)}&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 8: &amp;quot;r&amp;quot;&lt;br /&gt;
        have 9: &amp;quot;(p ∨ q) ∨ r&amp;quot; using 8 by (rule disjI2)}&lt;br /&gt;
      ultimately have &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjE)}&lt;br /&gt;
  ultimately show &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. Demostrar&lt;br /&gt;
     (p ∨ q) ∨ r ⊢ p ∨ (q ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_32:&lt;br /&gt;
  assumes &amp;quot;(p ∨ q) ∨ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   have &amp;quot;(p ∨ q) ∨ r&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
     moreover&lt;br /&gt;
     { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
       have 3: &amp;quot;p ∨ (q ∨ r)&amp;quot; using 2 by (rule disjI1)}&lt;br /&gt;
     moreover&lt;br /&gt;
     { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
       have 5: &amp;quot;q ∨ r&amp;quot; using 4 by (rule disjI1)&lt;br /&gt;
       have 6: &amp;quot;p ∨ (q ∨ r)&amp;quot; using 5 by (rule disjI2)}&lt;br /&gt;
     ultimately have &amp;quot;p ∨ (q ∨ r)&amp;quot; by (rule disjE)}&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 7: &amp;quot;r&amp;quot;&lt;br /&gt;
     have 8: &amp;quot;q ∨ r&amp;quot; using 7 by (rule disjI2)&lt;br /&gt;
     have 9: &amp;quot;p ∨ (q ∨ r)&amp;quot; using 8 by (rule disjI2)}&lt;br /&gt;
ultimately show &amp;quot;p ∨ (q ∨ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Demostrar&lt;br /&gt;
     p ∧ (q ∨ r) ⊢ (p ∧ q) ∨ (p ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_33:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have 1: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
    have 2: &amp;quot;q ∨ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;p ∧ q&amp;quot; using 1 3 by (rule conjI)&lt;br /&gt;
      have 5: &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; using 4 by (rule disjI1)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 6: &amp;quot;r&amp;quot;&lt;br /&gt;
      have 7: &amp;quot;p ∧ r&amp;quot; using 1 6 by (rule conjI)&lt;br /&gt;
      have 8: &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; using 7 by (rule disjI2)}&lt;br /&gt;
ultimately show &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Demostrar&lt;br /&gt;
     (p ∧ q) ∨ (p ∧ r) ⊢ p ∧ (q ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_34:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∨ r)&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
   have &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
     have 3: &amp;quot;q ∨ r&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
     have 4: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
     have 5: &amp;quot;p ∧ (q ∨ r)&amp;quot; using 4 3 by (rule conjI)}&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 6: &amp;quot;p ∧ r&amp;quot;&lt;br /&gt;
     have 7: &amp;quot;r&amp;quot; using 6 by (rule conjunct2)&lt;br /&gt;
     have 8: &amp;quot;q ∨ r&amp;quot; using 7 by (rule disjI2)&lt;br /&gt;
     have 9: &amp;quot;p&amp;quot; using 6 by (rule conjunct1)&lt;br /&gt;
     have 10: &amp;quot;p ∧ (q ∨ r)&amp;quot; using 9 8 by (rule conjI)}&lt;br /&gt;
ultimately show &amp;quot;p ∧ (q ∨ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Demostrar&lt;br /&gt;
     p ∨ (q ∧ r) ⊢ (p ∨ q) ∧ (p ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_35:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have &amp;quot;p ∨ (q ∧ r)&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
     have 3: &amp;quot;p ∨ r&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
     have 4: &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot; using 2 3 by (rule conjI)}&lt;br /&gt;
moreover&lt;br /&gt;
   { assume 5: &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
     have 6: &amp;quot;q&amp;quot; using 5 by (rule conjunct1)&lt;br /&gt;
     have 7: &amp;quot;p ∨ q&amp;quot; using 6 by (rule disjI2)&lt;br /&gt;
     have 8: &amp;quot;r&amp;quot; using 5 by (rule conjunct2)&lt;br /&gt;
     have 9: &amp;quot;p ∨ r&amp;quot; using 8 by (rule disjI2)&lt;br /&gt;
     have 10: &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot; using 7 9 by (rule conjI)}&lt;br /&gt;
ultimately show &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Demostrar&lt;br /&gt;
     (p ∨ q) ∧ (p ∨ r) ⊢ p ∨ (q ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_36:&lt;br /&gt;
  assumes &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
     have &amp;quot;(p ∨ q)&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p ∨ (q ∧ r)&amp;quot; using 1 by (rule disjI1)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 3: &amp;quot;q&amp;quot; &lt;br /&gt;
      have 4: &amp;quot;p ∨ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 5: &amp;quot;p&amp;quot; &lt;br /&gt;
        have 6: &amp;quot;p ∨ (q ∧ r)&amp;quot; using 5 by (rule disjI1)}&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 7: &amp;quot;r&amp;quot;&lt;br /&gt;
        have 8: &amp;quot;q ∧ r&amp;quot; using 3 7 by (rule conjI)&lt;br /&gt;
        have 9: &amp;quot;p ∨ (q ∧ r)&amp;quot; using 8 by (rule disjI2)}&lt;br /&gt;
      ultimately have &amp;quot;p ∨ (q ∧ r)&amp;quot; by (rule disjE)}&lt;br /&gt;
ultimately show &amp;quot;p ∨ (q ∧ r)&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_37:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    { assume 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 3: &amp;quot;p ⟶ r&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
        have 4: &amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
      moreover&lt;br /&gt;
      { assume 5: &amp;quot;q&amp;quot;&lt;br /&gt;
        have 6: &amp;quot;q ⟶ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
        have 7: &amp;quot;r&amp;quot; using 6 5 by (rule mp)}&lt;br /&gt;
      ultimately have &amp;quot;r&amp;quot; by (rule disjE)}&lt;br /&gt;
     thus &amp;quot;(p ∨ q) ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 38. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_38:&lt;br /&gt;
  assumes &amp;quot;p ∨ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
      have 3: &amp;quot;r&amp;quot; using assms(1) 2 by (rule mp)}&lt;br /&gt;
    thus &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
next&lt;br /&gt;
    { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 5: &amp;quot;p ∨ q&amp;quot; using 4 by (rule disjI2)&lt;br /&gt;
      have 6: &amp;quot;r&amp;quot; using assms(1) 5 by (rule mp)}&lt;br /&gt;
    thus &amp;quot;q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Negaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 39. Demostrar&lt;br /&gt;
     p ⊢ ¬¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_39:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    show &amp;quot;¬¬p&amp;quot; using assms(1) by (rule notnotI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 40. Demostrar&lt;br /&gt;
     ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_40:&lt;br /&gt;
  assumes &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;False&amp;quot; using assms(1) 1 by (rule notE)&lt;br /&gt;
      have 3: &amp;quot;q&amp;quot; using 2 by (rule FalseE)}&lt;br /&gt;
    thus &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 41. Demostrar&lt;br /&gt;
     p ⟶ q ⊢ ¬q ⟶ ¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_41:&lt;br /&gt;
  assumes &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 42. Demostrar&lt;br /&gt;
     p∨q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_42:&lt;br /&gt;
  assumes &amp;quot;p∨q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
    have &amp;quot;p ∨ q&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;p&amp;quot; using 1 by this}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;False&amp;quot; using assms(2) 3 by (rule notE)&lt;br /&gt;
      have 5: &amp;quot;p&amp;quot; using 4 by (rule FalseE)}&lt;br /&gt;
ultimately show &amp;quot;p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 42. Demostrar&lt;br /&gt;
     p ∨ q, ¬p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_43:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
    have &amp;quot;p ∨ q&amp;quot; using assms(1) by this&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 2: &amp;quot;False&amp;quot; using assms(2) 1 by (rule notE)&lt;br /&gt;
      have 3: &amp;quot;q&amp;quot; using 2 by (rule FalseE)}&lt;br /&gt;
moreover&lt;br /&gt;
    { assume 4: &amp;quot;q&amp;quot; &lt;br /&gt;
      have 5: &amp;quot;q&amp;quot; using 4 by this}&lt;br /&gt;
ultimately show &amp;quot;q&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 40. Demostrar&lt;br /&gt;
     p ∨ q ⊢ ¬(¬p ∧ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_44:&lt;br /&gt;
  assumes &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 45. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_45:&lt;br /&gt;
  assumes &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 46. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_46:&lt;br /&gt;
  assumes &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 47. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_47:&lt;br /&gt;
  assumes &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 48. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_48:&lt;br /&gt;
  assumes &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 49. Demostrar&lt;br /&gt;
     ⊢ ¬(p ∧ ¬p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 50. Demostrar&lt;br /&gt;
     p ∧ ¬p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_50:&lt;br /&gt;
  assumes &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 51. Demostrar&lt;br /&gt;
     ¬¬p ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_51:&lt;br /&gt;
  assumes &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 52. Demostrar&lt;br /&gt;
     ⊢ p ∨ ¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 53. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 54. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_54:&lt;br /&gt;
  assumes &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 55. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_55:&lt;br /&gt;
  assumes &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 56. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_56:&lt;br /&gt;
  assumes &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 57. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_57:&lt;br /&gt;
  assumes &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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 58. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2a&amp;diff=123</id>
		<title>Relación 2a</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2a&amp;diff=123"/>
		<updated>2015-02-17T11:24:32Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- SintaxisSemanticaProp.hs&lt;br /&gt;
-- Lógica proposicional: Sintaxis y semántica&lt;br /&gt;
-- José A. Alonso Jiménez &amp;lt;jalonso@us.es&amp;gt;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
module SintaxisSemantica where&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Librerías auxiliares                                               --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
import Data.List &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Gramática de fórmulas prosicionales                                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1: Definir los siguientes tipos de datos:&lt;br /&gt;
-- * SímboloProposicional para representar los símbolos de proposiciones&lt;br /&gt;
-- * Prop para representar las fórmulas proposicionales usando los&lt;br /&gt;
--   constructores Atom, Neg, Conj, Disj, Impl y Equi para las fórmulas&lt;br /&gt;
--   atómicas, negaciones, conjunciones, implicaciones y equivalencias,&lt;br /&gt;
--   respectivamente.  &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
type SímboloProposicional = String&lt;br /&gt;
&lt;br /&gt;
data Prop = Atom SímboloProposicional&lt;br /&gt;
          | Neg Prop &lt;br /&gt;
          | Conj Prop Prop &lt;br /&gt;
          | Disj Prop Prop &lt;br /&gt;
          | Impl Prop Prop &lt;br /&gt;
          | Equi Prop Prop &lt;br /&gt;
          deriving (Eq,Ord)&lt;br /&gt;
&lt;br /&gt;
instance Show Prop where&lt;br /&gt;
    show (Atom p)   = p&lt;br /&gt;
    show (Neg p)    = &amp;quot;no &amp;quot; ++ show p&lt;br /&gt;
    show (Conj p q) = &amp;quot;(&amp;quot; ++ show p ++ &amp;quot; /\\ &amp;quot; ++ show q ++ &amp;quot;)&amp;quot;&lt;br /&gt;
    show (Disj p q) = &amp;quot;(&amp;quot; ++ show p ++ &amp;quot; \\/ &amp;quot; ++ show q ++ &amp;quot;)&amp;quot;&lt;br /&gt;
    show (Impl p q) = &amp;quot;(&amp;quot; ++ show p ++ &amp;quot; --&amp;gt; &amp;quot; ++ show q ++ &amp;quot;)&amp;quot;&lt;br /&gt;
    show (Equi p q) = &amp;quot;(&amp;quot; ++ show p ++ &amp;quot; &amp;lt;--&amp;gt; &amp;quot; ++ show q ++ &amp;quot;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2: Definir las siguientes fórmulas proposicionales&lt;br /&gt;
-- atómicas: p, p1, p2, q, r, s, t y u.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
p, p1, p2, q, r, s, t, u :: Prop&lt;br /&gt;
p  = Atom &amp;quot;p&amp;quot;&lt;br /&gt;
p1 = Atom &amp;quot;p1&amp;quot;&lt;br /&gt;
p2 = Atom &amp;quot;p2&amp;quot;&lt;br /&gt;
q  = Atom &amp;quot;q&amp;quot;&lt;br /&gt;
r  = Atom &amp;quot;r&amp;quot;&lt;br /&gt;
s  = Atom &amp;quot;s&amp;quot;&lt;br /&gt;
t  = Atom &amp;quot;t&amp;quot;&lt;br /&gt;
u  = Atom &amp;quot;u&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3: Definir la función&lt;br /&gt;
--    no :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (no f) es la negación de f.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
no :: Prop -&amp;gt; Prop&lt;br /&gt;
no = Neg&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4: Definir los siguientes operadores&lt;br /&gt;
--    (/\), (\/), (--&amp;gt;), (&amp;lt;--&amp;gt;) :: Prop -&amp;gt; Prop -&amp;gt; Prop&lt;br /&gt;
-- tales que&lt;br /&gt;
--    f /\ g      es la conjunción de f y g&lt;br /&gt;
--    f \/ g      es la disyunción de f y g&lt;br /&gt;
--    f --&amp;gt; g     es la implicación de f a g&lt;br /&gt;
--    f &amp;lt;--&amp;gt; g    es la equivalencia entre f y g&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
infixr 5 \/&lt;br /&gt;
infixr 4 /\&lt;br /&gt;
infixr 3 --&amp;gt;&lt;br /&gt;
infixr 2 &amp;lt;--&amp;gt;&lt;br /&gt;
(/\), (\/), (--&amp;gt;), (&amp;lt;--&amp;gt;) :: Prop -&amp;gt; Prop -&amp;gt; Prop&lt;br /&gt;
(/\)   = Conj&lt;br /&gt;
(\/)   = Disj&lt;br /&gt;
(--&amp;gt;)  = Impl&lt;br /&gt;
(&amp;lt;--&amp;gt;) = Equi&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Símbolos proposicionales de una fórmula                            --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5: Definir la función&lt;br /&gt;
--    símbolosPropFórm :: Prop -&amp;gt; [Prop]&lt;br /&gt;
-- tal que (símbolosPropFórm f) es el conjunto formado por todos los&lt;br /&gt;
-- símbolos proposicionales que aparecen en f. Por ejemplo,&lt;br /&gt;
--    símbolosPropFórm (p /\ q --&amp;gt; p)  ==&amp;gt; [p,q]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
simbolosPropForm :: Prop -&amp;gt; [Prop]&lt;br /&gt;
simbolosPropForm (Atom p) = [Atom p]&lt;br /&gt;
simbolosPropForm (Neg p) = simbolosPropForm p&lt;br /&gt;
simbolosPropForm (Conj p q) = nub ((simbolosPropForm p) ++ (simbolosPropForm q))&lt;br /&gt;
simbolosPropForm (Disj p q) = nub ((simbolosPropForm p) ++ (simbolosPropForm q))&lt;br /&gt;
simbolosPropForm (Impl p q) = nub ((simbolosPropForm p) ++ (simbolosPropForm q))&lt;br /&gt;
simbolosPropForm (Equi p q) = nub ((simbolosPropForm p) ++ (simbolosPropForm q))&lt;br /&gt;
&lt;br /&gt;
-- Luis Curquejo&lt;br /&gt;
&lt;br /&gt;
-- Comentario: La definición se puede mejorar usando la función union.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Interpretaciones                                                   --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6: Definir el tipo de datos Interpretación para&lt;br /&gt;
-- representar las interpretaciones como listas de fórmulas atómicas.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
type Interpretación = [Prop]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Significado de una fórmula en una interpretación                   --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7: Definir la función&lt;br /&gt;
--    significado :: Prop -&amp;gt; Interpretación -&amp;gt; Bool&lt;br /&gt;
-- tal que (significado f i) es el significado de f en i. Por ejemplo,&lt;br /&gt;
--    significado ((p \/ q) /\ ((no q) \/ r)) [r]    ==&amp;gt;  False&lt;br /&gt;
--    significado ((p \/ q) /\ ((no q) \/ r)) [p,r]  ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
significado :: Prop -&amp;gt; Interpretacion -&amp;gt; Bool&lt;br /&gt;
significado (Atom f) xs | elem (Atom f) xs = True&lt;br /&gt;
                        | otherwise = False&lt;br /&gt;
significado (Neg f) xs = not (significado f xs)&lt;br /&gt;
significado (Conj f q) xs = (significado f xs) &amp;amp;&amp;amp; (significado q xs)&lt;br /&gt;
significado (Disj f q) xs = (significado f xs) || (significado q xs)&lt;br /&gt;
significado (Impl f q) xs | (significado f xs) == True = significado q xs&lt;br /&gt;
                          | otherwise = True&lt;br /&gt;
significado (Equi f q) xs = (significado f xs) == (significado q xs)&lt;br /&gt;
&lt;br /&gt;
--Luis Curquejo&lt;br /&gt;
&lt;br /&gt;
-- Comentario: la definición se puede simplificar.&lt;br /&gt;
&lt;br /&gt;
significado :: Prop -&amp;gt; Interpretacion -&amp;gt; Bool&lt;br /&gt;
significado (Atom p) i = elem (Atom p) i&lt;br /&gt;
significado (Neg p) i = not (significado p i)&lt;br /&gt;
significado (Conj p q) i = (significado p i)&amp;amp;&amp;amp;(significado q i)&lt;br /&gt;
significado (Disj p q) i = (significado p i)||(significado q i)&lt;br /&gt;
significado (Impl p q) i | significado p i = significado q i&lt;br /&gt;
                         | otherwise = True&lt;br /&gt;
significado (Equi p q) i = (significado p i)==(significado q i)&lt;br /&gt;
&lt;br /&gt;
--María Dolores Mateo Ceballos&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Interpretaciones de una fórmula                                    --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8: Definir la función&lt;br /&gt;
--    subconjuntos :: [a] -&amp;gt; [[a]]&lt;br /&gt;
-- tal que (subconjuntos x) es la lista de los subconjuntos de x. Por&lt;br /&gt;
-- ejmplo, &lt;br /&gt;
--    subconjuntos &amp;quot;abc&amp;quot;  ==&amp;gt;  [&amp;quot;abc&amp;quot;,&amp;quot;ab&amp;quot;,&amp;quot;ac&amp;quot;,&amp;quot;a&amp;quot;,&amp;quot;bc&amp;quot;,&amp;quot;b&amp;quot;,&amp;quot;c&amp;quot;,&amp;quot;&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
subconjuntos :: [a] -&amp;gt; [[a]]&lt;br /&gt;
subconjuntos [] = [[]]&lt;br /&gt;
subconjuntos [a] = [[],[a]]&lt;br /&gt;
subconjuntos (x:xs) = [x:ys  | ys &amp;lt;- sub] ++ sub&lt;br /&gt;
                      where sub = subconjuntos xs&lt;br /&gt;
-- Me acordaba de primero (seguro) Javier Rodríguez Vivas&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9: Definir la función&lt;br /&gt;
--    interpretacionesFórm :: Prop -&amp;gt; [Interpretación]&lt;br /&gt;
-- tal que (interpretacionesFórm f) es la lista de todas las&lt;br /&gt;
-- interpretaciones de f. Por ejemplo, &lt;br /&gt;
--    interpretacionesFórm (p /\ q --&amp;gt; p)  ==&amp;gt;  [[p,q],[p],[q],[]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interpretacionesForm :: Prop -&amp;gt; [Interpretacion]&lt;br /&gt;
interpretacionesForm f = subconjuntos (simbolosPropForm f)&lt;br /&gt;
&lt;br /&gt;
--Luis Curquejo&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Modelos de fórmulas                                                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10: Definir la función&lt;br /&gt;
--    esModeloFórmula :: Interpretación -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esModeloFórmula i f) se verifica si i es un modelo de f. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esModeloFórmula [r]   ((p \/ q) /\ ((no q) \/ r))    ==&amp;gt;  False&lt;br /&gt;
--    esModeloFórmula [p,r] ((p \/ q) /\ ((no q) \/ r))    ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esModeloFormula :: Interpretacion -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esModeloFormula i f = significado f i&lt;br /&gt;
&lt;br /&gt;
-- Luis Curquejo&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11: Definir la función&lt;br /&gt;
--    modelosFórmula :: Prop -&amp;gt; [Interpretación]&lt;br /&gt;
-- tal que (modelosFórmula f) es la lista de todas las interpretaciones&lt;br /&gt;
-- de f que son modelo de F. Por ejemplo,&lt;br /&gt;
--    modelosFórmula ((p \/ q) /\ ((no q) \/ r)) &lt;br /&gt;
--    ==&amp;gt; [[p,q,r],[p,r],[p],[q,r]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
modelosFórmula :: Prop -&amp;gt; [Interpretación]&lt;br /&gt;
modelosFórmula f = [i | i &amp;lt;- subconjuntos (símbolosPropFórm f), esModeloFórmula i f]&lt;br /&gt;
&lt;br /&gt;
-- Elisa Mazuelos Jiménez&lt;br /&gt;
&lt;br /&gt;
-- Comentario: la definición se puede simplificar usando interpretacionesForm.&lt;br /&gt;
&lt;br /&gt;
modelosFormula :: Prop -&amp;gt; [Interpretacion]&lt;br /&gt;
modelosFormula f = [xs|xs&amp;lt;-(interpretacionesForm f), esModeloFormula xs f]&lt;br /&gt;
&lt;br /&gt;
--María Dolores Mateo Ceballos&lt;br /&gt;
&lt;br /&gt;
modelosFormula :: Prop -&amp;gt; [Interpretacion]&lt;br /&gt;
modelosFormula f = aux (interpretacionesForm f)&lt;br /&gt;
                   where aux [] = []&lt;br /&gt;
                         aux (x:xs) | esModeloFormula x f = x : aux xs&lt;br /&gt;
                                    | otherwise = aux xs&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Fórmulas válidas, satisfacibles e insatisfacibles                  --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12: Definir la función&lt;br /&gt;
--    esVálida :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esVálida f) se verifica si f es válida. Por ejemplo,&lt;br /&gt;
--    esVálida (p --&amp;gt; p)                 ==&amp;gt;  True&lt;br /&gt;
--    esVálida (p --&amp;gt; q)                 ==&amp;gt;  False&lt;br /&gt;
--    esVálida ((p --&amp;gt; q) \/ (q --&amp;gt; p))  ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esValida :: Prop -&amp;gt; Bool&lt;br /&gt;
esValida f = subconjuntos (simPro f) == modelosFormula f &lt;br /&gt;
&lt;br /&gt;
-- Javier Rodríguez Vivas&lt;br /&gt;
&lt;br /&gt;
-- Comentario: la definición se puede simplificar usando interpretacionesForm.&lt;br /&gt;
 &lt;br /&gt;
esValida :: Prop -&amp;gt; Bool&lt;br /&gt;
esValida f = modelosFormula f == interpretacionesForm f&lt;br /&gt;
&lt;br /&gt;
-- María Dolores Mateo Ceballos &lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13: Definir la función&lt;br /&gt;
--    esInsatisfacible :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esInsatisfacible f) se verifica si f es insatisfacible. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esInsatisfacible (p /\ (no p))             ==&amp;gt;  True&lt;br /&gt;
--    esInsatisfacible ((p --&amp;gt; q) /\ (q --&amp;gt; r))  ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esInsatisfacible :: Prop -&amp;gt; Bool&lt;br /&gt;
esInsatisfacible f = null (modelosFórmula f)&lt;br /&gt;
--Emilio Martinez Rivero&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
esInsatisfacible :: Prop -&amp;gt; Bool&lt;br /&gt;
esInsatisfacible f = modelosFormula f == []&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14: Definir la función&lt;br /&gt;
--    esSatisfacible :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esSatisfacible f) se verifica si f es satisfacible. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esSatisfacible (p /\ (no p))             ==&amp;gt;  False&lt;br /&gt;
--    esSatisfacible ((p --&amp;gt; q) /\ (q --&amp;gt; r))  ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esSatisfacible :: Prop -&amp;gt; Bool&lt;br /&gt;
esSatisfacible = not . EsInsatisfacible&lt;br /&gt;
--Emilio Martinez Rivero&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
esSatisfacible :: Prop -&amp;gt; Bool&lt;br /&gt;
esSatisfacible f = modelosFormula f /= []&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Símbolos proposicionales de un conjunto de fórmulas                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15: Definir la función&lt;br /&gt;
--    uniónGeneral :: Eq a =&amp;gt; [[a]] -&amp;gt; [a]&lt;br /&gt;
-- tal que (uniónGeneral x) es la unión de los conjuntos de la lista de&lt;br /&gt;
-- conjuntos x. Por ejemplo,&lt;br /&gt;
--    uniónGeneral []                 ==&amp;gt;  []&lt;br /&gt;
--    uniónGeneral [[1]]              ==&amp;gt;  [1]&lt;br /&gt;
--    uniónGeneral [[1],[1,2],[2,3]]  ==&amp;gt;  [1,2,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
unionGeneral :: Eq a =&amp;gt; [[a]] -&amp;gt; [a]&lt;br /&gt;
unionGeneral [] = []&lt;br /&gt;
unionGeneral (x:xs) = nub(x++ unionGeneral xs)&lt;br /&gt;
&lt;br /&gt;
--Javier Rodríguez Vivas&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
-- Comentario: La definición se puede mejorar usando la función union.&lt;br /&gt;
&lt;br /&gt;
uniónGeneral :: Eq a =&amp;gt; [[a]] -&amp;gt; [a]&lt;br /&gt;
uniónGeneral = nub . concat&lt;br /&gt;
&lt;br /&gt;
-- Elisa Mazuelos Jiménez&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16: Definir la función&lt;br /&gt;
--    símbolosPropConj :: [Prop] -&amp;gt; [Prop]&lt;br /&gt;
-- tal que (símbolosPropConj s) es el conjunto de los símbolos&lt;br /&gt;
-- proposiciones de s. Por ejemplo,&lt;br /&gt;
--    símbolosPropConj [p /\ q --&amp;gt; r, p --&amp;gt; s]  ==&amp;gt;  [p,q,r,s]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
símbolosPropConj :: [Prop] -&amp;gt; [Prop]&lt;br /&gt;
símbolosPropConj s = uniónGeneral [simb x | x&amp;lt;-s]&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez Rivero&lt;br /&gt;
&lt;br /&gt;
simbolosPropConj :: [Prop] -&amp;gt; [Prop]&lt;br /&gt;
simbolosPropConj s = nub (aux s)&lt;br /&gt;
                    where aux [] = []&lt;br /&gt;
                          aux (x:xs) = simbolosPropForm x ++&lt;br /&gt;
                                       simbolosPropConj xs&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Interpretaciones de un conjunto de fórmulas                        --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17: Definir la función&lt;br /&gt;
--    interpretacionesConjunto :: [Prop] -&amp;gt; [Interpretación]&lt;br /&gt;
-- tal que (interpretacionesConjunto s) es la lista de las&lt;br /&gt;
-- interpretaciones de s. Por ejemplo,&lt;br /&gt;
--    interpretacionesConjunto [p --&amp;gt; q, q --&amp;gt; r]&lt;br /&gt;
--    ==&amp;gt; [[p,q,r],[p,q],[p,r],[p],[q,r],[q],[r],[]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interpretacionesConjunto :: [Prop] -&amp;gt; [Interpretación]&lt;br /&gt;
interpretacionesConjunto = subconjuntos . símbolosPropConj&lt;br /&gt;
&lt;br /&gt;
-- Elisa Mazuelos Jiménez&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Modelos de conjuntos de fórmulas                                   --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18: Definir la función&lt;br /&gt;
--    esModeloConjunto :: Interpretación -&amp;gt; [Prop] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esModeloConjunto i s) se verifica si i es modelo de s. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esModeloConjunto [p,r] [(p \/ q) /\ ((no q) \/ r), q --&amp;gt; r]&lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
--    esModeloConjunto [p,r] [(p \/ q) /\ ((no q) \/ r), r --&amp;gt; q]&lt;br /&gt;
--    ==&amp;gt; False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esModeloConjunto :: InterpretaciÃ³n -&amp;gt; [Prop] -&amp;gt; Bool&lt;br /&gt;
esModeloConjunto i s = elem False xs == False&lt;br /&gt;
   where xs = [esModeloFormula i f | f&amp;lt;-s]&lt;br /&gt;
&lt;br /&gt;
--Javier Rodriguez Vivas&lt;br /&gt;
&lt;br /&gt;
-- Comentario: la definición se puede mejorar.&lt;br /&gt;
&lt;br /&gt;
esModeloConjunto :: Interpretacion -&amp;gt; [Prop] -&amp;gt; Bool&lt;br /&gt;
esModeloConjunto i s = and [esModeloFormula i f| f&amp;lt;-s]&lt;br /&gt;
&lt;br /&gt;
--María Dolores Mateo Ceballos&lt;br /&gt;
&lt;br /&gt;
esModeloConjunto :: Interpretacion -&amp;gt; [Prop] -&amp;gt; Bool&lt;br /&gt;
esModeloConjunto i s = aux i s&lt;br /&gt;
                      where aux i []  = True&lt;br /&gt;
                            aux i  (x:xs)  = esModeloFormula i x &amp;amp;&amp;amp; &lt;br /&gt;
                                              esModeloConjunto i xs&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19: Definir la función&lt;br /&gt;
--    modelosConjunto :: [Prop] -&amp;gt; [Interpretación]&lt;br /&gt;
-- tal que (modelosConjunto s) es la lista de modelos del conjunto&lt;br /&gt;
-- s. Por ejemplo,&lt;br /&gt;
--    modelosConjunto [(p \/ q) /\ ((no q) \/ r), q --&amp;gt; r]&lt;br /&gt;
--    ==&amp;gt; [[p,q,r],[p,r],[p],[q,r]]&lt;br /&gt;
--    modelosConjunto [(p \/ q) /\ ((no q) \/ r), r --&amp;gt; q]&lt;br /&gt;
--    ==&amp;gt; [[p,q,r],[p],[q,r]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
modelosConjunto :: [Prop] -&amp;gt; [Interpretación]&lt;br /&gt;
modelosConjunto s = [x|x&amp;lt;-interpretacionesConjunto s, esModeloConjunto x s]&lt;br /&gt;
--Emilio Martinez Rivero&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Conjuntos consistentes e inconsistentes de fórmulas                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20: Definir la función&lt;br /&gt;
--    esConsistente :: [Prop] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esConsistente s) se verifica si s es consistente. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esConsistente [(p \/ q) /\ ((no q) \/ r), p --&amp;gt; r]        &lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
--    esConsistente [(p \/ q) /\ ((no q) \/ r), p --&amp;gt; r, no r]  &lt;br /&gt;
--    ==&amp;gt; False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esConsistente :: [Prop] -&amp;gt; Bool&lt;br /&gt;
esConsistente s = or [esModeloConjunto x s | x &amp;lt;- (modelosConjunto s)]&lt;br /&gt;
&lt;br /&gt;
-- Elisa Mazuelos Jiménez&lt;br /&gt;
&lt;br /&gt;
-- Comentario: La definición se puede mejorar.&lt;br /&gt;
&lt;br /&gt;
esConsistente :: [Prop] -&amp;gt; Bool&lt;br /&gt;
esConsistente s = modelosConjunto s /= []&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 21: Definir la función&lt;br /&gt;
--    esInconsistente :: [Prop] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esInconsistente s) se verifica si s es inconsistente. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esInconsistente [(p \/ q) /\ ((no q) \/ r), p --&amp;gt; r]        &lt;br /&gt;
--    ==&amp;gt; False&lt;br /&gt;
--    esInconsistente [(p \/ q) /\ ((no q) \/ r), p --&amp;gt; r, no r]  &lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esInconsistente :: [Prop] -&amp;gt; Bool&lt;br /&gt;
esInconsistente = not . esConsistente&lt;br /&gt;
&lt;br /&gt;
-- Elisa Mazuelos Jiménez&lt;br /&gt;
&lt;br /&gt;
esInconsistente :: [Prop] -&amp;gt; Bool&lt;br /&gt;
esInconsistente s = null (modelosConjunto s)&lt;br /&gt;
&lt;br /&gt;
-- María Dolores Mateo Ceballos&lt;br /&gt;
&lt;br /&gt;
esInconsistente :: [Prop] -&amp;gt; Bool&lt;br /&gt;
esInconsistente s = modelosConjunto s == []&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Consecuencia lógica                                                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22: Definir la función&lt;br /&gt;
--    esConsecuencia :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esConsecuencia s f) se verifica si f es consecuencia de&lt;br /&gt;
-- s. Por ejemplo,&lt;br /&gt;
--    esConsecuencia [p --&amp;gt; q, q --&amp;gt; r] (p --&amp;gt; r)  ==&amp;gt;  True&lt;br /&gt;
--    esConsecuencia [p] (p /\ q)                  ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esConsecuencia :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esConsecuencia s f = and [esModeloFórmula x f| x&amp;lt;-modelosConjunto s]&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez Rivero&lt;br /&gt;
&lt;br /&gt;
-- Comentario: la definición no es correcta.&lt;br /&gt;
&lt;br /&gt;
esConsecuencia :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esConsecuencia s f = esInconsistente ((no f):s)&lt;br /&gt;
&lt;br /&gt;
--María Dolores Mateo Ceballos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=103</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=103"/>
		<updated>2015-02-13T16:22:26Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- LMF 2014-15: Rel_1.hs (9 de Febrero de 2015)&lt;br /&gt;
-- Introducción a la programación con Haskell.&lt;br /&gt;
-- Departamento de Ciencias de la Computación e I.A.&lt;br /&gt;
-- Universidad de Sevilla&lt;br /&gt;
-- =====================================================================&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- En esta relación de ejercicios hacemos una introducción a Haskell, en&lt;br /&gt;
-- la que se recuerdan:&lt;br /&gt;
-- * las definiciones elementales de funciones,&lt;br /&gt;
-- * las definiciones de funciones por comprensión,&lt;br /&gt;
-- * las definiciones de funciones por recursión y&lt;br /&gt;
-- * los tipos de datos.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Importación de librerías auxiliares                                  &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
import Test.QuickCheck&lt;br /&gt;
import Data.Char&lt;br /&gt;
import Control.Monad&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
-- Miriam R.&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
-- Miriam R.&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
rota n xs= (drop n xs) ++ (take n xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena &lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.1. La disyunción excluyente xor de dos fórmulas se&lt;br /&gt;
-- verifica si una es verdadera y la otra es falsa.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función xor_1 que calcule la disyunción excluyente a&lt;br /&gt;
-- partir de la tabla de verdad. Usar 4 ecuaciones, una por cada línea&lt;br /&gt;
-- de la tabla. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_1 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_1 True True = False&lt;br /&gt;
xor_1 True False = True&lt;br /&gt;
xor_1 False True = True&lt;br /&gt;
xor_1 False False = False&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
&lt;br /&gt;
xor_1 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_1 x y   |x== True &amp;amp;&amp;amp; y== True = False &lt;br /&gt;
            |x== True &amp;amp;&amp;amp; y== False = True&lt;br /&gt;
            |x== False &amp;amp;&amp;amp; y== True = True&lt;br /&gt;
            |x== False &amp;amp;&amp;amp; y== False = False&lt;br /&gt;
-- Jaime Alberto &lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.2. Definir la función xor_2 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la tabla de verdad y patrones. Usar 2&lt;br /&gt;
-- ecuaciones, una por cada valor del primer argumento.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_2 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2 True x = if x then False else True&lt;br /&gt;
xor_2 False x = if x then True else False&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Realizado por Nikola Drousie:&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
&lt;br /&gt;
xor_2&amp;#039; True x = not x&lt;br /&gt;
xor_2&amp;#039; False x = x&lt;br /&gt;
&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
xor_2&amp;#039;&amp;#039; :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2&amp;#039;&amp;#039; x y |  x== True &amp;amp;&amp;amp; y== True || x==False &amp;amp;&amp;amp; y== False = False&lt;br /&gt;
          |  x== True &amp;amp;&amp;amp; y== False || x== False &amp;amp;&amp;amp; y== True = True  &lt;br /&gt;
&lt;br /&gt;
-- Elisa Mazuelos Jiménez:&lt;br /&gt;
&lt;br /&gt;
xor_2 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2 True x | x == True = False&lt;br /&gt;
             | otherwise = True&lt;br /&gt;
xor_2 False x | x == False = False&lt;br /&gt;
              | otherwise = True&lt;br /&gt;
&lt;br /&gt;
-- Esta última no es correcta (10/02/2015).&lt;br /&gt;
-- Corregida, gracias (10/02/2015).&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.3. Definir la función xor_3 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la disyunción (||), conjunción (&amp;amp;&amp;amp;) y negación&lt;br /&gt;
-- (not). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_3 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_3 x y = (x &amp;amp;&amp;amp; (not y)) || ((not x) &amp;amp;&amp;amp; y)&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-----------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.4. Definir la función xor_4 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de desigualdad (/=). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_4 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_4 x y = x /= y&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir, por comprensión, la función&lt;br /&gt;
--    sumaDeCuadrados :: Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (sumaDeCuadrados n) es la suma de los cuadrados de los&lt;br /&gt;
-- primeros n números; es decir, 1^2 + 2^2 + ... + 100^2. Por ejemplo,&lt;br /&gt;
--    sumaDeCuadrados 3    ==  14&lt;br /&gt;
--    sumaDeCuadrados 100  ==  338350&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaDeCuadrados n = sum [x^2 | x &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Una terna (x,y,z) de enteros positivos es pitagórica si &lt;br /&gt;
-- x^2 + y^2 = z^2. Usando una lista por comprensión, definir la función&lt;br /&gt;
--    pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
-- tal que (pitagoricas n) es la lista de todas las ternas pitagóricas&lt;br /&gt;
-- cuyas componentes están entre 1 y n. Por ejemplo, &lt;br /&gt;
--    *Main&amp;gt; pitagoricas 10 &lt;br /&gt;
--    [(3,4,5),(4,3,5),(6,8,10),(8,6,10)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
pitagoricas n = [(x,y,z) | x &amp;lt;- [1..n], y &amp;lt;- [1..n], z &amp;lt;- [1..n], x^2+y^2 == z^2]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto &lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- Luis Curquejo. Solución acotando ligeramente los elementos x e y.&lt;br /&gt;
&lt;br /&gt;
pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
pitagoricas n = [ (x,y,z) | z &amp;lt;- [1..n], x &amp;lt;- [1..z], y &amp;lt;- [1..z] , x^2 + y^2 == z^2]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un entero positivo es perfecto si es igual a la suma de&lt;br /&gt;
-- sus factores, excluyendo el propio número. Usando una lista por&lt;br /&gt;
-- comprensión y la función factores (del tema), definir la función &lt;br /&gt;
--    perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (perfectos n) es la lista de todos los números perfectos&lt;br /&gt;
-- menores que n. Por ejemplo: &lt;br /&gt;
--    *Main&amp;gt; perfectos 500&lt;br /&gt;
--    [6,28,496]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos n = [x | x &amp;lt;- [1..n], esPerfecto x]&lt;br /&gt;
&lt;br /&gt;
-- Definimos las funciones auxiliares:&lt;br /&gt;
&lt;br /&gt;
factores :: Int -&amp;gt; [Int]&lt;br /&gt;
factores n = [x | x &amp;lt;- [1..n], n `mod` x == 0]&lt;br /&gt;
&lt;br /&gt;
esPerfecto :: Int -&amp;gt; Bool&lt;br /&gt;
esPerfecto n = sum (factores n) == 2*n&lt;br /&gt;
&lt;br /&gt;
-- También podríamos definirla como:&lt;br /&gt;
&lt;br /&gt;
perfectos2 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos2 n = filter (esPerfecto) [1..n]&lt;br /&gt;
&lt;br /&gt;
-- Podemos comprobar que ambas definiciones son equivalentes:&lt;br /&gt;
&lt;br /&gt;
prop_perfectos n = perfectos n == perfectos2 n&lt;br /&gt;
&lt;br /&gt;
-- Si queremos podemos comparar ambos algoritmos:&lt;br /&gt;
&lt;br /&gt;
-- *Main&amp;gt; perfectos 500&lt;br /&gt;
-- [6,28,496]&lt;br /&gt;
-- (1.44 secs, 15935120 bytes)&lt;br /&gt;
&lt;br /&gt;
-- *Main&amp;gt; perfectos2 500&lt;br /&gt;
-- [6,28,496]&lt;br /&gt;
-- (0.22 secs, 14803544 bytes)&lt;br /&gt;
&lt;br /&gt;
-- Es decir, el segundo es más eficiente.&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
perfectos x = [y|y&amp;lt;-[1..x-1], serPerfecto y]&lt;br /&gt;
serPerfecto x = x==sum (factores&amp;#039; x)&lt;br /&gt;
factores x = [y|y&amp;lt;-[1..x], rem x y == 0]&lt;br /&gt;
factores&amp;#039; x = init (factores x)&lt;br /&gt;
&lt;br /&gt;
-- Luis Curquejo&lt;br /&gt;
&lt;br /&gt;
perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos n = [ x | x &amp;lt;- [1..n], x == sum (factoresred x)]&lt;br /&gt;
    where factoresred x = [ y | y &amp;lt;- [1..x-1], rem x y == 0] &lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
perfectos1 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos1 n = [ x | x &amp;lt;- [1..n], &lt;br /&gt;
                x == sum (tail(reverse (factores x)))]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
factores1 n = [x | x &amp;lt;- [1..n], rem n x == 0] &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir, por comprensión, la función&lt;br /&gt;
--    cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosC xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosC [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosC xs = [x^2 | x &amp;lt;- xs]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir, por recursión, la función&lt;br /&gt;
--    cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosR xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosR [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosR [] = []&lt;br /&gt;
cuadradosR (x:xs) = (x^2):(cuadradosR xs)&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.1. Definir, por comprensión, la función&lt;br /&gt;
--    imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesC xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesC [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesC xs = [x | x &amp;lt;- xs, odd x]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.2. Definir, por recursión, la función&lt;br /&gt;
--    imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesR xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesR [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesR [] = []&lt;br /&gt;
imparesR (x:xs) | odd x = x:(imparesR xs)&lt;br /&gt;
                | otherwise = imparesR xs&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir, por comprensión, la función&lt;br /&gt;
--    sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
-- tal que (sumaConsecutivos xs) es la suma de los pares de elementos&lt;br /&gt;
-- consecutivos de la lista xs. Por ejemplo,&lt;br /&gt;
--    sumaConsecutivos [3,1,5,2]  ==  [4,6,7]&lt;br /&gt;
--    sumaConsecutivos [3]        ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos xs = [x+y | (x,y) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
sumaConsecutivos1 :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos1 (x:xs) = [ (x+y) | (x,y) &amp;lt;- zip (x:xs) xs]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.  La distancia de Hamming entre dos listas es el número&lt;br /&gt;
-- de posiciones en que los correspondientes elementos son&lt;br /&gt;
-- distintos. Por ejemplo, la distancia de Hamming entre &amp;quot;roma&amp;quot; y &amp;quot;loba&amp;quot; &lt;br /&gt;
-- es 2 (porque hay 2 posiciones en las que los elementos&lt;br /&gt;
-- correspondientes son distintos: la 1ª y la 3ª). &lt;br /&gt;
--    &lt;br /&gt;
-- Definir la función distancia tal que (distancia xs ys) es la &lt;br /&gt;
-- distancia de Hamming entre xs e ys. Por ejemplo,&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;ron&amp;quot;     ==  1&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;cama&amp;quot;    ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;rama&amp;quot;    ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
distancia :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia xs ys = length (distanciaAux xs ys)&lt;br /&gt;
&lt;br /&gt;
-- Definimos la función auxiliar:&lt;br /&gt;
&lt;br /&gt;
distanciaAux :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; [Int]&lt;br /&gt;
distanciaAux xs [] = []&lt;br /&gt;
distanciaAux [] ys = []&lt;br /&gt;
distanciaAux (x:xs) (y:ys) | x == y = distanciaAux xs ys&lt;br /&gt;
                           | otherwise = [1]++(distanciaAux xs ys)&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- María Dolores Mateo Ceballos &lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- Aunque es parecido al anterior, sin usar función auxiliar:&lt;br /&gt;
&lt;br /&gt;
distancia :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia [] _ = 0&lt;br /&gt;
distancia _ [] = 0&lt;br /&gt;
distancia (x:xs) (y:ys) | x==y = distancia xs ys &lt;br /&gt;
                        | otherwise = 1 + distancia xs ys &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Realizado por Nikola Drousie:&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
&lt;br /&gt;
distancia&amp;#039; :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia&amp;#039; xs ys = sum [ 1 | (a,b)&amp;lt;-zip xs ys, a/=b]&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función&lt;br /&gt;
--    factoriales :: [Integer]&lt;br /&gt;
-- tal que factoriales es la lista de los factoriales. Por ejemplo,&lt;br /&gt;
--    take 10 factoriales  ==  [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Por comprensión:&lt;br /&gt;
&lt;br /&gt;
factoriales1 :: [Integer]&lt;br /&gt;
factoriales1 = [1]++[product [1..n] | n &amp;lt;-[1..]]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
factoriales1 = [fact x|x&amp;lt;-[0..]]&lt;br /&gt;
fact 0 = 1&lt;br /&gt;
fact x = x*fact (x-1)&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Usando zipWith:&lt;br /&gt;
&lt;br /&gt;
factoriales2 :: [Integer]&lt;br /&gt;
factoriales2 = [1]++(zipWith f [1..] [2..])&lt;br /&gt;
               where f n y = product ([1..n]++[y])&lt;br /&gt;
&lt;br /&gt;
-- Emilio Martinez&lt;br /&gt;
&lt;br /&gt;
-- Por recursiÃ³n:&lt;br /&gt;
&lt;br /&gt;
factoriales3 :: [Integer]&lt;br /&gt;
factoriales3 = 1:(aux 1 [1..])&lt;br /&gt;
               where aux n (x:xs)= (n*x):(aux (n*x) xs)&lt;br /&gt;
&lt;br /&gt;
-- Emilio Martinez&lt;br /&gt;
&lt;br /&gt;
-- Usando scanl1:&lt;br /&gt;
&lt;br /&gt;
factoriales4 :: [Integer]&lt;br /&gt;
factoriales4 = scanl  (*) 1 [1..]&lt;br /&gt;
&lt;br /&gt;
-- Emilio Martinez&lt;br /&gt;
&lt;br /&gt;
-- Usando iterate:&lt;br /&gt;
-- Fran Franco&lt;br /&gt;
factoriales5 :: [Integer]&lt;br /&gt;
factoriales5 = map snd (iterate (\(x,y)-&amp;gt;(x+1,x*y)) (1,1))&lt;br /&gt;
&lt;br /&gt;
-- Comparación de los tiempos de evaluación:&lt;br /&gt;
&lt;br /&gt;
-- *Main&amp;gt; take 10 factoriales1&lt;br /&gt;
-- [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
&lt;br /&gt;
-- (0.02 secs, 0 bytes)&lt;br /&gt;
&lt;br /&gt;
-- *Main&amp;gt; take 10 factoriales2&lt;br /&gt;
-- [1,2,6,24,120,720,5040,40320,362880,3628800]&lt;br /&gt;
-- (0.00 secs, 0 bytes)&lt;br /&gt;
&lt;br /&gt;
-- *Main&amp;gt; take 10 factoriales3&lt;br /&gt;
-- [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
-- (0.00 secs, 528020 bytes)&lt;br /&gt;
&lt;br /&gt;
-- *Main&amp;gt; take 10 factoriales4&lt;br /&gt;
-- [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
-- (0.00 secs, 0 bytes)&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.0. En los siguientes ejercicios se demostrarán&lt;br /&gt;
-- propiedades de los árboles binarios definidos como sigue&lt;br /&gt;
--    data Arbol a = Hoja &lt;br /&gt;
--                 | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
--                 deriving (Show, Eq)&lt;br /&gt;
-- Como ejemplos se usarán los árboles&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
data Arbol a = Hoja &lt;br /&gt;
             | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
             deriving (Show, Eq)&lt;br /&gt;
 &lt;br /&gt;
arbol_1 = Nodo 9&lt;br /&gt;
               (Nodo 3 &lt;br /&gt;
                     (Nodo 2 Hoja Hoja) &lt;br /&gt;
                     (Nodo 4 Hoja Hoja)) &lt;br /&gt;
               (Nodo 7 Hoja Hoja)&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.1. Definir la función&lt;br /&gt;
--    espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
-- tal que (espejo x) es la imagen especular del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; espejo arbol_1&lt;br /&gt;
--    Nodo 9 &lt;br /&gt;
--         (Nodo 7 Hoja Hoja) &lt;br /&gt;
--         (Nodo 3 &lt;br /&gt;
--               (Nodo 4 Hoja Hoja) &lt;br /&gt;
--               (Nodo 2 Hoja Hoja))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
espejo Hoja = Hoja&lt;br /&gt;
espejo (Nodo a i d)= Nodo a (espejo d) (espejo i)&lt;br /&gt;
&lt;br /&gt;
-- Emilio Martinez&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto &lt;br /&gt;
-- Francisco Javier Carmona &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.2. Comprobar con QuickCheck que para todo Ã¡rbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
prop_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_espejo n = (espejo . espejo) n == n&lt;br /&gt;
 &lt;br /&gt;
-- quickCheck prop_espejo&lt;br /&gt;
-- +++ OK passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
-- Emilio Martinez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
prop_espejo x = espejo (espejo x)==x&lt;br /&gt;
quickCheck prop_espejo&lt;br /&gt;
+++ OK, passed 100 tests.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.3. Demostrar por inducciÃ³n que para todo Ã¡rbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
{-&lt;br /&gt;
 DemostraciÃ³n por inducciÃ³n en x&lt;br /&gt;
&lt;br /&gt;
[Caso base: Hoja]&lt;br /&gt;
&lt;br /&gt;
espejo (espejo Hoja) = espejo (Hoja) por definicion de espejo Hoja&lt;br /&gt;
espejo (Hoja) = Hoja por definicion de espejo Hoja&lt;br /&gt;
&lt;br /&gt;
Luego  espejo (espejo Hoja)= Hoja &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
[Suponemos que espejo (espejo x) = x , para todo x arbol]&lt;br /&gt;
&lt;br /&gt;
[Sea N a i d con i, d arboles]&lt;br /&gt;
&lt;br /&gt;
espejo (espejo (N a i d))= espejo (N a (espejo d) (espejo i)) por def&lt;br /&gt;
espejo (N a (espejo d)(espejo i)) = N a (espejo (espejo i))&lt;br /&gt;
                                                        (espejo(espejo&lt;br /&gt;
                                                                d)) por def&lt;br /&gt;
&lt;br /&gt;
como i, d son arboles por hipótesis de induccion&lt;br /&gt;
&lt;br /&gt;
= N a (espejo (espejo i)) (espejo (espejo d))&lt;br /&gt;
= N a i d&lt;br /&gt;
&lt;br /&gt;
Luego espejo (espejo (N a i d)) = N a i d.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
Emilio Martinez &lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
 -- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.4. Definir la funciÃ³n&lt;br /&gt;
--    preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (preorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- preorden del Ã¡rbol x; es decir, primero visita la raÃ­z del Ã¡rbol, a&lt;br /&gt;
-- continuaciÃ³n recorre el subÃ¡rbol izquierdo y, finalmente, recorre el&lt;br /&gt;
-- subÃ¡rbol derecho. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; preorden arbol_1&lt;br /&gt;
--    [9,3,2,4,7]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
preorden Hoja = []&lt;br /&gt;
preorden (Nodo a i d)= [a]++(preorden i)++(preorden d)&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.5. Definir la funciÃ³n&lt;br /&gt;
--    postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (postorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- postorden del Ã¡rbol x; es decir, primero recorre el subÃ¡rbol&lt;br /&gt;
-- izquierdo, a continuaciÃ³n el subÃ¡rbol derecho y, finalmente, la raÃ­z&lt;br /&gt;
-- del Ã¡rbol. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; postorden arbol_1&lt;br /&gt;
--    [2,4,3,7,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
postorden Hoja = []&lt;br /&gt;
postorden (Nodo a i d)= postorden i ++ [a]++ postorden d&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Realizado por Nikola Drousie:&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
postorden&amp;#039; :: Arbol a -&amp;gt; [a]&lt;br /&gt;
postorden&amp;#039; Hoja = []&lt;br /&gt;
postorden&amp;#039; (Nodo a i d) = postorden&amp;#039; i ++ postorden&amp;#039; d ++ [a]&lt;br /&gt;
 -- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.6. Comprobar con QuickCheck que para todo Ã¡rbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (postorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_recorrido :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_recorrido x = (postorden . espejo) x == (reverse . postorden) x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobaciÃ³n es&lt;br /&gt;
--quickCheck prop_recorrido&lt;br /&gt;
-- +++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez Rivero&lt;br /&gt;
-- Jaime Alberto &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.7. Demstrar por inducción que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x.&lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.8. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = postorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_reverse_preorden_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_reverse_preorden_espejo x =&lt;br /&gt;
   reverse (preorden (espejo x)) == postorden x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
--    *Main&amp;gt; quickCheck prop_reverse_preorden_espejo&lt;br /&gt;
--    OK, passed 100 tests.&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.9. Demostrar que para todo árbol binario x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = preorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración:&lt;br /&gt;
    reverse (preorden (espejo x))&lt;br /&gt;
    = postorden (espejo (espejo x))    [por ejercicio 13.7]&lt;br /&gt;
    = postorden x                      [por ejercicio 13.3]&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.10. Definir la función&lt;br /&gt;
--    nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (nNodos x) es el número de nodos del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; nNodos arbol_1&lt;br /&gt;
--    5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
nNodos Hoja = 0&lt;br /&gt;
nNodos (Nodo _ i d)= 1+(nNodos i)+(nNodos d)&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
 -- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.11. Comprobar con QuickCheck que el nÃºmero de nodos de la&lt;br /&gt;
-- imagen especular de un Ã¡rbol es el mismo que el nÃºmero de nodos del&lt;br /&gt;
-- Ã¡rbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodos_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodos_espejo x = nNodos x == (nNodos . espejo) x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobaciÃ³n es&lt;br /&gt;
&lt;br /&gt;
--  quickCheck prop_nNodos_espejo&lt;br /&gt;
-- +++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.12. Demostrar por inducción que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.13. Comprobar con QuickCheck que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_length_preorden :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_length_preorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.14. Demostrar por inducción que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.15. Definir la función&lt;br /&gt;
--    profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (profundidad x) es la profundidad del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; profundidad arbol_1&lt;br /&gt;
--    3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
profundidad Hoja = 0&lt;br /&gt;
profundidad (Nodo _ i d) = 1+ max(profundidad i) (profundidad d)&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.16. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    nNodos x &amp;lt;= 2^(profundidad x) - 1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodosProfundidad :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodosProfundidad = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Nota. Para comprobar propiedades de árboles con QuickCheck se&lt;br /&gt;
-- utilizará el siguiente generador.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
instance Arbitrary a =&amp;gt; Arbitrary (Arbol a) where&lt;br /&gt;
  arbitrary = sized arbol&lt;br /&gt;
    where&lt;br /&gt;
      arbol 0       = return Hoja &lt;br /&gt;
      arbol n | n&amp;gt;0 = oneof [return Hoja,&lt;br /&gt;
                             liftM3 Nodo arbitrary subarbol subarbol]&lt;br /&gt;
                      where subarbol = arbol (div n 2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=101</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=101"/>
		<updated>2015-02-13T16:11:21Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- LMF 2014-15: Rel_1.hs (9 de Febrero de 2015)&lt;br /&gt;
-- Introducción a la programación con Haskell.&lt;br /&gt;
-- Departamento de Ciencias de la Computación e I.A.&lt;br /&gt;
-- Universidad de Sevilla&lt;br /&gt;
-- =====================================================================&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- En esta relación de ejercicios hacemos una introducción a Haskell, en&lt;br /&gt;
-- la que se recuerdan:&lt;br /&gt;
-- * las definiciones elementales de funciones,&lt;br /&gt;
-- * las definiciones de funciones por comprensión,&lt;br /&gt;
-- * las definiciones de funciones por recursión y&lt;br /&gt;
-- * los tipos de datos.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Importación de librerías auxiliares                                  &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
import Test.QuickCheck&lt;br /&gt;
import Data.Char&lt;br /&gt;
import Control.Monad&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
-- Miriam R.&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
-- Miriam R.&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
rota n xs= (drop n xs) ++ (take n xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena &lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.1. La disyunción excluyente xor de dos fórmulas se&lt;br /&gt;
-- verifica si una es verdadera y la otra es falsa.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función xor_1 que calcule la disyunción excluyente a&lt;br /&gt;
-- partir de la tabla de verdad. Usar 4 ecuaciones, una por cada línea&lt;br /&gt;
-- de la tabla. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_1 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_1 True True = False&lt;br /&gt;
xor_1 True False = True&lt;br /&gt;
xor_1 False True = True&lt;br /&gt;
xor_1 False False = False&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
&lt;br /&gt;
xor_1 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_1 x y   |x== True &amp;amp;&amp;amp; y== True = False &lt;br /&gt;
            |x== True &amp;amp;&amp;amp; y== False = True&lt;br /&gt;
            |x== False &amp;amp;&amp;amp; y== True = True&lt;br /&gt;
            |x== False &amp;amp;&amp;amp; y== False = False&lt;br /&gt;
-- Jaime Alberto &lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.2. Definir la función xor_2 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la tabla de verdad y patrones. Usar 2&lt;br /&gt;
-- ecuaciones, una por cada valor del primer argumento.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_2 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2 True x = if x then False else True&lt;br /&gt;
xor_2 False x = if x then True else False&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Realizado por Nikola Drousie:&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
&lt;br /&gt;
xor_2&amp;#039; True x = not x&lt;br /&gt;
xor_2&amp;#039; False x = x&lt;br /&gt;
&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
xor_2&amp;#039;&amp;#039; :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2&amp;#039;&amp;#039; x y |  x== True &amp;amp;&amp;amp; y== True || x==False &amp;amp;&amp;amp; y== False = False&lt;br /&gt;
          |  x== True &amp;amp;&amp;amp; y== False || x== False &amp;amp;&amp;amp; y== True = True  &lt;br /&gt;
&lt;br /&gt;
-- Elisa Mazuelos Jiménez:&lt;br /&gt;
&lt;br /&gt;
xor_2 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2 True x | x == True = False&lt;br /&gt;
             | otherwise = True&lt;br /&gt;
xor_2 False x | x == False = False&lt;br /&gt;
              | otherwise = True&lt;br /&gt;
&lt;br /&gt;
-- Esta última no es correcta (10/02/2015).&lt;br /&gt;
-- Corregida, gracias (10/02/2015).&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.3. Definir la función xor_3 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la disyunción (||), conjunción (&amp;amp;&amp;amp;) y negación&lt;br /&gt;
-- (not). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_3 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_3 x y = (x &amp;amp;&amp;amp; (not y)) || ((not x) &amp;amp;&amp;amp; y)&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-----------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.4. Definir la función xor_4 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de desigualdad (/=). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_4 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_4 x y = x /= y&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir, por comprensión, la función&lt;br /&gt;
--    sumaDeCuadrados :: Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (sumaDeCuadrados n) es la suma de los cuadrados de los&lt;br /&gt;
-- primeros n números; es decir, 1^2 + 2^2 + ... + 100^2. Por ejemplo,&lt;br /&gt;
--    sumaDeCuadrados 3    ==  14&lt;br /&gt;
--    sumaDeCuadrados 100  ==  338350&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaDeCuadrados n = sum [x^2 | x &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Una terna (x,y,z) de enteros positivos es pitagórica si &lt;br /&gt;
-- x^2 + y^2 = z^2. Usando una lista por comprensión, definir la función&lt;br /&gt;
--    pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
-- tal que (pitagoricas n) es la lista de todas las ternas pitagóricas&lt;br /&gt;
-- cuyas componentes están entre 1 y n. Por ejemplo, &lt;br /&gt;
--    *Main&amp;gt; pitagoricas 10 &lt;br /&gt;
--    [(3,4,5),(4,3,5),(6,8,10),(8,6,10)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
pitagoricas n = [(x,y,z) | x &amp;lt;- [1..n], y &amp;lt;- [1..n], z &amp;lt;- [1..n], x^2+y^2 == z^2]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto &lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- Luis Curquejo. Solución acotando ligeramente los elementos x e y.&lt;br /&gt;
&lt;br /&gt;
pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
pitagoricas n = [ (x,y,z) | z &amp;lt;- [1..n], x &amp;lt;- [1..z], y &amp;lt;- [1..z] , x^2 + y^2 == z^2]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un entero positivo es perfecto si es igual a la suma de&lt;br /&gt;
-- sus factores, excluyendo el propio número. Usando una lista por&lt;br /&gt;
-- comprensión y la función factores (del tema), definir la función &lt;br /&gt;
--    perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (perfectos n) es la lista de todos los números perfectos&lt;br /&gt;
-- menores que n. Por ejemplo: &lt;br /&gt;
--    *Main&amp;gt; perfectos 500&lt;br /&gt;
--    [6,28,496]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos n = [x | x &amp;lt;- [1..n], esPerfecto x]&lt;br /&gt;
&lt;br /&gt;
-- Definimos las funciones auxiliares:&lt;br /&gt;
&lt;br /&gt;
factores :: Int -&amp;gt; [Int]&lt;br /&gt;
factores n = [x | x &amp;lt;- [1..n], n `mod` x == 0]&lt;br /&gt;
&lt;br /&gt;
esPerfecto :: Int -&amp;gt; Bool&lt;br /&gt;
esPerfecto n = sum (factores n) == 2*n&lt;br /&gt;
&lt;br /&gt;
-- También podríamos definirla como:&lt;br /&gt;
&lt;br /&gt;
perfectos2 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos2 n = filter (esPerfecto) [1..n]&lt;br /&gt;
&lt;br /&gt;
-- Podemos comprobar que ambas definiciones son equivalentes:&lt;br /&gt;
&lt;br /&gt;
prop_perfectos n = perfectos n == perfectos2 n&lt;br /&gt;
&lt;br /&gt;
-- Si queremos podemos comparar ambos algoritmos:&lt;br /&gt;
&lt;br /&gt;
-- *Main&amp;gt; perfectos 500&lt;br /&gt;
-- [6,28,496]&lt;br /&gt;
-- (1.44 secs, 15935120 bytes)&lt;br /&gt;
&lt;br /&gt;
-- *Main&amp;gt; perfectos2 500&lt;br /&gt;
-- [6,28,496]&lt;br /&gt;
-- (0.22 secs, 14803544 bytes)&lt;br /&gt;
&lt;br /&gt;
-- Es decir, el segundo es más eficiente.&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
perfectos x = [y|y&amp;lt;-[1..x-1], serPerfecto y]&lt;br /&gt;
serPerfecto x = x==sum (factores&amp;#039; x)&lt;br /&gt;
factores x = [y|y&amp;lt;-[1..x], rem x y == 0]&lt;br /&gt;
factores&amp;#039; x = init (factores x)&lt;br /&gt;
&lt;br /&gt;
-- Luis Curquejo&lt;br /&gt;
&lt;br /&gt;
perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos n = [ x | x &amp;lt;- [1..n], x == sum (factoresred x)]&lt;br /&gt;
    where factoresred x = [ y | y &amp;lt;- [1..x-1], rem x y == 0] &lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
perfectos1 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos1 n = [ x | x &amp;lt;- [1..n], &lt;br /&gt;
                x == sum (tail(reverse (factores x)))]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
factores1 n = [x | x &amp;lt;- [1..n], rem n x == 0] &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir, por comprensión, la función&lt;br /&gt;
--    cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosC xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosC [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosC xs = [x^2 | x &amp;lt;- xs]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir, por recursión, la función&lt;br /&gt;
--    cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosR xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosR [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosR [] = []&lt;br /&gt;
cuadradosR (x:xs) = (x^2):(cuadradosR xs)&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.1. Definir, por comprensión, la función&lt;br /&gt;
--    imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesC xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesC [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesC xs = [x | x &amp;lt;- xs, odd x]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.2. Definir, por recursión, la función&lt;br /&gt;
--    imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesR xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesR [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesR [] = []&lt;br /&gt;
imparesR (x:xs) | odd x = x:(imparesR xs)&lt;br /&gt;
                | otherwise = imparesR xs&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir, por comprensión, la función&lt;br /&gt;
--    sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
-- tal que (sumaConsecutivos xs) es la suma de los pares de elementos&lt;br /&gt;
-- consecutivos de la lista xs. Por ejemplo,&lt;br /&gt;
--    sumaConsecutivos [3,1,5,2]  ==  [4,6,7]&lt;br /&gt;
--    sumaConsecutivos [3]        ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos xs = [x+y | (x,y) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
sumaConsecutivos1 :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos1 (x:xs) = [ (x+y) | (x,y) &amp;lt;- zip (x:xs) xs]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.  La distancia de Hamming entre dos listas es el número&lt;br /&gt;
-- de posiciones en que los correspondientes elementos son&lt;br /&gt;
-- distintos. Por ejemplo, la distancia de Hamming entre &amp;quot;roma&amp;quot; y &amp;quot;loba&amp;quot; &lt;br /&gt;
-- es 2 (porque hay 2 posiciones en las que los elementos&lt;br /&gt;
-- correspondientes son distintos: la 1ª y la 3ª). &lt;br /&gt;
--    &lt;br /&gt;
-- Definir la función distancia tal que (distancia xs ys) es la &lt;br /&gt;
-- distancia de Hamming entre xs e ys. Por ejemplo,&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;ron&amp;quot;     ==  1&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;cama&amp;quot;    ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;rama&amp;quot;    ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
distancia :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia xs ys = length (distanciaAux xs ys)&lt;br /&gt;
&lt;br /&gt;
-- Definimos la función auxiliar:&lt;br /&gt;
&lt;br /&gt;
distanciaAux :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; [Int]&lt;br /&gt;
distanciaAux xs [] = []&lt;br /&gt;
distanciaAux [] ys = []&lt;br /&gt;
distanciaAux (x:xs) (y:ys) | x == y = distanciaAux xs ys&lt;br /&gt;
                           | otherwise = [1]++(distanciaAux xs ys)&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- María Dolores Mateo Ceballos &lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- Aunque es parecido al anterior, sin usar función auxiliar:&lt;br /&gt;
&lt;br /&gt;
distancia :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia [] _ = 0&lt;br /&gt;
distancia _ [] = 0&lt;br /&gt;
distancia (x:xs) (y:ys) | x==y = distancia xs ys &lt;br /&gt;
                        | otherwise = 1 + distancia xs ys &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Realizado por Nikola Drousie:&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
&lt;br /&gt;
distancia&amp;#039; :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia&amp;#039; xs ys = sum [ 1 | (a,b)&amp;lt;-zip xs ys, a/=b]&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función&lt;br /&gt;
--    factoriales :: [Integer]&lt;br /&gt;
-- tal que factoriales es la lista de los factoriales. Por ejemplo,&lt;br /&gt;
--    take 10 factoriales  ==  [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Por comprensión:&lt;br /&gt;
&lt;br /&gt;
factoriales1 :: [Integer]&lt;br /&gt;
factoriales1 = [1]++[product [1..n] | n &amp;lt;-[1..]]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
factoriales1 = [fact x|x&amp;lt;-[0..]]&lt;br /&gt;
fact 0 = 1&lt;br /&gt;
fact x = x*fact (x-1)&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Usando zipWith:&lt;br /&gt;
&lt;br /&gt;
factoriales2 :: [Integer]&lt;br /&gt;
factoriales2 = [1]++(zipWith f [1..] [2..])&lt;br /&gt;
               where f n y = product ([1..n]++[y])&lt;br /&gt;
&lt;br /&gt;
-- Emilio Martinez&lt;br /&gt;
&lt;br /&gt;
-- Por recursiÃ³n:&lt;br /&gt;
&lt;br /&gt;
factoriales3 :: [Integer]&lt;br /&gt;
factoriales3 = 1:(aux 1 [1..])&lt;br /&gt;
               where aux n (x:xs)= (n*x):(aux (n*x) xs)&lt;br /&gt;
&lt;br /&gt;
-- Emilio Martinez&lt;br /&gt;
&lt;br /&gt;
-- Usando scanl1:&lt;br /&gt;
&lt;br /&gt;
factoriales4 :: [Integer]&lt;br /&gt;
factoriales4 = scanl  (*) 1 [1..]&lt;br /&gt;
&lt;br /&gt;
-- Emilio Martinez&lt;br /&gt;
&lt;br /&gt;
-- Usando iterate:&lt;br /&gt;
-- Fran Franco&lt;br /&gt;
factoriales5 :: [Integer]&lt;br /&gt;
factoriales5 = map snd (iterate (\(x,y)-&amp;gt;(x+1,x*y)) (1,1))&lt;br /&gt;
&lt;br /&gt;
-- Comparación de los tiempos de evaluación:&lt;br /&gt;
&lt;br /&gt;
-- *Main&amp;gt; take 10 factoriales1&lt;br /&gt;
-- [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
&lt;br /&gt;
-- (0.02 secs, 0 bytes)&lt;br /&gt;
&lt;br /&gt;
-- *Main&amp;gt; take 10 factoriales2&lt;br /&gt;
-- [1,2,6,24,120,720,5040,40320,362880,3628800]&lt;br /&gt;
-- (0.00 secs, 0 bytes)&lt;br /&gt;
&lt;br /&gt;
-- *Main&amp;gt; take 10 factoriales3&lt;br /&gt;
-- [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
-- (0.00 secs, 528020 bytes)&lt;br /&gt;
&lt;br /&gt;
-- *Main&amp;gt; take 10 factoriales4&lt;br /&gt;
-- [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
-- (0.00 secs, 0 bytes)&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.0. En los siguientes ejercicios se demostrarán&lt;br /&gt;
-- propiedades de los árboles binarios definidos como sigue&lt;br /&gt;
--    data Arbol a = Hoja &lt;br /&gt;
--                 | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
--                 deriving (Show, Eq)&lt;br /&gt;
-- Como ejemplos se usarán los árboles&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
data Arbol a = Hoja &lt;br /&gt;
             | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
             deriving (Show, Eq)&lt;br /&gt;
 &lt;br /&gt;
arbol_1 = Nodo 9&lt;br /&gt;
               (Nodo 3 &lt;br /&gt;
                     (Nodo 2 Hoja Hoja) &lt;br /&gt;
                     (Nodo 4 Hoja Hoja)) &lt;br /&gt;
               (Nodo 7 Hoja Hoja)&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.1. Definir la función&lt;br /&gt;
--    espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
-- tal que (espejo x) es la imagen especular del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; espejo arbol_1&lt;br /&gt;
--    Nodo 9 &lt;br /&gt;
--         (Nodo 7 Hoja Hoja) &lt;br /&gt;
--         (Nodo 3 &lt;br /&gt;
--               (Nodo 4 Hoja Hoja) &lt;br /&gt;
--               (Nodo 2 Hoja Hoja))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
espejo Hoja = Hoja&lt;br /&gt;
espejo (Nodo a i d)= Nodo a (espejo d) (espejo i)&lt;br /&gt;
&lt;br /&gt;
-- Emilio Martinez&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto &lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona &lt;br /&gt;
&lt;br /&gt;
espejo1 :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
espejo1 Hoja = Hoja&lt;br /&gt;
espejo1 (Nodo a i d) = (Nodo a d i)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.2. Comprobar con QuickCheck que para todo Ã¡rbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
prop_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_espejo n = (espejo . espejo) n == n&lt;br /&gt;
 &lt;br /&gt;
-- quickCheck prop_espejo&lt;br /&gt;
-- +++ OK passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
-- Emilio Martinez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
prop_espejo x = espejo (espejo x)==x&lt;br /&gt;
quickCheck prop_espejo&lt;br /&gt;
+++ OK, passed 100 tests.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.3. Demostrar por inducciÃ³n que para todo Ã¡rbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
{-&lt;br /&gt;
 DemostraciÃ³n por inducciÃ³n en x&lt;br /&gt;
&lt;br /&gt;
[Caso base: Hoja]&lt;br /&gt;
&lt;br /&gt;
espejo (espejo Hoja) = espejo (Hoja) por definicion de espejo Hoja&lt;br /&gt;
espejo (Hoja) = Hoja por definicion de espejo Hoja&lt;br /&gt;
&lt;br /&gt;
Luego  espejo (espejo Hoja)= Hoja &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
[Suponemos que espejo (espejo x) = x , para todo x arbol]&lt;br /&gt;
&lt;br /&gt;
[Sea N a i d con i, d arboles]&lt;br /&gt;
&lt;br /&gt;
espejo (espejo (N a i d))= espejo (N a (espejo d) (espejo i)) por def&lt;br /&gt;
espejo (N a (espejo d)(espejo i)) = N a (espejo (espejo i))&lt;br /&gt;
                                                        (espejo(espejo&lt;br /&gt;
                                                                d)) por def&lt;br /&gt;
&lt;br /&gt;
como i, d son arboles por hipótesis de induccion&lt;br /&gt;
&lt;br /&gt;
= N a (espejo (espejo i)) (espejo (espejo d))&lt;br /&gt;
= N a i d&lt;br /&gt;
&lt;br /&gt;
Luego espejo (espejo (N a i d)) = N a i d.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
Emilio Martinez &lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
 -- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.4. Definir la funciÃ³n&lt;br /&gt;
--    preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (preorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- preorden del Ã¡rbol x; es decir, primero visita la raÃ­z del Ã¡rbol, a&lt;br /&gt;
-- continuaciÃ³n recorre el subÃ¡rbol izquierdo y, finalmente, recorre el&lt;br /&gt;
-- subÃ¡rbol derecho. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; preorden arbol_1&lt;br /&gt;
--    [9,3,2,4,7]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
preorden Hoja = []&lt;br /&gt;
preorden (Nodo a i d)= [a]++(preorden i)++(preorden d)&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.5. Definir la funciÃ³n&lt;br /&gt;
--    postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (postorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- postorden del Ã¡rbol x; es decir, primero recorre el subÃ¡rbol&lt;br /&gt;
-- izquierdo, a continuaciÃ³n el subÃ¡rbol derecho y, finalmente, la raÃ­z&lt;br /&gt;
-- del Ã¡rbol. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; postorden arbol_1&lt;br /&gt;
--    [2,4,3,7,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
postorden Hoja = []&lt;br /&gt;
postorden (Nodo a i d)= postorden i ++ [a]++ postorden d&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Realizado por Nikola Drousie:&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
postorden&amp;#039; :: Arbol a -&amp;gt; [a]&lt;br /&gt;
postorden&amp;#039; Hoja = []&lt;br /&gt;
postorden&amp;#039; (Nodo a i d) = postorden&amp;#039; i ++ postorden&amp;#039; d ++ [a]&lt;br /&gt;
 -- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.6. Comprobar con QuickCheck que para todo Ã¡rbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (postorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_recorrido :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_recorrido x = (postorden . espejo) x == (reverse . postorden) x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobaciÃ³n es&lt;br /&gt;
--quickCheck prop_recorrido&lt;br /&gt;
-- +++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez Rivero&lt;br /&gt;
-- Jaime Alberto &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.7. Demstrar por inducción que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x.&lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.8. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = postorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_reverse_preorden_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_reverse_preorden_espejo x =&lt;br /&gt;
   reverse (preorden (espejo x)) == postorden x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
--    *Main&amp;gt; quickCheck prop_reverse_preorden_espejo&lt;br /&gt;
--    OK, passed 100 tests.&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.9. Demostrar que para todo árbol binario x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = preorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración:&lt;br /&gt;
    reverse (preorden (espejo x))&lt;br /&gt;
    = postorden (espejo (espejo x))    [por ejercicio 13.7]&lt;br /&gt;
    = postorden x                      [por ejercicio 13.3]&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.10. Definir la función&lt;br /&gt;
--    nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (nNodos x) es el número de nodos del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; nNodos arbol_1&lt;br /&gt;
--    5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
nNodos Hoja = 0&lt;br /&gt;
nNodos (Nodo _ i d)= 1+(nNodos i)+(nNodos d)&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
 -- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.11. Comprobar con QuickCheck que el nÃºmero de nodos de la&lt;br /&gt;
-- imagen especular de un Ã¡rbol es el mismo que el nÃºmero de nodos del&lt;br /&gt;
-- Ã¡rbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodos_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodos_espejo x = nNodos x == (nNodos . espejo) x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobaciÃ³n es&lt;br /&gt;
&lt;br /&gt;
--  quickCheck prop_nNodos_espejo&lt;br /&gt;
-- +++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.12. Demostrar por inducción que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.13. Comprobar con QuickCheck que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_length_preorden :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_length_preorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.14. Demostrar por inducción que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.15. Definir la función&lt;br /&gt;
--    profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (profundidad x) es la profundidad del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; profundidad arbol_1&lt;br /&gt;
--    3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
profundidad Hoja = 0&lt;br /&gt;
profundidad (Nodo _ i d) = 1+ max(profundidad i) (profundidad d)&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.16. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    nNodos x &amp;lt;= 2^(profundidad x) - 1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodosProfundidad :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodosProfundidad = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Nota. Para comprobar propiedades de árboles con QuickCheck se&lt;br /&gt;
-- utilizará el siguiente generador.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
instance Arbitrary a =&amp;gt; Arbitrary (Arbol a) where&lt;br /&gt;
  arbitrary = sized arbol&lt;br /&gt;
    where&lt;br /&gt;
      arbol 0       = return Hoja &lt;br /&gt;
      arbol n | n&amp;gt;0 = oneof [return Hoja,&lt;br /&gt;
                             liftM3 Nodo arbitrary subarbol subarbol]&lt;br /&gt;
                      where subarbol = arbol (div n 2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=100</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=100"/>
		<updated>2015-02-13T16:08:10Z</updated>

		<summary type="html">&lt;p&gt;Fracarmol1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- LMF 2014-15: Rel_1.hs (9 de Febrero de 2015)&lt;br /&gt;
-- Introducción a la programación con Haskell.&lt;br /&gt;
-- Departamento de Ciencias de la Computación e I.A.&lt;br /&gt;
-- Universidad de Sevilla&lt;br /&gt;
-- =====================================================================&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- En esta relación de ejercicios hacemos una introducción a Haskell, en&lt;br /&gt;
-- la que se recuerdan:&lt;br /&gt;
-- * las definiciones elementales de funciones,&lt;br /&gt;
-- * las definiciones de funciones por comprensión,&lt;br /&gt;
-- * las definiciones de funciones por recursión y&lt;br /&gt;
-- * los tipos de datos.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Importación de librerías auxiliares                                  &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
import Test.QuickCheck&lt;br /&gt;
import Data.Char&lt;br /&gt;
import Control.Monad&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
-- Miriam R.&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
-- Miriam R.&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
rota n xs= (drop n xs) ++ (take n xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena &lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.1. La disyunción excluyente xor de dos fórmulas se&lt;br /&gt;
-- verifica si una es verdadera y la otra es falsa.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función xor_1 que calcule la disyunción excluyente a&lt;br /&gt;
-- partir de la tabla de verdad. Usar 4 ecuaciones, una por cada línea&lt;br /&gt;
-- de la tabla. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_1 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_1 True True = False&lt;br /&gt;
xor_1 True False = True&lt;br /&gt;
xor_1 False True = True&lt;br /&gt;
xor_1 False False = False&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
&lt;br /&gt;
xor_1 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_1 x y   |x== True &amp;amp;&amp;amp; y== True = False &lt;br /&gt;
            |x== True &amp;amp;&amp;amp; y== False = True&lt;br /&gt;
            |x== False &amp;amp;&amp;amp; y== True = True&lt;br /&gt;
            |x== False &amp;amp;&amp;amp; y== False = False&lt;br /&gt;
-- Jaime Alberto &lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.2. Definir la función xor_2 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la tabla de verdad y patrones. Usar 2&lt;br /&gt;
-- ecuaciones, una por cada valor del primer argumento.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_2 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2 True x = if x then False else True&lt;br /&gt;
xor_2 False x = if x then True else False&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Realizado por Nikola Drousie:&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
&lt;br /&gt;
xor_2&amp;#039; True x = not x&lt;br /&gt;
xor_2&amp;#039; False x = x&lt;br /&gt;
&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
xor_2&amp;#039;&amp;#039; :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2&amp;#039;&amp;#039; x y |  x== True &amp;amp;&amp;amp; y== True || x==False &amp;amp;&amp;amp; y== False = False&lt;br /&gt;
          |  x== True &amp;amp;&amp;amp; y== False || x== False &amp;amp;&amp;amp; y== True = True  &lt;br /&gt;
&lt;br /&gt;
-- Elisa Mazuelos Jiménez:&lt;br /&gt;
&lt;br /&gt;
xor_2 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2 True x | x == True = False&lt;br /&gt;
             | otherwise = True&lt;br /&gt;
xor_2 False x | x == False = False&lt;br /&gt;
              | otherwise = True&lt;br /&gt;
&lt;br /&gt;
-- Esta última no es correcta (10/02/2015).&lt;br /&gt;
-- Corregida, gracias (10/02/2015).&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.3. Definir la función xor_3 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la disyunción (||), conjunción (&amp;amp;&amp;amp;) y negación&lt;br /&gt;
-- (not). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_3 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_3 x y = (x &amp;amp;&amp;amp; (not y)) || ((not x) &amp;amp;&amp;amp; y)&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-----------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.4. Definir la función xor_4 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de desigualdad (/=). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_4 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_4 x y = x /= y&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir, por comprensión, la función&lt;br /&gt;
--    sumaDeCuadrados :: Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (sumaDeCuadrados n) es la suma de los cuadrados de los&lt;br /&gt;
-- primeros n números; es decir, 1^2 + 2^2 + ... + 100^2. Por ejemplo,&lt;br /&gt;
--    sumaDeCuadrados 3    ==  14&lt;br /&gt;
--    sumaDeCuadrados 100  ==  338350&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaDeCuadrados n = sum [x^2 | x &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Una terna (x,y,z) de enteros positivos es pitagórica si &lt;br /&gt;
-- x^2 + y^2 = z^2. Usando una lista por comprensión, definir la función&lt;br /&gt;
--    pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
-- tal que (pitagoricas n) es la lista de todas las ternas pitagóricas&lt;br /&gt;
-- cuyas componentes están entre 1 y n. Por ejemplo, &lt;br /&gt;
--    *Main&amp;gt; pitagoricas 10 &lt;br /&gt;
--    [(3,4,5),(4,3,5),(6,8,10),(8,6,10)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
pitagoricas n = [(x,y,z) | x &amp;lt;- [1..n], y &amp;lt;- [1..n], z &amp;lt;- [1..n], x^2+y^2 == z^2]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto &lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- Luis Curquejo. Solución acotando ligeramente los elementos x e y.&lt;br /&gt;
&lt;br /&gt;
pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
pitagoricas n = [ (x,y,z) | z &amp;lt;- [1..n], x &amp;lt;- [1..z], y &amp;lt;- [1..z] , x^2 + y^2 == z^2]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un entero positivo es perfecto si es igual a la suma de&lt;br /&gt;
-- sus factores, excluyendo el propio número. Usando una lista por&lt;br /&gt;
-- comprensión y la función factores (del tema), definir la función &lt;br /&gt;
--    perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (perfectos n) es la lista de todos los números perfectos&lt;br /&gt;
-- menores que n. Por ejemplo: &lt;br /&gt;
--    *Main&amp;gt; perfectos 500&lt;br /&gt;
--    [6,28,496]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos n = [x | x &amp;lt;- [1..n], esPerfecto x]&lt;br /&gt;
&lt;br /&gt;
-- Definimos las funciones auxiliares:&lt;br /&gt;
&lt;br /&gt;
factores :: Int -&amp;gt; [Int]&lt;br /&gt;
factores n = [x | x &amp;lt;- [1..n], n `mod` x == 0]&lt;br /&gt;
&lt;br /&gt;
esPerfecto :: Int -&amp;gt; Bool&lt;br /&gt;
esPerfecto n = sum (factores n) == 2*n&lt;br /&gt;
&lt;br /&gt;
-- También podríamos definirla como:&lt;br /&gt;
&lt;br /&gt;
perfectos2 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos2 n = filter (esPerfecto) [1..n]&lt;br /&gt;
&lt;br /&gt;
-- Podemos comprobar que ambas definiciones son equivalentes:&lt;br /&gt;
&lt;br /&gt;
prop_perfectos n = perfectos n == perfectos2 n&lt;br /&gt;
&lt;br /&gt;
-- Si queremos podemos comparar ambos algoritmos:&lt;br /&gt;
&lt;br /&gt;
-- *Main&amp;gt; perfectos 500&lt;br /&gt;
-- [6,28,496]&lt;br /&gt;
-- (1.44 secs, 15935120 bytes)&lt;br /&gt;
&lt;br /&gt;
-- *Main&amp;gt; perfectos2 500&lt;br /&gt;
-- [6,28,496]&lt;br /&gt;
-- (0.22 secs, 14803544 bytes)&lt;br /&gt;
&lt;br /&gt;
-- Es decir, el segundo es más eficiente.&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
perfectos x = [y|y&amp;lt;-[1..x-1], serPerfecto y]&lt;br /&gt;
serPerfecto x = x==sum (factores&amp;#039; x)&lt;br /&gt;
factores x = [y|y&amp;lt;-[1..x], rem x y == 0]&lt;br /&gt;
factores&amp;#039; x = init (factores x)&lt;br /&gt;
&lt;br /&gt;
-- Luis Curquejo&lt;br /&gt;
&lt;br /&gt;
perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos n = [ x | x &amp;lt;- [1..n], x == sum (factoresred x)]&lt;br /&gt;
    where factoresred x = [ y | y &amp;lt;- [1..x-1], rem x y == 0] &lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
perfectos1 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos1 n = [ x | x &amp;lt;- [1..n], &lt;br /&gt;
                x == sum (tail(reverse (factores x)))]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
factores1 n = [x | x &amp;lt;- [1..n], rem n x == 0] &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir, por comprensión, la función&lt;br /&gt;
--    cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosC xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosC [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosC xs = [x^2 | x &amp;lt;- xs]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir, por recursión, la función&lt;br /&gt;
--    cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosR xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosR [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosR [] = []&lt;br /&gt;
cuadradosR (x:xs) = (x^2):(cuadradosR xs)&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.1. Definir, por comprensión, la función&lt;br /&gt;
--    imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesC xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesC [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesC xs = [x | x &amp;lt;- xs, odd x]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.2. Definir, por recursión, la función&lt;br /&gt;
--    imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesR xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesR [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesR [] = []&lt;br /&gt;
imparesR (x:xs) | odd x = x:(imparesR xs)&lt;br /&gt;
                | otherwise = imparesR xs&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir, por comprensión, la función&lt;br /&gt;
--    sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
-- tal que (sumaConsecutivos xs) es la suma de los pares de elementos&lt;br /&gt;
-- consecutivos de la lista xs. Por ejemplo,&lt;br /&gt;
--    sumaConsecutivos [3,1,5,2]  ==  [4,6,7]&lt;br /&gt;
--    sumaConsecutivos [3]        ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos xs = [x+y | (x,y) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
sumaConsecutivos1 :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos1 (x:xs) = [ (x+y) | (x,y) &amp;lt;- zip (x:xs) xs]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.  La distancia de Hamming entre dos listas es el número&lt;br /&gt;
-- de posiciones en que los correspondientes elementos son&lt;br /&gt;
-- distintos. Por ejemplo, la distancia de Hamming entre &amp;quot;roma&amp;quot; y &amp;quot;loba&amp;quot; &lt;br /&gt;
-- es 2 (porque hay 2 posiciones en las que los elementos&lt;br /&gt;
-- correspondientes son distintos: la 1ª y la 3ª). &lt;br /&gt;
--    &lt;br /&gt;
-- Definir la función distancia tal que (distancia xs ys) es la &lt;br /&gt;
-- distancia de Hamming entre xs e ys. Por ejemplo,&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;ron&amp;quot;     ==  1&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;cama&amp;quot;    ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;rama&amp;quot;    ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
distancia :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia xs ys = length (distanciaAux xs ys)&lt;br /&gt;
&lt;br /&gt;
-- Definimos la función auxiliar:&lt;br /&gt;
&lt;br /&gt;
distanciaAux :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; [Int]&lt;br /&gt;
distanciaAux xs [] = []&lt;br /&gt;
distanciaAux [] ys = []&lt;br /&gt;
distanciaAux (x:xs) (y:ys) | x == y = distanciaAux xs ys&lt;br /&gt;
                           | otherwise = [1]++(distanciaAux xs ys)&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- María Dolores Mateo Ceballos &lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- Aunque es parecido al anterior, sin usar función auxiliar:&lt;br /&gt;
&lt;br /&gt;
distancia :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia [] _ = 0&lt;br /&gt;
distancia _ [] = 0&lt;br /&gt;
distancia (x:xs) (y:ys) | x==y = distancia xs ys &lt;br /&gt;
                        | otherwise = 1 + distancia xs ys &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Realizado por Nikola Drousie:&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
&lt;br /&gt;
distancia&amp;#039; :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia&amp;#039; xs ys = sum [ 1 | (a,b)&amp;lt;-zip xs ys, a/=b]&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función&lt;br /&gt;
--    factoriales :: [Integer]&lt;br /&gt;
-- tal que factoriales es la lista de los factoriales. Por ejemplo,&lt;br /&gt;
--    take 10 factoriales  ==  [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Por comprensión:&lt;br /&gt;
&lt;br /&gt;
factoriales1 :: [Integer]&lt;br /&gt;
factoriales1 = [1]++[product [1..n] | n &amp;lt;-[1..]]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
factoriales1 = [fact x|x&amp;lt;-[0..]]&lt;br /&gt;
fact 0 = 1&lt;br /&gt;
fact x = x*fact (x-1)&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Usando zipWith:&lt;br /&gt;
&lt;br /&gt;
factoriales2 :: [Integer]&lt;br /&gt;
factoriales2 = [1]++(zipWith f [1..] [2..])&lt;br /&gt;
               where f n y = product ([1..n]++[y])&lt;br /&gt;
&lt;br /&gt;
-- Emilio Martinez&lt;br /&gt;
&lt;br /&gt;
-- Por recursiÃ³n:&lt;br /&gt;
&lt;br /&gt;
factoriales3 :: [Integer]&lt;br /&gt;
factoriales3 = 1:(aux 1 [1..])&lt;br /&gt;
               where aux n (x:xs)= (n*x):(aux (n*x) xs)&lt;br /&gt;
&lt;br /&gt;
-- Emilio Martinez&lt;br /&gt;
&lt;br /&gt;
-- Usando scanl1:&lt;br /&gt;
&lt;br /&gt;
factoriales4 :: [Integer]&lt;br /&gt;
factoriales4 = scanl  (*) 1 [1..]&lt;br /&gt;
&lt;br /&gt;
-- Emilio Martinez&lt;br /&gt;
&lt;br /&gt;
-- Usando iterate:&lt;br /&gt;
-- Fran Franco&lt;br /&gt;
factoriales5 :: [Integer]&lt;br /&gt;
factoriales5 = map snd (iterate (\(x,y)-&amp;gt;(x+1,x*y)) (1,1))&lt;br /&gt;
&lt;br /&gt;
-- Comparación de los tiempos de evaluación:&lt;br /&gt;
&lt;br /&gt;
-- *Main&amp;gt; take 10 factoriales1&lt;br /&gt;
-- [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
&lt;br /&gt;
-- (0.02 secs, 0 bytes)&lt;br /&gt;
&lt;br /&gt;
-- *Main&amp;gt; take 10 factoriales2&lt;br /&gt;
-- [1,2,6,24,120,720,5040,40320,362880,3628800]&lt;br /&gt;
-- (0.00 secs, 0 bytes)&lt;br /&gt;
&lt;br /&gt;
-- *Main&amp;gt; take 10 factoriales3&lt;br /&gt;
-- [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
-- (0.00 secs, 528020 bytes)&lt;br /&gt;
&lt;br /&gt;
-- *Main&amp;gt; take 10 factoriales4&lt;br /&gt;
-- [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
-- (0.00 secs, 0 bytes)&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.0. En los siguientes ejercicios se demostrarán&lt;br /&gt;
-- propiedades de los árboles binarios definidos como sigue&lt;br /&gt;
--    data Arbol a = Hoja &lt;br /&gt;
--                 | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
--                 deriving (Show, Eq)&lt;br /&gt;
-- Como ejemplos se usarán los árboles&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
data Arbol a = Hoja &lt;br /&gt;
             | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
             deriving (Show, Eq)&lt;br /&gt;
 &lt;br /&gt;
arbol_1 = Nodo 9&lt;br /&gt;
               (Nodo 3 &lt;br /&gt;
                     (Nodo 2 Hoja Hoja) &lt;br /&gt;
                     (Nodo 4 Hoja Hoja)) &lt;br /&gt;
               (Nodo 7 Hoja Hoja)&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.1. Definir la función&lt;br /&gt;
--    espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
-- tal que (espejo x) es la imagen especular del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; espejo arbol_1&lt;br /&gt;
--    Nodo 9 &lt;br /&gt;
--         (Nodo 7 Hoja Hoja) &lt;br /&gt;
--         (Nodo 3 &lt;br /&gt;
--               (Nodo 4 Hoja Hoja) &lt;br /&gt;
--               (Nodo 2 Hoja Hoja))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
espejo Hoja = Hoja&lt;br /&gt;
espejo (Nodo a i d)= Nodo a (espejo d) (espejo i)&lt;br /&gt;
&lt;br /&gt;
-- Emilio Martinez&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.2. Comprobar con QuickCheck que para todo Ã¡rbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
prop_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_espejo n = (espejo . espejo) n == n&lt;br /&gt;
 &lt;br /&gt;
-- quickCheck prop_espejo&lt;br /&gt;
-- +++ OK passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
-- Emilio Martinez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
prop_espejo x = espejo (espejo x)==x&lt;br /&gt;
quickCheck prop_espejo&lt;br /&gt;
+++ OK, passed 100 tests.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.3. Demostrar por inducciÃ³n que para todo Ã¡rbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
{-&lt;br /&gt;
 DemostraciÃ³n por inducciÃ³n en x&lt;br /&gt;
&lt;br /&gt;
[Caso base: Hoja]&lt;br /&gt;
&lt;br /&gt;
espejo (espejo Hoja) = espejo (Hoja) por definicion de espejo Hoja&lt;br /&gt;
espejo (Hoja) = Hoja por definicion de espejo Hoja&lt;br /&gt;
&lt;br /&gt;
Luego  espejo (espejo Hoja)= Hoja &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
[Suponemos que espejo (espejo x) = x , para todo x arbol]&lt;br /&gt;
&lt;br /&gt;
[Sea N a i d con i, d arboles]&lt;br /&gt;
&lt;br /&gt;
espejo (espejo (N a i d))= espejo (N a (espejo d) (espejo i)) por def&lt;br /&gt;
espejo (N a (espejo d)(espejo i)) = N a (espejo (espejo i))&lt;br /&gt;
                                                        (espejo(espejo&lt;br /&gt;
                                                                d)) por def&lt;br /&gt;
&lt;br /&gt;
como i, d son arboles por hipótesis de induccion&lt;br /&gt;
&lt;br /&gt;
= N a (espejo (espejo i)) (espejo (espejo d))&lt;br /&gt;
= N a i d&lt;br /&gt;
&lt;br /&gt;
Luego espejo (espejo (N a i d)) = N a i d.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
Emilio Martinez &lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
 -- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.4. Definir la funciÃ³n&lt;br /&gt;
--    preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (preorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- preorden del Ã¡rbol x; es decir, primero visita la raÃ­z del Ã¡rbol, a&lt;br /&gt;
-- continuaciÃ³n recorre el subÃ¡rbol izquierdo y, finalmente, recorre el&lt;br /&gt;
-- subÃ¡rbol derecho. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; preorden arbol_1&lt;br /&gt;
--    [9,3,2,4,7]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
preorden Hoja = []&lt;br /&gt;
preorden (Nodo a i d)= [a]++(preorden i)++(preorden d)&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.5. Definir la funciÃ³n&lt;br /&gt;
--    postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (postorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- postorden del Ã¡rbol x; es decir, primero recorre el subÃ¡rbol&lt;br /&gt;
-- izquierdo, a continuaciÃ³n el subÃ¡rbol derecho y, finalmente, la raÃ­z&lt;br /&gt;
-- del Ã¡rbol. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; postorden arbol_1&lt;br /&gt;
--    [2,4,3,7,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
postorden Hoja = []&lt;br /&gt;
postorden (Nodo a i d)= postorden i ++ [a]++ postorden d&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Realizado por Nikola Drousie:&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
postorden&amp;#039; :: Arbol a -&amp;gt; [a]&lt;br /&gt;
postorden&amp;#039; Hoja = []&lt;br /&gt;
postorden&amp;#039; (Nodo a i d) = postorden&amp;#039; i ++ postorden&amp;#039; d ++ [a]&lt;br /&gt;
 -- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.6. Comprobar con QuickCheck que para todo Ã¡rbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (postorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_recorrido :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_recorrido x = (postorden . espejo) x == (reverse . postorden) x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobaciÃ³n es&lt;br /&gt;
--quickCheck prop_recorrido&lt;br /&gt;
-- +++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez Rivero&lt;br /&gt;
-- Jaime Alberto &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.7. Demstrar por inducción que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x.&lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.8. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = postorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_reverse_preorden_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_reverse_preorden_espejo x =&lt;br /&gt;
   reverse (preorden (espejo x)) == postorden x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
--    *Main&amp;gt; quickCheck prop_reverse_preorden_espejo&lt;br /&gt;
--    OK, passed 100 tests.&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.9. Demostrar que para todo árbol binario x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = preorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración:&lt;br /&gt;
    reverse (preorden (espejo x))&lt;br /&gt;
    = postorden (espejo (espejo x))    [por ejercicio 13.7]&lt;br /&gt;
    = postorden x                      [por ejercicio 13.3]&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.10. Definir la función&lt;br /&gt;
--    nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (nNodos x) es el número de nodos del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; nNodos arbol_1&lt;br /&gt;
--    5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
nNodos Hoja = 0&lt;br /&gt;
nNodos (Nodo _ i d)= 1+(nNodos i)+(nNodos d)&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
 -- Jaime Alberto&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.11. Comprobar con QuickCheck que el nÃºmero de nodos de la&lt;br /&gt;
-- imagen especular de un Ã¡rbol es el mismo que el nÃºmero de nodos del&lt;br /&gt;
-- Ã¡rbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodos_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodos_espejo x = nNodos x == (nNodos . espejo) x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobaciÃ³n es&lt;br /&gt;
&lt;br /&gt;
--  quickCheck prop_nNodos_espejo&lt;br /&gt;
-- +++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.12. Demostrar por inducción que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.13. Comprobar con QuickCheck que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_length_preorden :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_length_preorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.14. Demostrar por inducción que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.15. Definir la función&lt;br /&gt;
--    profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (profundidad x) es la profundidad del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; profundidad arbol_1&lt;br /&gt;
--    3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
profundidad Hoja = 0&lt;br /&gt;
profundidad (Nodo _ i d) = 1+ max(profundidad i) (profundidad d)&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.16. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    nNodos x &amp;lt;= 2^(profundidad x) - 1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodosProfundidad :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodosProfundidad = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Nota. Para comprobar propiedades de árboles con QuickCheck se&lt;br /&gt;
-- utilizará el siguiente generador.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
instance Arbitrary a =&amp;gt; Arbitrary (Arbol a) where&lt;br /&gt;
  arbitrary = sized arbol&lt;br /&gt;
    where&lt;br /&gt;
      arbol 0       = return Hoja &lt;br /&gt;
      arbol n | n&amp;gt;0 = oneof [return Hoja,&lt;br /&gt;
                             liftM3 Nodo arbitrary subarbol subarbol]&lt;br /&gt;
                      where subarbol = arbol (div n 2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fracarmol1</name></author>
		
	</entry>
</feed>