<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/LMF2013/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Isaduatos</id>
	<title>Lógica matemática y fundamentos (2012-13) - Contribuciones del usuario [es]</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/LMF2013/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Isaduatos"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php/Especial:Contribuciones/Isaduatos"/>
	<updated>2026-07-17T22:25:13Z</updated>
	<subtitle>Contribuciones del usuario</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_10&amp;diff=508</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_10&amp;diff=508"/>
		<updated>2013-05-15T11:10:01Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &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;
--José M Contreras&lt;br /&gt;
&lt;br /&gt;
clausula :: Prop -&amp;gt; Clausula&lt;br /&gt;
clausula f | literal f = [f]&lt;br /&gt;
clausula (Disj f g)=sort((clausula f)`union`(clausula g))&lt;br /&gt;
&lt;br /&gt;
&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;
--José M Contreras&lt;br /&gt;
&lt;br /&gt;
clausulasFNC :: Prop -&amp;gt; [Clausula]&lt;br /&gt;
clausulasFNC (Conj f g)= union (clausulasFNC f) (clausulasFNC g) &lt;br /&gt;
clausulasFNC f=[clausula f]&lt;br /&gt;
&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;
--José M Contreras&lt;br /&gt;
 &lt;br /&gt;
clausulas :: Prop -&amp;gt; [Clausula]&lt;br /&gt;
clausulas = clausulasFNC . formaNormalConjuntiva&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;
--Isabel Duarte&lt;br /&gt;
clausulasConjunto :: [Prop] -&amp;gt; [Cláusula]&lt;br /&gt;
clausulasConjunto s = unionGeneral [clausulas f | f &amp;lt;- s]&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;
--Isabel Duarte&lt;br /&gt;
simbolosProposicionalesClausula :: Clausula -&amp;gt; [Prop]&lt;br /&gt;
simbolosProposicionalesClausula = simbolosPropConj&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;
--Isabel Duarte&lt;br /&gt;
simbolosProposicionalesConjuntoClausula :: [Cláusula] -&amp;gt; [Prop]&lt;br /&gt;
simbolosProposicionalesConjuntoClausula s =&lt;br /&gt;
  unionGeneral [simbolosProposicionalesClausula c | c &amp;lt;- s]&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;
--Isabel Duarte&lt;br /&gt;
interpretacionesClausula :: Cláusula -&amp;gt; [Interpretación]&lt;br /&gt;
interpretacionesClausula c = subconjuntos (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;
--Isabel Duarte&lt;br /&gt;
interpretacionesConjuntoClausula :: [Cláusula] -&amp;gt; [Interpretación]&lt;br /&gt;
interpretacionesConjuntoClausula c =  &lt;br /&gt;
  subconjuntos (simbolosProposicionalesConjuntoClausula c)&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;
--Isabel Duarte&lt;br /&gt;
esModeloLiteral :: Interpretacion -&amp;gt; Literal -&amp;gt; Bool&lt;br /&gt;
esModeloLiteral i (Atom s) = elem (Atom s) i&lt;br /&gt;
esModeloLiteral i (Neg (Atom s)) = notElem (Atom s) i&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;
--Isabel Duarte&lt;br /&gt;
esModeloClausula :: Interpretacion -&amp;gt; Clausula -&amp;gt; Bool&lt;br /&gt;
esModeloClausula i c = or [esModeloLiteral i p | p &amp;lt;- c]&lt;br /&gt;
&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;
--Isabel Duarte&lt;br /&gt;
modelosClausula :: Clausula -&amp;gt; [Interpretacion]&lt;br /&gt;
modelosClausula c = [ x | x &amp;lt;- (interpretacionesClausula c), esModeloClausula x c]&lt;br /&gt;
&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;
esModeloConjuntoCláusulas :: Interpretación -&amp;gt; [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esModeloConjuntoCláusulas i s = undefined&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;
modelosConjuntoCláusulas :: [Cláusula] -&amp;gt; [Interpretación]&lt;br /&gt;
modelosConjuntoCláusulas s = undefined &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;
esCláusulaVálida :: Cláusula -&amp;gt; Bool&lt;br /&gt;
esCláusulaVálida c = undefined&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;
esCláusulaInsatisfacible :: Cláusula -&amp;gt; Bool&lt;br /&gt;
esCláusulaInsatisfacible c = undefined&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;
esCláusulaSatisfacible :: Cláusula -&amp;gt; Bool&lt;br /&gt;
esCláusulaSatisfacible c = undefined&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;
esConjuntoVálidoDeCláusulas :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esConjuntoVálidoDeCláusulas s = undefined&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;
esConjuntoConsistenteDeCláusulas :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esConjuntoConsistenteDeCláusulas s = undefined&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;
esConjuntoInconsistenteDeCláusulas :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esConjuntoInconsistenteDeCláusulas s = undefined&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;
esVálidaPorCláusulas :: Prop -&amp;gt; Bool&lt;br /&gt;
esVálidaPorCláusulas f = undefined&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>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_10&amp;diff=507</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_10&amp;diff=507"/>
		<updated>2013-05-15T11:07:45Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &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;
--José M Contreras&lt;br /&gt;
&lt;br /&gt;
clausula :: Prop -&amp;gt; Clausula&lt;br /&gt;
clausula f | literal f = [f]&lt;br /&gt;
clausula (Disj f g)=sort((clausula f)`union`(clausula g))&lt;br /&gt;
&lt;br /&gt;
&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;
--José M Contreras&lt;br /&gt;
&lt;br /&gt;
clausulasFNC :: Prop -&amp;gt; [Clausula]&lt;br /&gt;
clausulasFNC (Conj f g)= union (clausulasFNC f) (clausulasFNC g) &lt;br /&gt;
clausulasFNC f=[clausula f]&lt;br /&gt;
&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;
--José M Contreras&lt;br /&gt;
 &lt;br /&gt;
clausulas :: Prop -&amp;gt; [Clausula]&lt;br /&gt;
clausulas = clausulasFNC . formaNormalConjuntiva&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;
--Isabel Duarte&lt;br /&gt;
clausulasConjunto :: [Prop] -&amp;gt; [Cláusula]&lt;br /&gt;
clausulasConjunto s = unionGeneral [clausulas f | f &amp;lt;- s]&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;
símbolosProposicionalesCláusula :: Cláusula -&amp;gt; [Prop]&lt;br /&gt;
símbolosProposicionalesCláusula = undefined&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;
--Isabel Duarte&lt;br /&gt;
simbolosProposicionalesConjuntoClausula :: [Cláusula] -&amp;gt; [Prop]&lt;br /&gt;
simbolosProposicionalesConjuntoClausula s =&lt;br /&gt;
  unionGeneral [simbolosProposicionalesClausula c | c &amp;lt;- s]&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;
--Isabel Duarte&lt;br /&gt;
interpretacionesClausula :: Cláusula -&amp;gt; [Interpretación]&lt;br /&gt;
interpretacionesClausula c = subconjuntos (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;
--Isabel Duarte&lt;br /&gt;
interpretacionesConjuntoClausula :: [Cláusula] -&amp;gt; [Interpretación]&lt;br /&gt;
interpretacionesConjuntoClausula c =  &lt;br /&gt;
  subconjuntos (simbolosProposicionalesConjuntoClausula c)&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;
--Isabel Duarte&lt;br /&gt;
esModeloLiteral :: Interpretacion -&amp;gt; Literal -&amp;gt; Bool&lt;br /&gt;
esModeloLiteral i (Atom s) = elem (Atom s) i&lt;br /&gt;
esModeloLiteral i (Neg (Atom s)) = notElem (Atom s) i&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;
--Isabel Duarte&lt;br /&gt;
esModeloClausula :: Interpretacion -&amp;gt; Clausula -&amp;gt; Bool&lt;br /&gt;
esModeloClausula i c = or [esModeloLiteral i p | p &amp;lt;- c]&lt;br /&gt;
&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;
--Isabel Duarte&lt;br /&gt;
modelosClausula :: Clausula -&amp;gt; [Interpretacion]&lt;br /&gt;
modelosClausula c = [ x | x &amp;lt;- (interpretacionesClausula c), esModeloClausula x c]&lt;br /&gt;
&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;
esModeloConjuntoCláusulas :: Interpretación -&amp;gt; [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esModeloConjuntoCláusulas i s = undefined&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;
modelosConjuntoCláusulas :: [Cláusula] -&amp;gt; [Interpretación]&lt;br /&gt;
modelosConjuntoCláusulas s = undefined &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;
esCláusulaVálida :: Cláusula -&amp;gt; Bool&lt;br /&gt;
esCláusulaVálida c = undefined&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;
esCláusulaInsatisfacible :: Cláusula -&amp;gt; Bool&lt;br /&gt;
esCláusulaInsatisfacible c = undefined&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;
esCláusulaSatisfacible :: Cláusula -&amp;gt; Bool&lt;br /&gt;
esCláusulaSatisfacible c = undefined&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;
esConjuntoVálidoDeCláusulas :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esConjuntoVálidoDeCláusulas s = undefined&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;
esConjuntoConsistenteDeCláusulas :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esConjuntoConsistenteDeCláusulas s = undefined&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;
esConjuntoInconsistenteDeCláusulas :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esConjuntoInconsistenteDeCláusulas s = undefined&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;
esVálidaPorCláusulas :: Prop -&amp;gt; Bool&lt;br /&gt;
esVálidaPorCláusulas f = undefined&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>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_10&amp;diff=506</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_10&amp;diff=506"/>
		<updated>2013-05-15T11:06:58Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &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;
--José M Contreras&lt;br /&gt;
&lt;br /&gt;
clausula :: Prop -&amp;gt; Clausula&lt;br /&gt;
clausula f | literal f = [f]&lt;br /&gt;
clausula (Disj f g)=sort((clausula f)`union`(clausula g))&lt;br /&gt;
&lt;br /&gt;
&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;
--José M Contreras&lt;br /&gt;
&lt;br /&gt;
clausulasFNC :: Prop -&amp;gt; [Clausula]&lt;br /&gt;
clausulasFNC (Conj f g)= union (clausulasFNC f) (clausulasFNC g) &lt;br /&gt;
clausulasFNC f=[clausula f]&lt;br /&gt;
&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;
--José M Contreras&lt;br /&gt;
 &lt;br /&gt;
clausulas :: Prop -&amp;gt; [Clausula]&lt;br /&gt;
clausulas = clausulasFNC . formaNormalConjuntiva&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;
--Isabel Duarte&lt;br /&gt;
clausulasConjunto :: [Prop] -&amp;gt; [Cláusula]&lt;br /&gt;
clausulasConjunto s = unionGeneral [clausulas f | f &amp;lt;- s]&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;
símbolosProposicionalesCláusula :: Cláusula -&amp;gt; [Prop]&lt;br /&gt;
símbolosProposicionalesCláusula = undefined&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;
--Isabel Duarte&lt;br /&gt;
simbolosProposicionalesConjuntoClausula :: [Cláusula] -&amp;gt; [Prop]&lt;br /&gt;
simbolosProposicionalesConjuntoClausula s =&lt;br /&gt;
  unionGeneral [simbolosProposicionalesClausula c | c &amp;lt;- s]&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;
--Isabel Duarte&lt;br /&gt;
interpretacionesClausula :: Cláusula -&amp;gt; [Interpretación]&lt;br /&gt;
interpretacionesClausula c = subconjuntos (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;
--Isabel Duarte&lt;br /&gt;
interpretacionesConjuntoClausula :: [Cláusula] -&amp;gt; [Interpretación]&lt;br /&gt;
interpretacionesConjuntoCláusula c =  &lt;br /&gt;
  subconjuntos (simbolosProposicionalesConjuntoClausula c)&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;
--Isabel Duarte&lt;br /&gt;
esModeloLiteral :: Interpretacion -&amp;gt; Literal -&amp;gt; Bool&lt;br /&gt;
esModeloLiteral i (Atom s) = elem (Atom s) i&lt;br /&gt;
esModeloLiteral i (Neg (Atom s)) = notElem (Atom s) i&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;
--Isabel Duarte&lt;br /&gt;
esModeloClausula :: Interpretacion -&amp;gt; Clausula -&amp;gt; Bool&lt;br /&gt;
esModeloClausula i c = or [esModeloLiteral i p | p &amp;lt;- c]&lt;br /&gt;
&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;
--Isabel Duarte&lt;br /&gt;
modelosClausula :: Clausula -&amp;gt; [Interpretacion]&lt;br /&gt;
modelosClausula c = [ x | x &amp;lt;- (interpretacionesClausula c), esModeloClausula x c]&lt;br /&gt;
&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;
esModeloConjuntoCláusulas :: Interpretación -&amp;gt; [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esModeloConjuntoCláusulas i s = undefined&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;
modelosConjuntoCláusulas :: [Cláusula] -&amp;gt; [Interpretación]&lt;br /&gt;
modelosConjuntoCláusulas s = undefined &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;
esCláusulaVálida :: Cláusula -&amp;gt; Bool&lt;br /&gt;
esCláusulaVálida c = undefined&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;
esCláusulaInsatisfacible :: Cláusula -&amp;gt; Bool&lt;br /&gt;
esCláusulaInsatisfacible c = undefined&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;
esCláusulaSatisfacible :: Cláusula -&amp;gt; Bool&lt;br /&gt;
esCláusulaSatisfacible c = undefined&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;
esConjuntoVálidoDeCláusulas :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esConjuntoVálidoDeCláusulas s = undefined&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;
esConjuntoConsistenteDeCláusulas :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esConjuntoConsistenteDeCláusulas s = undefined&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;
esConjuntoInconsistenteDeCláusulas :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esConjuntoInconsistenteDeCláusulas s = undefined&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;
esVálidaPorCláusulas :: Prop -&amp;gt; Bool&lt;br /&gt;
esVálidaPorCláusulas f = undefined&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>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_9&amp;diff=495</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_9&amp;diff=495"/>
		<updated>2013-05-14T15:46:19Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &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;
esEquivalente :: Prop -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esEquivalente f g = undefined&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;
eliminaEquivalencias :: Prop -&amp;gt; Prop&lt;br /&gt;
eliminaEquivalencias = undefined&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;
eliminaImplicaciones :: Prop -&amp;gt; Prop&lt;br /&gt;
eliminaImplicaciones  = undefined&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;
--Isabel Duarte&lt;br /&gt;
&lt;br /&gt;
literal :: Prop -&amp;gt; Bool&lt;br /&gt;
literal (Atom p) = True&lt;br /&gt;
literal (Neg (Atom p)) = 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;
--Isabel Duarte&lt;br /&gt;
&lt;br /&gt;
complementario :: Literal -&amp;gt; Literal&lt;br /&gt;
complementario (Atom p) = Neg (Atom p)&lt;br /&gt;
complementario (Neg (Atom p)) = Atom p&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;
--Isabel Duarte&lt;br /&gt;
&lt;br /&gt;
literalesFormulaFNN :: Prop -&amp;gt; [Literal]&lt;br /&gt;
literalesFormulaFNN (Conj p q) = &lt;br /&gt;
  union (literalesFormulaFNN p) (literalesFormulaFNN q)&lt;br /&gt;
literalesFormulaFNN (Disj p q) = &lt;br /&gt;
  union (literalesFormulaFNN p) (literalesFormulaFNN q)&lt;br /&gt;
literalesFormulaFNN p = [p]&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;
--Isabel Duarte&lt;br /&gt;
&lt;br /&gt;
interiorizaDisyuncion :: Prop -&amp;gt; Prop&lt;br /&gt;
interiorizaDisyuncion (Disj (Conj p q) r) =  &lt;br /&gt;
  interiorizaDisyuncion &lt;br /&gt;
  (Conj (Disj (interiorizaDisyuncion p) (interiorizaDisyuncion r))&lt;br /&gt;
        (Disj (interiorizaDisyuncion q) (interiorizaDisyuncion r)))&lt;br /&gt;
interiorizaDisyuncion (Disj r (Conj p q)) =  &lt;br /&gt;
  interiorizaDisyuncion &lt;br /&gt;
  (Conj (Disj (interiorizaDisyuncion r) (interiorizaDisyuncion p))&lt;br /&gt;
        (Disj (interiorizaDisyuncion r) (interiorizaDisyuncion q)))&lt;br /&gt;
interiorizaDisyuncion (Conj p q) =  &lt;br /&gt;
  Conj (interiorizaDisyuncion p) (interiorizaDisyuncion q)&lt;br /&gt;
interiorizaDisyuncion f = f&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;
--Isabel Duarte&lt;br /&gt;
&lt;br /&gt;
formaNormalConjuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
formaNormalConjuntiva f = interiorizaDisyuncion (formaNormalNegativa f)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Ejercicio 11.2: validaPorFNC&lt;br /&gt;
&lt;br /&gt;
validaPorFNC:: Prop -&amp;gt; Bool&lt;br /&gt;
validaPorFNC = undefined&lt;br /&gt;
&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;
-- 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;
--Isabel Duarte&lt;br /&gt;
&lt;br /&gt;
interiorizaConjuncion :: Prop -&amp;gt; Prop &lt;br /&gt;
interiorizaConjuncion (Conj (Disj f g) h) =&lt;br /&gt;
          interiorizaConjuncion (Disj (Conj (interiorizaConjuncion f) (interiorizaConjuncion h))&lt;br /&gt;
                                                    (Conj (interiorizaConjuncion g) (interiorizaConjuncion h))) &lt;br /&gt;
interiorizaConjuncion (Conj f (Disj g h)) =&lt;br /&gt;
          interiorizaConjuncion (Disj (Conj (interiorizaConjuncion f) (interiorizaConjuncion g))&lt;br /&gt;
                                                    (Conj (interiorizaConjuncion f) (interiorizaConjuncion h))) &lt;br /&gt;
interiorizaConjuncion (Disj f g) =&lt;br /&gt;
          Disj (interiorizaConjuncion f) (interiorizaConjuncion g) &lt;br /&gt;
interiorizaConjuncion f = f&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;
--Isabel Duarte&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;
&lt;br /&gt;
-- Ejercicio 13.2: satisfaciblePorFND&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;
-- 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;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_9&amp;diff=494</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_9&amp;diff=494"/>
		<updated>2013-05-14T15:37:39Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &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;
esEquivalente :: Prop -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esEquivalente f g = undefined&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;
eliminaEquivalencias :: Prop -&amp;gt; Prop&lt;br /&gt;
eliminaEquivalencias = undefined&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;
eliminaImplicaciones :: Prop -&amp;gt; Prop&lt;br /&gt;
eliminaImplicaciones  = undefined&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;
literal :: Prop -&amp;gt; Bool&lt;br /&gt;
literal = undefined&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;
--Isabel Duarte&lt;br /&gt;
&lt;br /&gt;
complementario :: Literal -&amp;gt; Literal&lt;br /&gt;
complementario (Atom p) = Neg (Atom p)&lt;br /&gt;
complementario (Neg (Atom p)) = Atom p&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;
--Isabel Duarte&lt;br /&gt;
&lt;br /&gt;
literalesFormulaFNN :: Prop -&amp;gt; [Literal]&lt;br /&gt;
literalesFormulaFNN (Conj p q) = &lt;br /&gt;
  union (literalesFormulaFNN p) (literalesFormulaFNN q)&lt;br /&gt;
literalesFormulaFNN (Disj p q) = &lt;br /&gt;
  union (literalesFormulaFNN p) (literalesFormulaFNN q)&lt;br /&gt;
literalesFormulaFNN p = [p]&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;
--Isabel Duarte&lt;br /&gt;
&lt;br /&gt;
interiorizaDisyuncion :: Prop -&amp;gt; Prop&lt;br /&gt;
interiorizaDisyuncion (Disj (Conj p q) r) =  &lt;br /&gt;
  interiorizaDisyuncion &lt;br /&gt;
  (Conj (Disj (interiorizaDisyuncion p) (interiorizaDisyuncion r))&lt;br /&gt;
        (Disj (interiorizaDisyuncion q) (interiorizaDisyuncion r)))&lt;br /&gt;
interiorizaDisyuncion (Disj r (Conj p q)) =  &lt;br /&gt;
  interiorizaDisyuncion &lt;br /&gt;
  (Conj (Disj (interiorizaDisyuncion r) (interiorizaDisyuncion p))&lt;br /&gt;
        (Disj (interiorizaDisyuncion r) (interiorizaDisyuncion q)))&lt;br /&gt;
interiorizaDisyuncion (Conj p q) =  &lt;br /&gt;
  Conj (interiorizaDisyuncion p) (interiorizaDisyuncion q)&lt;br /&gt;
interiorizaDisyuncion f = f&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;
--Isabel Duarte&lt;br /&gt;
&lt;br /&gt;
formaNormalConjuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
formaNormalConjuntiva f = interiorizaDisyuncion (formaNormalNegativa f)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Ejercicio 11.2: validaPorFNC&lt;br /&gt;
&lt;br /&gt;
validaPorFNC:: Prop -&amp;gt; Bool&lt;br /&gt;
validaPorFNC = undefined&lt;br /&gt;
&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;
-- 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;
--Isabel Duarte&lt;br /&gt;
&lt;br /&gt;
interiorizaConjuncion :: Prop -&amp;gt; Prop &lt;br /&gt;
interiorizaConjuncion (Conj (Disj f g) h) =&lt;br /&gt;
          interiorizaConjuncion (Disj (Conj (interiorizaConjuncion f) (interiorizaConjuncion h))&lt;br /&gt;
                                                    (Conj (interiorizaConjuncion g) (interiorizaConjuncion h))) &lt;br /&gt;
interiorizaConjuncion (Conj f (Disj g h)) =&lt;br /&gt;
          interiorizaConjuncion (Disj (Conj (interiorizaConjuncion f) (interiorizaConjuncion g))&lt;br /&gt;
                                                    (Conj (interiorizaConjuncion f) (interiorizaConjuncion h))) &lt;br /&gt;
interiorizaConjuncion (Disj f g) =&lt;br /&gt;
          Disj (interiorizaConjuncion f) (interiorizaConjuncion g) &lt;br /&gt;
interiorizaConjuncion f = f&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;
--Isabel Duarte&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;
&lt;br /&gt;
-- Ejercicio 13.2: satisfaciblePorFND&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;
-- 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;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_9&amp;diff=475</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_9&amp;diff=475"/>
		<updated>2013-05-05T09:17:31Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &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;
esEquivalente :: Prop -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esEquivalente f g = undefined&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;
eliminaEquivalencias :: Prop -&amp;gt; Prop&lt;br /&gt;
eliminaEquivalencias = undefined&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;
eliminaImplicaciones :: Prop -&amp;gt; Prop&lt;br /&gt;
eliminaImplicaciones  = undefined&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;
literal :: Prop -&amp;gt; Bool&lt;br /&gt;
literal = undefined&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;
complementario :: Literal -&amp;gt; Literal&lt;br /&gt;
complementario = undefined &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;
literalesFórmulaFNN :: Prop -&amp;gt; [Literal]&lt;br /&gt;
literalesFórmulaFNN = undefined &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;
--Isabel Duarte&lt;br /&gt;
&lt;br /&gt;
formaNormalConjuntiva :: Prop -&amp;gt; Prop&lt;br /&gt;
formaNormalConjuntiva f = interiorizaDisyuncion (formaNormalNegativa f)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Ejercicio 11.2: validaPorFNC&lt;br /&gt;
&lt;br /&gt;
validaPorFNC:: Prop -&amp;gt; Bool&lt;br /&gt;
validaPorFNC = undefined&lt;br /&gt;
&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;
-- 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;
--Isabel Duarte&lt;br /&gt;
&lt;br /&gt;
interiorizaConjuncion :: Prop -&amp;gt; Prop &lt;br /&gt;
interiorizaConjuncion (Conj (Disj f g) h) =&lt;br /&gt;
          interiorizaConjuncion (Disj (Conj (interiorizaConjuncion f) (interiorizaConjuncion h))&lt;br /&gt;
                                                    (Conj (interiorizaConjuncion g) (interiorizaConjuncion h))) &lt;br /&gt;
interiorizaConjuncion (Conj f (Disj g h)) =&lt;br /&gt;
          interiorizaConjuncion (Disj (Conj (interiorizaConjuncion f) (interiorizaConjuncion g))&lt;br /&gt;
                                                    (Conj (interiorizaConjuncion f) (interiorizaConjuncion h))) &lt;br /&gt;
interiorizaConjuncion (Disj f g) =&lt;br /&gt;
          Disj (interiorizaConjuncion f) (interiorizaConjuncion g) &lt;br /&gt;
interiorizaConjuncion f = f&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;
--Isabel Duarte&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;
&lt;br /&gt;
-- Ejercicio 13.2: satisfaciblePorFND&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;
-- 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;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_9&amp;diff=474</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_9&amp;diff=474"/>
		<updated>2013-05-05T09:16:44Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &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;
esEquivalente :: Prop -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esEquivalente f g = undefined&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;
eliminaEquivalencias :: Prop -&amp;gt; Prop&lt;br /&gt;
eliminaEquivalencias = undefined&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;
eliminaImplicaciones :: Prop -&amp;gt; Prop&lt;br /&gt;
eliminaImplicaciones  = undefined&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;
literal :: Prop -&amp;gt; Bool&lt;br /&gt;
literal = undefined&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;
complementario :: Literal -&amp;gt; Literal&lt;br /&gt;
complementario = undefined &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;
literalesFórmulaFNN :: Prop -&amp;gt; [Literal]&lt;br /&gt;
literalesFórmulaFNN = undefined &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 = interiorizaDisyuncion (formaNormalNegativa f)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Ejercicio 11.2: validaPorFNC&lt;br /&gt;
&lt;br /&gt;
validaPorFNC:: Prop -&amp;gt; Bool&lt;br /&gt;
validaPorFNC = undefined&lt;br /&gt;
&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;
-- 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;
&lt;br /&gt;
interiorizaConjuncion :: Prop -&amp;gt; Prop &lt;br /&gt;
interiorizaConjuncion (Conj (Disj f g) h) =&lt;br /&gt;
          interiorizaConjuncion (Disj (Conj (interiorizaConjuncion f) (interiorizaConjuncion h))&lt;br /&gt;
                                                    (Conj (interiorizaConjuncion g) (interiorizaConjuncion h))) &lt;br /&gt;
interiorizaConjuncion (Conj f (Disj g h)) =&lt;br /&gt;
          interiorizaConjuncion (Disj (Conj (interiorizaConjuncion f) (interiorizaConjuncion g))&lt;br /&gt;
                                                    (Conj (interiorizaConjuncion f) (interiorizaConjuncion h))) &lt;br /&gt;
interiorizaConjuncion (Disj f g) =&lt;br /&gt;
          Disj (interiorizaConjuncion f) (interiorizaConjuncion g) &lt;br /&gt;
interiorizaConjuncion f = f&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 = interiorizaConjuncion (formaNormalNegativa f)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Ejercicio 13.2: satisfaciblePorFND&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;
-- 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;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_9&amp;diff=473</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_9&amp;diff=473"/>
		<updated>2013-05-05T09:12:25Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &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;
esEquivalente :: Prop -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esEquivalente f g = undefined&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;
eliminaEquivalencias :: Prop -&amp;gt; Prop&lt;br /&gt;
eliminaEquivalencias = undefined&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;
eliminaImplicaciones :: Prop -&amp;gt; Prop&lt;br /&gt;
eliminaImplicaciones  = undefined&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;
literal :: Prop -&amp;gt; Bool&lt;br /&gt;
literal = undefined&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;
complementario :: Literal -&amp;gt; Literal&lt;br /&gt;
complementario = undefined &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;
literalesFórmulaFNN :: Prop -&amp;gt; [Literal]&lt;br /&gt;
literalesFórmulaFNN = undefined &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 = interiorizaDisyuncion (formaNormalNegativa f)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Ejercicio 11.2: validaPorFNC&lt;br /&gt;
&lt;br /&gt;
validaPorFNC:: Prop -&amp;gt; Bool&lt;br /&gt;
validaPorFNC = undefined&lt;br /&gt;
&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;
-- 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;
&lt;br /&gt;
-- Ejercicio 13.2: satisfaciblePorFND&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;
-- 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;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Ejercicio_3&amp;diff=453</id>
		<title>Ejercicio 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Ejercicio_3&amp;diff=453"/>
		<updated>2013-04-26T14:03:33Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: /* Selección del ejercicio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunciado ==&lt;br /&gt;
El tercer ejercicio evaluable consiste en la realización de un ejercicio de argumentación en lógica de primer orden, haciendo la demostración por deducción natural con Isabelle/HOL y por tableros semánticos.&lt;br /&gt;
Para ello, &lt;br /&gt;
* Cada alumno elegirá uno de los ejercicios propuestos en [[E3|E3]].&lt;br /&gt;
* Una vez elegido, lo anotará en la lista que se muestra a continuación, no pudiendo un mismo ejercicio ser elegido por más de un alumno. &lt;br /&gt;
* Se enviará a mjoseh@us.es antes del viernes 10 de mayo de 2013, dos ficheros: uno usuario_3a.thy con la prueba por deducción natural y otro con la prueba por tableros.&lt;br /&gt;
* Los lemas que se usen en una demostración tendrán que ser probados de forma no automática.&lt;br /&gt;
* En la valoración del ejercicio se tendrá en cuenta tanto el nivel de dificultad como la calidad de la demostración.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Selección del ejercicio ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ejercicio 1: &lt;br /&gt;
* Ejercicio 2: Francisco Vilches Chacón&lt;br /&gt;
* Ejercicio 3: &lt;br /&gt;
* Ejercicio 4: &lt;br /&gt;
* Ejercicio 5: &lt;br /&gt;
* Ejercicio 6: &lt;br /&gt;
* Ejercicio 7: &lt;br /&gt;
* Ejercicio 8: &lt;br /&gt;
* Ejercicio 9: &lt;br /&gt;
* Ejercicio 10: &lt;br /&gt;
* Ejercicio 11: &lt;br /&gt;
* Ejercicio 12: &lt;br /&gt;
* Ejercicio 13: &lt;br /&gt;
* Ejercicio 14: Carmen Martínez Navarro &lt;br /&gt;
* Ejercicio 15: &lt;br /&gt;
* Ejercicio 16: &lt;br /&gt;
* Ejercicio 17: &lt;br /&gt;
* Ejercicio 18: &lt;br /&gt;
* Ejercicio 19: &lt;br /&gt;
* Ejercicio 20: &lt;br /&gt;
* Ejercicio 21: &lt;br /&gt;
* Ejercicio 22: &lt;br /&gt;
* Ejercicio 23: &lt;br /&gt;
* Ejercicio 24: &lt;br /&gt;
* Ejercicio 25: &lt;br /&gt;
* Ejercicio 26: José María Contreras Beltrán&lt;br /&gt;
* Ejercicio 27: Isabel Duarte Tosso&lt;br /&gt;
* Ejercicio 28:&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_8&amp;diff=449</id>
		<title>Relación 8</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_8&amp;diff=449"/>
		<updated>2013-04-26T09:57:12Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&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;
-- &amp;quot;Pedro Ros&amp;quot;&lt;br /&gt;
literal :: Prop -&amp;gt; Bool&lt;br /&gt;
literal (Atom p) = True&lt;br /&gt;
literal (Neg (Atom p)) = True&lt;br /&gt;
literal x = 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;
-- Pedro Ros&lt;br /&gt;
dobleNegacion :: Prop -&amp;gt; Bool&lt;br /&gt;
dobleNegacion (Neg (Neg p))= True&lt;br /&gt;
dobleNegacion x = False&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;
-- Pedro Ros&lt;br /&gt;
alfa :: Prop -&amp;gt; Bool&lt;br /&gt;
alfa (Conj p q) = True&lt;br /&gt;
alfa (Neg (Impl p q))= True&lt;br /&gt;
alfa (Neg (Disj p q))= True&lt;br /&gt;
alfa (Equi p q) = True&lt;br /&gt;
alfa x = False&lt;br /&gt;
&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;
-- Pedro Ros&lt;br /&gt;
beta :: Prop -&amp;gt; Bool&lt;br /&gt;
beta (Disj p q) = True&lt;br /&gt;
beta (Impl p q) = True&lt;br /&gt;
beta (Neg (Conj p q)) = True&lt;br /&gt;
beta (Neg (Equi p q))= True&lt;br /&gt;
beta p = 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;
-- Pedro Ros&lt;br /&gt;
componentes :: Prop -&amp;gt; [Prop]&lt;br /&gt;
componentes (Conj p q) = [p,q]&lt;br /&gt;
componentes (Neg(Impl p q)) = [p,no q]&lt;br /&gt;
componentes (Neg(Disj p q))= [no p, no q]&lt;br /&gt;
componentes (Equi p q) = [Impl p q, Impl q p]&lt;br /&gt;
componentes (Disj p q) = [p, q]&lt;br /&gt;
componentes (Impl p q) = [no p, q]&lt;br /&gt;
componentes (Neg(Conj p q))= [no p, no q]&lt;br /&gt;
componentes (Neg(Equi p q))=[Neg(Impl p q), Neg(Impl q p)]&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;
-- Pedro Ros&lt;br /&gt;
conjuntoDeLiterales :: [Prop] -&amp;gt; Bool&lt;br /&gt;
conjuntoDeLiterales []= True&lt;br /&gt;
conjuntoDeLiterales (x:xs)= if literal x then conjuntoDeLiterales xs&lt;br /&gt;
                            else False&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;
-- Pedro Ros&lt;br /&gt;
tieneContradiccion :: [Prop] -&amp;gt; Bool&lt;br /&gt;
tieneContradiccion [f] = False&lt;br /&gt;
tieneContradiccion ((Neg f):fs) = if elem f fs then True else&lt;br /&gt;
                                      tieneContradiccion fs&lt;br /&gt;
tieneContradiccion (f:fs)= if elem (no f) fs then True else&lt;br /&gt;
                               tieneContradiccion fs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Isabel Duarte&lt;br /&gt;
tieneContradiccion2 :: [Prop] -&amp;gt; Bool&lt;br /&gt;
tieneContradiccion2 fs = or [elem (no x) fs | x &amp;lt;- fs]&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;
--José María Contreras&lt;br /&gt;
elim (Neg(Neg f)) = f &lt;br /&gt;
                        &lt;br /&gt;
                        &lt;br /&gt;
expansionDN :: [Prop] -&amp;gt; Prop -&amp;gt; [[Prop]]&lt;br /&gt;
expansionDN fs f = [(elim 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;
--José María Contreras&lt;br /&gt;
&lt;br /&gt;
expansionAlfa :: [Prop] -&amp;gt; Prop -&amp;gt; [[Prop]]&lt;br /&gt;
expansionAlfa fs f = [(componentes f)`union`(delete f fs)]&lt;br /&gt;
&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;
--José María Contreras&lt;br /&gt;
&lt;br /&gt;
expansionBeta :: [Prop] -&amp;gt; Prop -&amp;gt; [[Prop]]&lt;br /&gt;
expansionBeta fs f = [x:(delete f fs)| x&amp;lt;-(componentes f)]&lt;br /&gt;
&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 fs = undefined&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 = undefined&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;
-- Isabel Duarte&lt;br /&gt;
subconjunto :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Bool&lt;br /&gt;
subconjunto xs ys = and [elem x ys | x &amp;lt;- xs]&lt;br /&gt;
&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 = undefined&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 = undefined&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 = undefined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_8&amp;diff=434</id>
		<title>Relación 8</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_8&amp;diff=434"/>
		<updated>2013-04-24T11:13:09Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&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;
-- &amp;quot;Pedro Ros&amp;quot;&lt;br /&gt;
literal :: Prop -&amp;gt; Bool&lt;br /&gt;
literal (Atom p) = True&lt;br /&gt;
literal (Neg (Atom p)) = True&lt;br /&gt;
literal x = 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;
-- Pedro Ros&lt;br /&gt;
dobleNegacion :: Prop -&amp;gt; Bool&lt;br /&gt;
dobleNegacion (Neg (Neg p))= True&lt;br /&gt;
dobleNegacion x = False&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;
-- Pedro Ros&lt;br /&gt;
alfa :: Prop -&amp;gt; Bool&lt;br /&gt;
alfa (Conj p q) = True&lt;br /&gt;
alfa (Neg (Impl p q))= True&lt;br /&gt;
alfa (Neg (Disj p q))= True&lt;br /&gt;
alfa (Equi p q) = True&lt;br /&gt;
alfa x = False&lt;br /&gt;
&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;
-- Pedro Ros&lt;br /&gt;
beta :: Prop -&amp;gt; Bool&lt;br /&gt;
beta (Disj p q) = True&lt;br /&gt;
beta (Impl p q) = True&lt;br /&gt;
beta (Neg (Conj p q)) = True&lt;br /&gt;
beta (Neg (Equi p q))= True&lt;br /&gt;
beta p = 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;
-- Pedro Ros&lt;br /&gt;
componentes :: Prop -&amp;gt; [Prop]&lt;br /&gt;
componentes (Conj p q) = [p,q]&lt;br /&gt;
componentes (Neg(Impl p q)) = [p,no q]&lt;br /&gt;
componentes (Neg(Disj p q))= [no p, no q]&lt;br /&gt;
componentes (Equi p q) = [Impl p q, Impl q p]&lt;br /&gt;
componentes (Disj p q) = [p, q]&lt;br /&gt;
componentes (Impl p q) = [no p, q]&lt;br /&gt;
componentes (Neg(Conj p q))= [no p, no q]&lt;br /&gt;
componentes (Neg(Equi p q))=[Neg(Impl p q), Neg(Impl q p)]&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;
-- Pedro Ros&lt;br /&gt;
conjuntoDeLiterales :: [Prop] -&amp;gt; Bool&lt;br /&gt;
conjuntoDeLiterales []= True&lt;br /&gt;
conjuntoDeLiterales (x:xs)= if literal x then conjuntoDeLiterales xs&lt;br /&gt;
                            else False&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;
-- Pedro Ros&lt;br /&gt;
tieneContradiccion :: [Prop] -&amp;gt; Bool&lt;br /&gt;
tieneContradiccion [x] = False&lt;br /&gt;
tieneContradiccion (x:xs)= if elem (no x) xs then True else&lt;br /&gt;
                               tieneContradiccion xs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Isabel Duarte&lt;br /&gt;
tieneContradiccion2 :: [Prop] -&amp;gt; Bool&lt;br /&gt;
tieneContradiccion2 fs = or [elem (no x) fs | x &amp;lt;- fs]&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 f = undefined&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 = undefined&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 = undefined&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 fs = undefined&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 = undefined&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 xs ys = undefined&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 = undefined&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 = undefined&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 = undefined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_8&amp;diff=433</id>
		<title>Relación 8</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_8&amp;diff=433"/>
		<updated>2013-04-24T11:12:45Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&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;
-- &amp;quot;Pedro Ros&amp;quot;&lt;br /&gt;
literal :: Prop -&amp;gt; Bool&lt;br /&gt;
literal (Atom p) = True&lt;br /&gt;
literal (Neg (Atom p)) = True&lt;br /&gt;
literal x = 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;
-- Pedro Ros&lt;br /&gt;
dobleNegacion :: Prop -&amp;gt; Bool&lt;br /&gt;
dobleNegacion (Neg (Neg p))= True&lt;br /&gt;
dobleNegacion x = False&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;
-- Pedro Ros&lt;br /&gt;
alfa :: Prop -&amp;gt; Bool&lt;br /&gt;
alfa (Conj p q) = True&lt;br /&gt;
alfa (Neg (Impl p q))= True&lt;br /&gt;
alfa (Neg (Disj p q))= True&lt;br /&gt;
alfa (Equi p q) = True&lt;br /&gt;
alfa x = False&lt;br /&gt;
&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;
-- Pedro Ros&lt;br /&gt;
beta :: Prop -&amp;gt; Bool&lt;br /&gt;
beta (Disj p q) = True&lt;br /&gt;
beta (Impl p q) = True&lt;br /&gt;
beta (Neg (Conj p q)) = True&lt;br /&gt;
beta (Neg (Equi p q))= True&lt;br /&gt;
beta p = 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;
-- Pedro Ros&lt;br /&gt;
componentes :: Prop -&amp;gt; [Prop]&lt;br /&gt;
componentes (Conj p q) = [p,q]&lt;br /&gt;
componentes (Neg(Impl p q)) = [p,no q]&lt;br /&gt;
componentes (Neg(Disj p q))= [no p, no q]&lt;br /&gt;
componentes (Equi p q) = [Impl p q, Impl q p]&lt;br /&gt;
componentes (Disj p q) = [p, q]&lt;br /&gt;
componentes (Impl p q) = [no p, q]&lt;br /&gt;
componentes (Neg(Conj p q))= [no p, no q]&lt;br /&gt;
componentes (Neg(Equi p q))=[Neg(Impl p q), Neg(Impl q p)]&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;
-- Pedro Ros&lt;br /&gt;
conjuntoDeLiterales :: [Prop] -&amp;gt; Bool&lt;br /&gt;
conjuntoDeLiterales []= True&lt;br /&gt;
conjuntoDeLiterales (x:xs)= if literal x then conjuntoDeLiterales xs&lt;br /&gt;
                            else False&lt;br /&gt;
&lt;br /&gt;
-- Isabel Duarte&lt;br /&gt;
tieneContradiccion2 :: [Prop] -&amp;gt; Bool&lt;br /&gt;
tieneContradiccion2 fs = or [elem (no x) fs | x &amp;lt;- fs]&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;
-- Pedro Ros&lt;br /&gt;
tieneContradiccion :: [Prop] -&amp;gt; Bool&lt;br /&gt;
tieneContradiccion [x] = False&lt;br /&gt;
tieneContradiccion (x:xs)= if elem (no x) xs then True else&lt;br /&gt;
                               tieneContradiccion xs&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 f = undefined&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 = undefined&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 = undefined&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 fs = undefined&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 = undefined&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 xs ys = undefined&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 = undefined&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 = undefined&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 = undefined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_8&amp;diff=432</id>
		<title>Relación 8</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_8&amp;diff=432"/>
		<updated>2013-04-24T11:12:29Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&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;
-- &amp;quot;Pedro Ros&amp;quot;&lt;br /&gt;
literal :: Prop -&amp;gt; Bool&lt;br /&gt;
literal (Atom p) = True&lt;br /&gt;
literal (Neg (Atom p)) = True&lt;br /&gt;
literal x = 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;
-- Pedro Ros&lt;br /&gt;
dobleNegacion :: Prop -&amp;gt; Bool&lt;br /&gt;
dobleNegacion (Neg (Neg p))= True&lt;br /&gt;
dobleNegacion x = False&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;
-- Pedro Ros&lt;br /&gt;
alfa :: Prop -&amp;gt; Bool&lt;br /&gt;
alfa (Conj p q) = True&lt;br /&gt;
alfa (Neg (Impl p q))= True&lt;br /&gt;
alfa (Neg (Disj p q))= True&lt;br /&gt;
alfa (Equi p q) = True&lt;br /&gt;
alfa x = False&lt;br /&gt;
&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;
-- Pedro Ros&lt;br /&gt;
beta :: Prop -&amp;gt; Bool&lt;br /&gt;
beta (Disj p q) = True&lt;br /&gt;
beta (Impl p q) = True&lt;br /&gt;
beta (Neg (Conj p q)) = True&lt;br /&gt;
beta (Neg (Equi p q))= True&lt;br /&gt;
beta p = 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;
-- Pedro Ros&lt;br /&gt;
componentes :: Prop -&amp;gt; [Prop]&lt;br /&gt;
componentes (Conj p q) = [p,q]&lt;br /&gt;
componentes (Neg(Impl p q)) = [p,no q]&lt;br /&gt;
componentes (Neg(Disj p q))= [no p, no q]&lt;br /&gt;
componentes (Equi p q) = [Impl p q, Impl q p]&lt;br /&gt;
componentes (Disj p q) = [p, q]&lt;br /&gt;
componentes (Impl p q) = [no p, q]&lt;br /&gt;
componentes (Neg(Conj p q))= [no p, no q]&lt;br /&gt;
componentes (Neg(Equi p q))=[Neg(Impl p q), Neg(Impl q p)]&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;
-- Pedro Ros&lt;br /&gt;
conjuntoDeLiterales :: [Prop] -&amp;gt; Bool&lt;br /&gt;
conjuntoDeLiterales []= True&lt;br /&gt;
conjuntoDeLiterales (x:xs)= if literal x then conjuntoDeLiterales xs&lt;br /&gt;
                            else False&lt;br /&gt;
&lt;br /&gt;
-- Isabel Duarte&lt;br /&gt;
tieneContradiccion :: [Prop] -&amp;gt; Bool&lt;br /&gt;
tieneContradiccion fs = or [elem (no x) fs | x &amp;lt;- fs]&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;
-- Pedro Ros&lt;br /&gt;
tieneContradiccion :: [Prop] -&amp;gt; Bool&lt;br /&gt;
tieneContradiccion [x] = False&lt;br /&gt;
tieneContradiccion (x:xs)= if elem (no x) xs then True else&lt;br /&gt;
                               tieneContradiccion xs&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 f = undefined&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 = undefined&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 = undefined&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 fs = undefined&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 = undefined&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 xs ys = undefined&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 = undefined&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 = undefined&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 = undefined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Ejercicio_2&amp;diff=400</id>
		<title>Ejercicio 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Ejercicio_2&amp;diff=400"/>
		<updated>2013-04-12T12:45:42Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: /* Selección del ejercicio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunciado ==&lt;br /&gt;
El segundo ejercicio evaluable consiste en la realización de una demostración por deducción natural en la Lógica de primer orden, con Isabelle/HOL.&lt;br /&gt;
Para ello, &lt;br /&gt;
* Cada alumno elegirá uno de los ejercicios propuestos en [[T2|T2]].&lt;br /&gt;
* Una vez elegido, lo anotará en la lista que se muestra a continuación, no pudiendo un mismo ejercicio ser elegido por más de un alumno. &lt;br /&gt;
* El ejercicio resuelto se enviará a mjoseh@us.es en un fichero usuario_2.thy antes del viernes 26 de abril de 2013.&lt;br /&gt;
* En la valoración del ejercicio se tendrá en cuenta tanto el nivel de dificultad como la calidad de la demostración.&lt;br /&gt;
&lt;br /&gt;
== Selección del ejercicio ==&lt;br /&gt;
&lt;br /&gt;
* Ejercicio 1: Francisco Vilches Chacón&lt;br /&gt;
* Ejercicio 2: &lt;br /&gt;
* Ejercicio 3: &lt;br /&gt;
* Ejercicio 4: &lt;br /&gt;
* Ejercicio 5: &lt;br /&gt;
* Ejercicio 6: &lt;br /&gt;
* Ejercicio 7: &lt;br /&gt;
* Ejercicio 8: &lt;br /&gt;
* Ejercicio 9: &lt;br /&gt;
* Ejercicio 10: &lt;br /&gt;
* Ejercicio 11: &lt;br /&gt;
* Ejercicio 12: &lt;br /&gt;
* Ejercicio 13: &lt;br /&gt;
* Ejercicio 14: &lt;br /&gt;
* Ejercicio 15: &lt;br /&gt;
* Ejercicio 16: &lt;br /&gt;
* Ejercicio 17: &lt;br /&gt;
* Ejercicio 18: &lt;br /&gt;
* Ejercicio 19: &lt;br /&gt;
* Ejercicio 20: &lt;br /&gt;
* Ejercicio 21: &lt;br /&gt;
* Ejercicio 22: &lt;br /&gt;
* Ejercicio 23: Irene Araujo Guijo&lt;br /&gt;
* Ejercicio 24: &lt;br /&gt;
* Ejercicio 25: &lt;br /&gt;
* Ejercicio 26: &lt;br /&gt;
* Ejercicio 27: FºJavier Sanz Gil&lt;br /&gt;
* Ejercicio 28: Isabel Duarte Tosso&lt;br /&gt;
* Ejercicio 29: &lt;br /&gt;
* Ejercicio 30: &lt;br /&gt;
* Ejercicio 31: &lt;br /&gt;
* Ejercicio 32: &lt;br /&gt;
* Ejercicio 33:&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_3&amp;diff=167</id>
		<title>Relación 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_3&amp;diff=167"/>
		<updated>2013-03-08T11:20:37Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &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;
-- &amp;quot;Pedro G. Ros&amp;quot;&lt;br /&gt;
lemma ejercicio_1a:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   show 3: &amp;quot;q&amp;quot; using 1 2 by (rule mp) &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Isabel Duarte&amp;quot;&lt;br /&gt;
lemma ejercicio_1b:&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,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;
-- &amp;quot;Pedro G. Ros&amp;quot;&lt;br /&gt;
lemma ejercicio_2a:&lt;br /&gt;
  assumes 1:&amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2:&amp;quot;q ⟶ r&amp;quot; and&lt;br /&gt;
          3:&amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  show 5: &amp;quot;r&amp;quot; using 2 4 by (rule mp) &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Isabel Duarte&amp;quot;&lt;br /&gt;
lemma ejercicio_2b:&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 -&lt;br /&gt;
  have &amp;quot;q&amp;quot; using assms(1,3) ..&lt;br /&gt;
  with `q ⟶ r` show &amp;quot;r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r), p ⟶ q, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
 &lt;br /&gt;
-- &amp;quot;Pedro G. Ros&amp;quot;&lt;br /&gt;
lemma ejercicio_3a:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p ⟶ q&amp;quot;       and&lt;br /&gt;
          3: &amp;quot;p&amp;quot;           &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   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;
   show 6: &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Isabel Duarte&amp;quot;&lt;br /&gt;
lemma ejercicio_3b:&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 &amp;quot;q ⟶ r&amp;quot; using assms(1,3) ..&lt;br /&gt;
  have &amp;quot;q&amp;quot; using assms(2,3) ..&lt;br /&gt;
  with `q ⟶ r` show &amp;quot;r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
 &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;
-- &amp;quot;Pedro G. Ros&amp;quot;&lt;br /&gt;
lemma ejercicio_4a:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 3:&amp;quot;p&amp;quot; &lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    have 5: &amp;quot;r&amp;quot; using 2 4 by (rule mp)}&lt;br /&gt;
  thus &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_4d:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  using assms by auto&lt;br /&gt;
&lt;br /&gt;
&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;
-- &amp;quot;Isabel Duarte&amp;quot;&lt;br /&gt;
lemma ejercicio_5a:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    {assume 4: &amp;quot;p&amp;quot;&lt;br /&gt;
      have  &amp;quot;q ⟶ r&amp;quot; using 1 4 ..&lt;br /&gt;
      hence 5: &amp;quot;r&amp;quot; using 3 ..}&lt;br /&gt;
    hence 6: &amp;quot;p ⟶ r&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;q ⟶ (p ⟶ r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;José Mª Contreras&amp;quot;&lt;br /&gt;
lemma ejercicio_6a:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
 {assume 2: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
   {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 ..&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot; using 2 3 ..&lt;br /&gt;
    have &amp;quot;r&amp;quot;  using 4 5 ..}&lt;br /&gt;
   hence &amp;quot;p ⟶ r&amp;quot; by (rule impI)}&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 7. Demostrar&lt;br /&gt;
     p ⊢ q ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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;
   show &amp;quot;q⟶ p&amp;quot; using assms(1) by (rule impI)&lt;br /&gt;
qed&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;
-- &amp;quot;Pedro G. Ros&amp;quot;&lt;br /&gt;
lemma ejercicio_8:&lt;br /&gt;
  &amp;quot;p ⟶ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
 {assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
   hence 2: &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;
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;
&lt;br /&gt;
-- Carmen Martinez Navarro, Erlinda Menendez Perez &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes  1: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  shows &amp;quot;(q ⟶ r) ⟶  (p ⟶ r)&amp;quot;&lt;br /&gt;
proof- &lt;br /&gt;
   {assume 2: &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
     {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
       have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
       have 5: &amp;quot;r&amp;quot; using 2 4 by (rule mp)}&lt;br /&gt;
     hence 6: &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;
&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;
-- &amp;quot;Pedro G. Ros&amp;quot;&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 &amp;quot;r&amp;quot;&lt;br /&gt;
  show  &amp;quot;q⟶ (p⟶ s)&amp;quot; &lt;br /&gt;
  proof &lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p⟶ s&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with assms have &amp;quot;q⟶ r⟶ s&amp;quot; ..&lt;br /&gt;
      hence &amp;quot;r⟶ s&amp;quot; using `q` ..&lt;br /&gt;
      thus &amp;quot;s&amp;quot; using `r`..&lt;br /&gt;
    qed&lt;br /&gt;
  qed    &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;
oops&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;
oops&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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes 1:&amp;quot;p&amp;quot; and&lt;br /&gt;
          2:&amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
show &amp;quot;p ∧ q&amp;quot; using 1 2 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 by (rule conjunct1)&lt;br /&gt;
have 2: &amp;quot;(q ∧ r)&amp;quot; using assms 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 6: &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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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;
proof -&lt;br /&gt;
have 1: &amp;quot;r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
have 2: &amp;quot;(p∧q)&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
have 3: &amp;quot;p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
have 4: &amp;quot;q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
have 5: &amp;quot;(q∧r)&amp;quot; using 4 1 by (rule conjI)&lt;br /&gt;
show 6: &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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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;
proof -&lt;br /&gt;
have 1: &amp;quot;q&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
show &amp;quot;p⟶ q&amp;quot; using 1 by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&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;
--Carmen Martinez Navarro , Erlinda Menendez Perez&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes  1: &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶  (q ∧ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
   assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
   have 3: &amp;quot;p ⟶ q&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
   have 4: &amp;quot;q&amp;quot; using 3 2 by (rule mp)&lt;br /&gt;
   have 5: &amp;quot;p ⟶ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
   have 6: &amp;quot;r&amp;quot; using 5 2 by (rule mp)&lt;br /&gt;
   show &amp;quot;q ∧ r&amp;quot; using 4 6 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&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;
&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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 by this&lt;br /&gt;
  moreover&lt;br /&gt;
  { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;q ∨ p&amp;quot; using 2 by (rule disjI2) }&lt;br /&gt;
  moreover&lt;br /&gt;
  { assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;q ∨ p&amp;quot; using 3 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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
-- &amp;quot;Pedro G. Ros&amp;quot;&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;
using assms(1)&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p∨q&amp;quot;&lt;br /&gt;
  thus &amp;quot;p∨q∨r&amp;quot; &lt;br /&gt;
    proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    thus &amp;quot;p∨q∨r&amp;quot; ..&lt;br /&gt;
    next&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    hence &amp;quot;q∨r&amp;quot; ..&lt;br /&gt;
    thus &amp;quot;p∨q∨r&amp;quot; ..&lt;br /&gt;
    qed&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;r&amp;quot;&lt;br /&gt;
  hence &amp;quot;q∨r&amp;quot; ..&lt;br /&gt;
  thus &amp;quot;p∨q∨r&amp;quot; ..&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_3&amp;diff=152</id>
		<title>Relación 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_3&amp;diff=152"/>
		<updated>2013-03-05T14:19:31Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &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;
-- &amp;quot;Pedro G. Ros&amp;quot;&lt;br /&gt;
lemma ejercicio_1a:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   show 3: &amp;quot;q&amp;quot; using 1 2 by (rule mp) &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Isabel Duarte&amp;quot;&lt;br /&gt;
lemma ejercicio_1b:&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,2) by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
 &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;
-- &amp;quot;Pedro G. Ros&amp;quot;&lt;br /&gt;
lemma ejercicio_2a:&lt;br /&gt;
  assumes 1:&amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2:&amp;quot;q ⟶ r&amp;quot; and&lt;br /&gt;
          3:&amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  show 5: &amp;quot;r&amp;quot; using 2 4 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;
-- &amp;quot;Pedro G. Ros&amp;quot;&lt;br /&gt;
lemma ejercicio_3a:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p ⟶ q&amp;quot;       and&lt;br /&gt;
          3: &amp;quot;p&amp;quot;           &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   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;
   show 6: &amp;quot;r&amp;quot; using 4 5 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;
 &lt;br /&gt;
-- &amp;quot;Pedro G. Ros&amp;quot;&lt;br /&gt;
lemma ejercicio_4a:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 3:&amp;quot;p&amp;quot; &lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    have 5: &amp;quot;r&amp;quot; using 2 4 by (rule mp)}&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 5. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
--&amp;quot;Isabel Duarte&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_5a:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    {assume 4: &amp;quot;p&amp;quot;&lt;br /&gt;
      have  &amp;quot;q ⟶ r&amp;quot; using 1 4 ..&lt;br /&gt;
      hence 5: &amp;quot;r&amp;quot; using 3 ..}&lt;br /&gt;
    hence 6: &amp;quot;p ⟶ r&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;q ⟶ (p ⟶ r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
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;
oops&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;
oops&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;
oops&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;
oops&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;
oops&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;
oops&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;
oops&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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes 1:&amp;quot;p&amp;quot; and&lt;br /&gt;
          2:&amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
show &amp;quot;p ∧ q&amp;quot; using 1 2 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 by (rule conjunct1)&lt;br /&gt;
have 2: &amp;quot;(q ∧ r)&amp;quot; using assms 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 6: &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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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;
proof -&lt;br /&gt;
have 1: &amp;quot;r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
have 2: &amp;quot;(p∧q)&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
have 3: &amp;quot;p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
have 4: &amp;quot;q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
have 5: &amp;quot;(q∧r)&amp;quot; using 4 1 by (rule conjI)&lt;br /&gt;
show 6: &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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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;
proof -&lt;br /&gt;
have 1: &amp;quot;q&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
show &amp;quot;p⟶ q&amp;quot; using 1 by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&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;
oops&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;
&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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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;
oops&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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 by this&lt;br /&gt;
  moreover&lt;br /&gt;
  { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;q ∨ p&amp;quot; using 2 by (rule disjI2) }&lt;br /&gt;
  moreover&lt;br /&gt;
  { assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;q ∨ p&amp;quot; using 3 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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_3&amp;diff=151</id>
		<title>Relación 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_3&amp;diff=151"/>
		<updated>2013-03-05T14:19:08Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &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;
-- &amp;quot;Pedro G. Ros&amp;quot;&lt;br /&gt;
lemma ejercicio_1a:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   show 3: &amp;quot;q&amp;quot; using 1 2 by (rule mp) &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Isabel Duarte&amp;quot;&lt;br /&gt;
lemma ejercicio_1b:&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,2) by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
 &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;
-- &amp;quot;Pedro G. Ros&amp;quot;&lt;br /&gt;
lemma ejercicio_2a:&lt;br /&gt;
  assumes 1:&amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2:&amp;quot;q ⟶ r&amp;quot; and&lt;br /&gt;
          3:&amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  show 5: &amp;quot;r&amp;quot; using 2 4 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;
-- &amp;quot;Pedro G. Ros&amp;quot;&lt;br /&gt;
lemma ejercicio_3a:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p ⟶ q&amp;quot;       and&lt;br /&gt;
          3: &amp;quot;p&amp;quot;           &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   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;
   show 6: &amp;quot;r&amp;quot; using 4 5 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;
 &lt;br /&gt;
-- &amp;quot;Pedro G. Ros&amp;quot;&lt;br /&gt;
lemma ejercicio_4a:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 3:&amp;quot;p&amp;quot; &lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    have 5: &amp;quot;r&amp;quot; using 2 4 by (rule mp)}&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 5. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
--&amp;quot;Isabel Duarte&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    {assume 4: &amp;quot;p&amp;quot;&lt;br /&gt;
      have  &amp;quot;q ⟶ r&amp;quot; using 1 4 ..&lt;br /&gt;
      hence 5: &amp;quot;r&amp;quot; using 3 ..}&lt;br /&gt;
    hence 6: &amp;quot;p ⟶ r&amp;quot; by (rule impI)}&lt;br /&gt;
  thus &amp;quot;q ⟶ (p ⟶ r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
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;
oops&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;
oops&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;
oops&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;
oops&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;
oops&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;
oops&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;
oops&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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes 1:&amp;quot;p&amp;quot; and&lt;br /&gt;
          2:&amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
show &amp;quot;p ∧ q&amp;quot; using 1 2 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 by (rule conjunct1)&lt;br /&gt;
have 2: &amp;quot;(q ∧ r)&amp;quot; using assms 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 6: &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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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;
proof -&lt;br /&gt;
have 1: &amp;quot;r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
have 2: &amp;quot;(p∧q)&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
have 3: &amp;quot;p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
have 4: &amp;quot;q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
have 5: &amp;quot;(q∧r)&amp;quot; using 4 1 by (rule conjI)&lt;br /&gt;
show 6: &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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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;
proof -&lt;br /&gt;
have 1: &amp;quot;q&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
show &amp;quot;p⟶ q&amp;quot; using 1 by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&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;
oops&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;
&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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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;
oops&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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 by this&lt;br /&gt;
  moreover&lt;br /&gt;
  { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;q ∨ p&amp;quot; using 2 by (rule disjI2) }&lt;br /&gt;
  moreover&lt;br /&gt;
  { assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;q ∨ p&amp;quot; using 3 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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
-- &amp;quot;Pedro G. Ros Reina&amp;quot;&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 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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_3&amp;diff=149</id>
		<title>Relación 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_3&amp;diff=149"/>
		<updated>2013-03-05T13:57:25Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &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;
-- &amp;quot;Pedro G. Ros&amp;quot;&lt;br /&gt;
lemma ejercicio_1a:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   show 3: &amp;quot;q&amp;quot; using 1 2 by (rule mp) &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Isabel Duarte&amp;quot;&lt;br /&gt;
lemma ejercicio_1b:&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,2) by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
 &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;
-- &amp;quot;Pedro G. Ros&amp;quot;&lt;br /&gt;
lemma ejercicio_2a:&lt;br /&gt;
  assumes 1:&amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2:&amp;quot;q ⟶ r&amp;quot; and&lt;br /&gt;
          3:&amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  show 5: &amp;quot;r&amp;quot; using 2 4 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;
-- &amp;quot;Pedro G. Ros&amp;quot;&lt;br /&gt;
lemma ejercicio_3a:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p ⟶ q&amp;quot;       and&lt;br /&gt;
          3: &amp;quot;p&amp;quot;           &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
   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;
   show 6: &amp;quot;r&amp;quot; using 4 5 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;
 &lt;br /&gt;
-- &amp;quot;Pedro G. Ros&amp;quot;&lt;br /&gt;
lemma ejercicio_4a:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 3:&amp;quot;p&amp;quot; &lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    have 5: &amp;quot;r&amp;quot; using 2 4 by (rule mp)}&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 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;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
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;
oops&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;
oops&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;
oops&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;
oops&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;
oops&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;
oops&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;
oops&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;
oops&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;
oops&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;
oops&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;
oops&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;
oops&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;
oops&lt;br /&gt;
&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;
oops&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;
&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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
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;
oops&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;
lemma ejercicio_39:&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 40. Demostrar&lt;br /&gt;
     ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&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;
oops&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;
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;
oops&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;
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;
oops&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;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_2&amp;diff=108</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_2&amp;diff=108"/>
		<updated>2013-02-22T11:15:40Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &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;
-- Antonio Molero&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) = simbolosPropForm p `union` simbolosPropForm q&lt;br /&gt;
simbolosPropForm (Disj p q) = simbolosPropForm p `union` simbolosPropForm q&lt;br /&gt;
simbolosPropForm (Impl p q) = simbolosPropForm p `union` simbolosPropForm q&lt;br /&gt;
simbolosPropForm (Equi p q) = simbolosPropForm p `union` simbolosPropForm q&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;
-- Pedro G. Ros&lt;br /&gt;
significado :: Prop -&amp;gt; Interpretacion -&amp;gt; Bool&lt;br /&gt;
significado (Atom p) a = elem (Atom p) a&lt;br /&gt;
significado (Neg p) a = not (significado p a)&lt;br /&gt;
significado (Conj p q) a= (significado p a)&amp;amp;&amp;amp; (significado q a)&lt;br /&gt;
significado (Disj p q) a =(significado p a)|| (significado q a)&lt;br /&gt;
significado (Impl p q) a = if (significado p a) then (significado q a)==&lt;br /&gt;
                           True else True&lt;br /&gt;
significado (Equi p q) a = (significado (Impl p q) a )&amp;amp;&amp;amp;(significado (Impl q p)) a &lt;br /&gt;
 &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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
subconjuntos :: [a] -&amp;gt; [[a]]&lt;br /&gt;
subconjuntos []     = [[]]&lt;br /&gt;
subconjuntos (x:xs) = [x:ys | ys &amp;lt;- subconjuntos xs] ++ subconjuntos xs&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
interpretacionesForm :: Prop -&amp;gt; [Interpretación]&lt;br /&gt;
interpretacionesForm p = subconjuntos (simbolosPropForm p)&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;
--Pedro G. Ros&lt;br /&gt;
esModeloFórmula :: Interpretación -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esModeloFórmula i (Atom p) = significado (Atom p) i&lt;br /&gt;
esModeloFórmula i (Conj a b)= significado (Conj a b) i&lt;br /&gt;
esModeloFórmula i (Disj a b) = esModeloFórmula i (Conj a b)&lt;br /&gt;
esModeloFórmula i (Impl a b)=esModeloFórmula i (Conj a b)&lt;br /&gt;
esModeloFórmula i (Equi a b)=(esModeloFórmula i (Impl a b))&amp;amp;&amp;amp;(esModeloFórmula i (Impl b a))&lt;br /&gt;
esModeloFórmula i (Neg b)=not(esModeloFórmula i b)&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;
--Pedro G. Ros&lt;br /&gt;
modelosFórmula :: Prop -&amp;gt; [Interpretación]&lt;br /&gt;
modelosFórmula f = [x|x&amp;lt;-(interpretacionesForm f),esModeloFórmula x f]&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
esVálida :: Prop -&amp;gt; Bool&lt;br /&gt;
esVálida f = modelosFormula f == interpretacionesForm f&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
esInsatisfacible :: Prop -&amp;gt; Bool&lt;br /&gt;
esInsatisfacible f =  modelosFormula f == []&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
esSatisfacible :: Prop -&amp;gt; Bool&lt;br /&gt;
esSatisfacible f = modelosFormula f /= []&lt;br /&gt;
&lt;br /&gt;
-- Isabel Duarte&lt;br /&gt;
esSatisfacible2 :: Prop -&amp;gt; Bool&lt;br /&gt;
esSatisfacible2 f = not (esInsatisfacible f)&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;
-- Antonio Molero&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) = x `union` unionGeneral xs &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;
-- Antonio Molero&lt;br /&gt;
&lt;br /&gt;
simbolosPropConj :: [Prop] -&amp;gt; [Prop]&lt;br /&gt;
simbolosPropConj s = unionGeneral [simbolosPropForm x|x&amp;lt;-s]&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
interpretacionesConjunto :: [Prop] -&amp;gt; [Interpretación]&lt;br /&gt;
interpretacionesConjunto s = subconjuntos (simbolosPropConj s)&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;
--Isabel Duarte&lt;br /&gt;
esModeloConjunto :: Interpretación -&amp;gt; [Prop] -&amp;gt; Bool&lt;br /&gt;
esModeloConjunto i s = and [ esModeloFórmula i x | x &amp;lt;- s] &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;
--Isabel Duarte&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;
&lt;br /&gt;
&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 = undefined&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 s = undefined&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 = undefined&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_2&amp;diff=107</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_2&amp;diff=107"/>
		<updated>2013-02-22T11:15:17Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &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;
-- Antonio Molero&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) = simbolosPropForm p `union` simbolosPropForm q&lt;br /&gt;
simbolosPropForm (Disj p q) = simbolosPropForm p `union` simbolosPropForm q&lt;br /&gt;
simbolosPropForm (Impl p q) = simbolosPropForm p `union` simbolosPropForm q&lt;br /&gt;
simbolosPropForm (Equi p q) = simbolosPropForm p `union` simbolosPropForm q&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;
-- Pedro G. Ros&lt;br /&gt;
significado :: Prop -&amp;gt; Interpretacion -&amp;gt; Bool&lt;br /&gt;
significado (Atom p) a = elem (Atom p) a&lt;br /&gt;
significado (Neg p) a = not (significado p a)&lt;br /&gt;
significado (Conj p q) a= (significado p a)&amp;amp;&amp;amp; (significado q a)&lt;br /&gt;
significado (Disj p q) a =(significado p a)|| (significado q a)&lt;br /&gt;
significado (Impl p q) a = if (significado p a) then (significado q a)==&lt;br /&gt;
                           True else True&lt;br /&gt;
significado (Equi p q) a = (significado (Impl p q) a )&amp;amp;&amp;amp;(significado (Impl q p)) a &lt;br /&gt;
 &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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
subconjuntos :: [a] -&amp;gt; [[a]]&lt;br /&gt;
subconjuntos []     = [[]]&lt;br /&gt;
subconjuntos (x:xs) = [x:ys | ys &amp;lt;- subconjuntos xs] ++ subconjuntos xs&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
interpretacionesForm :: Prop -&amp;gt; [Interpretación]&lt;br /&gt;
interpretacionesForm p = subconjuntos (simbolosPropForm p)&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;
--Pedro G. Ros&lt;br /&gt;
esModeloFórmula :: Interpretación -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esModeloFórmula i (Atom p) = significado (Atom p) i&lt;br /&gt;
esModeloFórmula i (Conj a b)= significado (Conj a b) i&lt;br /&gt;
esModeloFórmula i (Disj a b) = esModeloFórmula i (Conj a b)&lt;br /&gt;
esModeloFórmula i (Impl a b)=esModeloFórmula i (Conj a b)&lt;br /&gt;
esModeloFórmula i (Equi a b)=(esModeloFórmula i (Impl a b))&amp;amp;&amp;amp;(esModeloFórmula i (Impl b a))&lt;br /&gt;
esModeloFórmula i (Neg b)=not(esModeloFórmula i b)&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;
--Pedro G. Ros&lt;br /&gt;
modelosFórmula :: Prop -&amp;gt; [Interpretación]&lt;br /&gt;
modelosFórmula f = [x|x&amp;lt;-(interpretacionesForm f),esModeloFórmula x f]&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
esVálida :: Prop -&amp;gt; Bool&lt;br /&gt;
esVálida f = modelosFormula f == interpretacionesForm f&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
esInsatisfacible :: Prop -&amp;gt; Bool&lt;br /&gt;
esInsatisfacible f =  modelosFormula f == []&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
esSatisfacible :: Prop -&amp;gt; Bool&lt;br /&gt;
esSatisfacible f = modelosFormula f /= []&lt;br /&gt;
&lt;br /&gt;
-- Isabel Duarte&lt;br /&gt;
esSatisfacible2 :: Prop -&amp;gt; Bool&lt;br /&gt;
esSatisfacible2 f = not (esInsatisfacible f)&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;
-- Antonio Molero&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) = x `union` unionGeneral xs &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;
-- Antonio Molero&lt;br /&gt;
&lt;br /&gt;
simbolosPropConj :: [Prop] -&amp;gt; [Prop]&lt;br /&gt;
simbolosPropConj s = unionGeneral [simbolosPropForm x|x&amp;lt;-s]&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
interpretacionesConjunto :: [Prop] -&amp;gt; [Interpretación]&lt;br /&gt;
interpretacionesConjunto s = subconjuntos (simbolosPropConj s)&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;
--Isabel Duarte&lt;br /&gt;
esModeloConjunto :: Interpretación -&amp;gt; [Prop] -&amp;gt; Bool&lt;br /&gt;
esModeloConjunto i s = and [ esModeloFórmula i x | x &amp;lt;- s] &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;
--Isabel Duarte&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;
&lt;br /&gt;
&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 = undefined&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 s = undefined&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 = undefined&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_2&amp;diff=106</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_2&amp;diff=106"/>
		<updated>2013-02-22T11:12:57Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &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;
-- Antonio Molero&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) = simbolosPropForm p `union` simbolosPropForm q&lt;br /&gt;
simbolosPropForm (Disj p q) = simbolosPropForm p `union` simbolosPropForm q&lt;br /&gt;
simbolosPropForm (Impl p q) = simbolosPropForm p `union` simbolosPropForm q&lt;br /&gt;
simbolosPropForm (Equi p q) = simbolosPropForm p `union` simbolosPropForm q&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;
-- Pedro G. Ros&lt;br /&gt;
significado :: Prop -&amp;gt; Interpretacion -&amp;gt; Bool&lt;br /&gt;
significado (Atom p) a = elem (Atom p) a&lt;br /&gt;
significado (Neg p) a = not (significado p a)&lt;br /&gt;
significado (Conj p q) a= (significado p a)&amp;amp;&amp;amp; (significado q a)&lt;br /&gt;
significado (Disj p q) a =(significado p a)|| (significado q a)&lt;br /&gt;
significado (Impl p q) a = if (significado p a) then (significado q a)==&lt;br /&gt;
                           True else True&lt;br /&gt;
significado (Equi p q) a = (significado (Impl p q) a )&amp;amp;&amp;amp;(significado (Impl q p)) a &lt;br /&gt;
 &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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
subconjuntos :: [a] -&amp;gt; [[a]]&lt;br /&gt;
subconjuntos []     = [[]]&lt;br /&gt;
subconjuntos (x:xs) = [x:ys | ys &amp;lt;- subconjuntos xs] ++ subconjuntos xs&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
interpretacionesForm :: Prop -&amp;gt; [Interpretación]&lt;br /&gt;
interpretacionesForm p = subconjuntos (simbolosPropForm p)&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;
--Pedro G. Ros&lt;br /&gt;
esModeloFórmula :: Interpretación -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esModeloFórmula i (Atom p) = significado (Atom p) i&lt;br /&gt;
esModeloFórmula i (Conj a b)= significado (Conj a b) i&lt;br /&gt;
esModeloFórmula i (Disj a b) = esModeloFórmula i (Conj a b)&lt;br /&gt;
esModeloFórmula i (Impl a b)=esModeloFórmula i (Conj a b)&lt;br /&gt;
esModeloFórmula i (Equi a b)=(esModeloFórmula i (Impl a b))&amp;amp;&amp;amp;(esModeloFórmula i (Impl b a))&lt;br /&gt;
esModeloFórmula i (Neg b)=not(esModeloFórmula i b)&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;
--Pedro G. Ros&lt;br /&gt;
modelosFórmula :: Prop -&amp;gt; [Interpretación]&lt;br /&gt;
modelosFórmula f = [x|x&amp;lt;-(interpretacionesForm f),esModeloFórmula x f]&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
esVálida :: Prop -&amp;gt; Bool&lt;br /&gt;
esVálida f = modelosFormula f == interpretacionesForm f&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
esInsatisfacible :: Prop -&amp;gt; Bool&lt;br /&gt;
esInsatisfacible f =  modelosFormula f == []&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
esSatisfacible :: Prop -&amp;gt; Bool&lt;br /&gt;
esSatisfacible f = modelosFormula f /= []&lt;br /&gt;
&lt;br /&gt;
-- Isabel Duarte&lt;br /&gt;
esSatisfacible2 :: Prop -&amp;gt; Bool&lt;br /&gt;
esSatisfacible2 f = not (esInsatisfacible f)&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;
-- Antonio Molero&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) = x `union` unionGeneral xs &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;
-- Antonio Molero&lt;br /&gt;
&lt;br /&gt;
simbolosPropConj :: [Prop] -&amp;gt; [Prop]&lt;br /&gt;
simbolosPropConj s = unionGeneral [simbolosPropForm x|x&amp;lt;-s]&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
interpretacionesConjunto :: [Prop] -&amp;gt; [Interpretación]&lt;br /&gt;
interpretacionesConjunto s = subconjuntos (simbolosPropConj s)&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;
--Isabel Duarte&lt;br /&gt;
esModeloConjunto :: Interpretación -&amp;gt; [Prop] -&amp;gt; Bool&lt;br /&gt;
esModeloConjunto i s = and [ esModeloFórmula i x | x &amp;lt;- s] &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 = undefined&lt;br /&gt;
&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 = undefined&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 s = undefined&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 = undefined&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_2&amp;diff=105</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2013/index.php?title=Relaci%C3%B3n_2&amp;diff=105"/>
		<updated>2013-02-22T11:08:31Z</updated>

		<summary type="html">&lt;p&gt;Isaduatos: &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;
-- Antonio Molero&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) = simbolosPropForm p `union` simbolosPropForm q&lt;br /&gt;
simbolosPropForm (Disj p q) = simbolosPropForm p `union` simbolosPropForm q&lt;br /&gt;
simbolosPropForm (Impl p q) = simbolosPropForm p `union` simbolosPropForm q&lt;br /&gt;
simbolosPropForm (Equi p q) = simbolosPropForm p `union` simbolosPropForm q&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;
-- Pedro G. Ros&lt;br /&gt;
significado :: Prop -&amp;gt; Interpretacion -&amp;gt; Bool&lt;br /&gt;
significado (Atom p) a = elem (Atom p) a&lt;br /&gt;
significado (Neg p) a = not (significado p a)&lt;br /&gt;
significado (Conj p q) a= (significado p a)&amp;amp;&amp;amp; (significado q a)&lt;br /&gt;
significado (Disj p q) a =(significado p a)|| (significado q a)&lt;br /&gt;
significado (Impl p q) a = if (significado p a) then (significado q a)==&lt;br /&gt;
                           True else True&lt;br /&gt;
significado (Equi p q) a = (significado (Impl p q) a )&amp;amp;&amp;amp;(significado (Impl q p)) a &lt;br /&gt;
 &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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
subconjuntos :: [a] -&amp;gt; [[a]]&lt;br /&gt;
subconjuntos []     = [[]]&lt;br /&gt;
subconjuntos (x:xs) = [x:ys | ys &amp;lt;- subconjuntos xs] ++ subconjuntos xs&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
interpretacionesForm :: Prop -&amp;gt; [Interpretación]&lt;br /&gt;
interpretacionesForm p = subconjuntos (simbolosPropForm p)&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;
--Pedro G. Ros&lt;br /&gt;
esModeloFórmula :: Interpretación -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esModeloFórmula i (Atom p) = significado (Atom p) i&lt;br /&gt;
esModeloFórmula i (Conj a b)= significado (Conj a b) i&lt;br /&gt;
esModeloFórmula i (Disj a b) = esModeloFórmula i (Conj a b)&lt;br /&gt;
esModeloFórmula i (Impl a b)=esModeloFórmula i (Conj a b)&lt;br /&gt;
esModeloFórmula i (Equi a b)=(esModeloFórmula i (Impl a b))&amp;amp;&amp;amp;(esModeloFórmula i (Impl b a))&lt;br /&gt;
esModeloFórmula i (Neg b)=not(esModeloFórmula i b)&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;
--Pedro G. Ros&lt;br /&gt;
modelosFórmula :: Prop -&amp;gt; [Interpretación]&lt;br /&gt;
modelosFórmula f = [x|x&amp;lt;-(interpretacionesForm f),esModeloFórmula x f]&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
esVálida :: Prop -&amp;gt; Bool&lt;br /&gt;
esVálida f = modelosFormula f == interpretacionesForm f&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
esInsatisfacible :: Prop -&amp;gt; Bool&lt;br /&gt;
esInsatisfacible f =  modelosFormula f == []&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
esSatisfacible :: Prop -&amp;gt; Bool&lt;br /&gt;
esSatisfacible f = modelosFormula f /= []&lt;br /&gt;
&lt;br /&gt;
-- Isabel Duarte&lt;br /&gt;
esSatisfacible2 :: Prop -&amp;gt; Bool&lt;br /&gt;
esSatisfacible2 f = not (esInsatisfacible f)&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;
-- Antonio Molero&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) = x `union` unionGeneral xs &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;
-- Antonio Molero&lt;br /&gt;
&lt;br /&gt;
simbolosPropConj :: [Prop] -&amp;gt; [Prop]&lt;br /&gt;
simbolosPropConj s = unionGeneral [simbolosPropForm x|x&amp;lt;-s]&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;
-- Reme Sillero&lt;br /&gt;
&lt;br /&gt;
interpretacionesConjunto :: [Prop] -&amp;gt; [Interpretación]&lt;br /&gt;
interpretacionesConjunto s = subconjuntos (simbolosPropConj s)&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 = undefined&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 = undefined&lt;br /&gt;
&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 = undefined&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 s = undefined&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 = undefined&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaduatos</name></author>
		
	</entry>
</feed>