<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/LMF2016/index.php?action=history&amp;feed=atom&amp;title=R12_sol</id>
	<title>R12 sol - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/LMF2016/index.php?action=history&amp;feed=atom&amp;title=R12_sol"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2016/index.php?title=R12_sol&amp;action=history"/>
	<updated>2026-07-18T23:50:15Z</updated>
	<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2016/index.php?title=R12_sol&amp;diff=221&amp;oldid=prev</id>
		<title>Mjoseh: Página creada con &#039;&lt;source lang =&quot;haskell&quot;&gt; -- Clausulas.hs -- Cláusulas. -- ---------------------------------------------------------------------  module Clausulas where  -- --------------------...&#039;</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2016/index.php?title=R12_sol&amp;diff=221&amp;oldid=prev"/>
		<updated>2016-05-10T12:34:03Z</updated>

		<summary type="html">&lt;p&gt;Página creada con &amp;#039;&amp;lt;source lang =&amp;quot;haskell&amp;quot;&amp;gt; -- Clausulas.hs -- Cláusulas. -- ---------------------------------------------------------------------  module Clausulas where  -- --------------------...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&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 Clausula como una lista de&lt;br /&gt;
-- literales. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
type Clausula = [Literal]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2: Definir la función&lt;br /&gt;
--    clausula :: Prop -&amp;gt; Clausula&lt;br /&gt;
-- tal que (clausula f) es la clausula de la fórmula-clausal f. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    clausula p                                 ==&amp;gt;  [p]&lt;br /&gt;
--    clausula (no p)                            ==&amp;gt;  [no p]&lt;br /&gt;
--    clausula (((no p) \/ r) \/ ((no p) \/ q))  ==&amp;gt;  [q,r,no p]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
clausula :: Prop -&amp;gt; Clausula&lt;br /&gt;
clausula f &lt;br /&gt;
    | 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;
-- Ejercicio 3: Definir la función&lt;br /&gt;
--    clausulasFNC :: Prop -&amp;gt; [Clausula]&lt;br /&gt;
-- tal que (clausulasFNC f) es el conjunto de clausulas de la fórmula en&lt;br /&gt;
-- forma normal conjuntiva f. Por ejmplo,&lt;br /&gt;
--    clausulasFNC (p /\ ((no q) \/ r))&lt;br /&gt;
--    ==&amp;gt; [[p],[r, no q]]&lt;br /&gt;
--    clausulasFNC (((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;
clausulasFNC :: Prop -&amp;gt; [Clausula]&lt;br /&gt;
clausulasFNC (Conj f g) = &lt;br /&gt;
    (clausulasFNC f) `union`  (clausulasFNC g) &lt;br /&gt;
clausulasFNC f =&lt;br /&gt;
    [clausula f]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4: Definir la función&lt;br /&gt;
--    clausulas :: Prop -&amp;gt; [Clausula]&lt;br /&gt;
-- tal que (clausulas f) es un conjunto de clausulas equivalente a&lt;br /&gt;
-- f. Por ejemplo,&lt;br /&gt;
--    clausulas (p /\ (q --&amp;gt; r))       &lt;br /&gt;
--    ==&amp;gt; [[p],[r,no q]]&lt;br /&gt;
--    clausulas (no (p /\ (q --&amp;gt; r)))  &lt;br /&gt;
--    ==&amp;gt; [[q,no p],[no p,no r]]&lt;br /&gt;
--    clausulas (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;
clausulas :: Prop -&amp;gt; [Clausula]&lt;br /&gt;
clausulas f =&lt;br /&gt;
    clausulasFNC (formaNormalConjuntiva f)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Clausulas 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;
--    clausulasConjunto :: [Prop] -&amp;gt; [Clausula]&lt;br /&gt;
-- tal que (clausulasConjunto s) es un conjunto de clausulas equivalente&lt;br /&gt;
-- a s. Por ejemplo,&lt;br /&gt;
--    clausulasConjunto [p --&amp;gt; q, q --&amp;gt; r]   ==&amp;gt;  [[q,no p],[r,no q]]&lt;br /&gt;
--    clausulasConjunto [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;
clausulasConjunto :: [Prop] -&amp;gt; [Clausula]&lt;br /&gt;
clausulasConjunto s =&lt;br /&gt;
    unionGeneral [clausulas f | f &amp;lt;- s]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Simbolos proposicionales de una clausula                           --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6: Definir la función&lt;br /&gt;
--    simbolosProposicionalesClausula :: Clausula -&amp;gt; [Prop]&lt;br /&gt;
-- tal que (simbolosProposicionalesClausula c) es el conjunto de los&lt;br /&gt;
-- simbolos proposicionales de c. Por ejemplo,&lt;br /&gt;
--    simbolosProposicionalesClausula [p, q, no p]  ==&amp;gt;  [p,q]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
simbolosProposicionalesClausula :: Clausula -&amp;gt; [Prop]&lt;br /&gt;
simbolosProposicionalesClausula = simbolosPropConj&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Simbolos proposicionales de un conjunto de clausulas               --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7: Definir la función&lt;br /&gt;
--    simbolosProposicionalesConjuntoClausula :: [Clausula] -&amp;gt; [Prop]&lt;br /&gt;
-- tal que (simbolosProposicionalesConjuntoClausula s) es el conjunto de los&lt;br /&gt;
-- simbolos proposicionales de s. Por ejemplo,&lt;br /&gt;
--    simbolosProposicionalesConjuntoClausula [[p, q],[no q, r]]&lt;br /&gt;
--    ==&amp;gt; [p,q,r]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
simbolosProposicionalesConjuntoClausula :: [Clausula] -&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 clausula                                   --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8: Definir la función&lt;br /&gt;
--    interpretacionesClausula :: Clausula -&amp;gt; [Interpretación]&lt;br /&gt;
-- tal que (interpretacionesClausula c) es el conjunto de&lt;br /&gt;
-- interpretaciones de c. Por ejemplo,&lt;br /&gt;
--    interpretacionesClausula [p, q, no p]  ==&amp;gt;  [[p,q],[p],[q],[]]&lt;br /&gt;
--    interpretacionesClausula []            ==&amp;gt;  [[]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interpretacionesClausula :: Clausula -&amp;gt; [Interpretación]&lt;br /&gt;
interpretacionesClausula c =&lt;br /&gt;
    subconjuntos (simbolosProposicionalesClausula c)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Interpretaciones de un conjunto de clausulas                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9: Definir la función&lt;br /&gt;
--    interpretacionesConjuntoClausula :: [Clausula] -&amp;gt; [Interpretación]&lt;br /&gt;
-- tal que (interpretacionesConjuntoClausula s) es el conjunto de&lt;br /&gt;
-- interpretaciones de s. Por ejemplo,&lt;br /&gt;
--    interpretacionesConjuntoClausula [[p, no q],[no p, q]]&lt;br /&gt;
--    ==&amp;gt; [[p,q],[p],[q],[]]&lt;br /&gt;
--    interpretacionesConjuntoClausula []&lt;br /&gt;
--    ==&amp;gt; [[]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interpretacionesConjuntoClausula :: [Clausula] -&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 clausulas                                               --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10: Definir la función&lt;br /&gt;
--    esModeloLiteral :: Interpretación -&amp;gt; Literal -&amp;gt; Bool&lt;br /&gt;
-- tal que (esModeloLiteral i l) se verifica si i es modelo de l. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esModeloLiteral [p,r] p       ==&amp;gt;  True&lt;br /&gt;
--    esModeloLiteral [p,r] q       ==&amp;gt;  False&lt;br /&gt;
--    esModeloLiteral [p,r] (no p)  ==&amp;gt;  False&lt;br /&gt;
--    esModeloLiteral [p,r] (no q)  ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esModeloLiteral :: Interpretación -&amp;gt; Literal -&amp;gt; Bool&lt;br /&gt;
esModeloLiteral 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;
--    esModeloClausula :: Interpretación -&amp;gt; Clausula -&amp;gt; Bool&lt;br /&gt;
-- tal que (esModeloClausula i c) se verifica si i es modelo de c . Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esModeloClausula [p,r] [p, q]     ==&amp;gt;  True&lt;br /&gt;
--    esModeloClausula [r] [p, no q]    ==&amp;gt;  True&lt;br /&gt;
--    esModeloClausula [q,r] [p, no q]  ==&amp;gt;  False&lt;br /&gt;
--    esModeloClausula [q,r] []         ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esModeloClausula :: Interpretación -&amp;gt; Clausula -&amp;gt; Bool&lt;br /&gt;
esModeloClausula i c =&lt;br /&gt;
    or [esModeloLiteral i l | l &amp;lt;- c]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12: Definir la función&lt;br /&gt;
--    modelosClausula :: Clausula -&amp;gt; [Interpretación]&lt;br /&gt;
-- tal que (modelosClausula c) es la lista de los modelos de c. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    modelosClausula [no p, q]  ==&amp;gt;  [[p,q],[q],[]]&lt;br /&gt;
--    modelosClausula [no p, p]  ==&amp;gt;  [[p],[]]&lt;br /&gt;
--    modelosClausula []         ==&amp;gt;  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
modelosClausula :: Clausula -&amp;gt; [Interpretación]&lt;br /&gt;
modelosClausula c =&lt;br /&gt;
    [i | i &amp;lt;- interpretacionesClausula c,&lt;br /&gt;
         esModeloClausula i c]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Modelos de conjuntos de clausulas                                  --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13: Definir la función&lt;br /&gt;
--    esModeloConjuntoClausulas :: Interpretación -&amp;gt; [Clausula] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esModeloConjuntoClausulas i c) se verifica si i es modelo de&lt;br /&gt;
-- c. Por ejemplo,&lt;br /&gt;
--    esModeloConjuntoClausulas [p,r] [[p, no q], [r]]  ==&amp;gt;  True&lt;br /&gt;
--    esModeloConjuntoClausulas [p] [[p, no q], [r]]    ==&amp;gt;  False&lt;br /&gt;
--    esModeloConjuntoClausulas [p] []                  ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esModeloConjuntoClausulas :: Interpretación -&amp;gt; [Clausula] -&amp;gt; Bool&lt;br /&gt;
esModeloConjuntoClausulas i s =&lt;br /&gt;
    and [esModeloClausula i c | c &amp;lt;- s]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14: Definir la función&lt;br /&gt;
--    modelosConjuntoClausulas :: [Clausula] -&amp;gt; [Interpretación]&lt;br /&gt;
-- tal que (modelosConjuntoClausulas s) es la lista de los modelos de&lt;br /&gt;
-- s. Por ejemplo, &lt;br /&gt;
--    modelosConjuntoClausulas [[no p, q], [no q, p]]    &lt;br /&gt;
--    ==&amp;gt; [[p,q],[]]&lt;br /&gt;
--    modelosConjuntoClausulas [[no p, q], [p], [no q]]  &lt;br /&gt;
--    ==&amp;gt; []&lt;br /&gt;
--    modelosConjuntoClausulas [[p, no p, q]]            &lt;br /&gt;
--    ==&amp;gt; [[p,q],[p],[q],[]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
modelosConjuntoClausulas :: [Clausula] -&amp;gt; [Interpretación]&lt;br /&gt;
modelosConjuntoClausulas s =&lt;br /&gt;
    [i | i &amp;lt;- interpretacionesConjuntoClausula s,&lt;br /&gt;
         esModeloConjuntoClausulas i s] &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Clausulas 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;
--    esClausulaValida :: Clausula -&amp;gt; Bool&lt;br /&gt;
-- tal que (esClausulaValida c) se verifica si la clausula c es&lt;br /&gt;
-- válida. Por ejemplo, &lt;br /&gt;
--    esClausulaValida [p, q, no p]  ==&amp;gt;  True&lt;br /&gt;
--    esClausulaValida [p, q, no r]  ==&amp;gt;  False&lt;br /&gt;
--    esClausulaValida []            ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esClausulaValida :: Clausula -&amp;gt; Bool&lt;br /&gt;
esClausulaValida c =&lt;br /&gt;
    [l | l &amp;lt;- c, elem (complementario l) c] /= [] &lt;br /&gt;
&lt;br /&gt;
esClausulaValida1 :: Clausula -&amp;gt; Bool&lt;br /&gt;
esClausulaValida1 c =&lt;br /&gt;
    or [elem (complementario l) c | l &amp;lt;- c]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Definición alternativa:&lt;br /&gt;
esClausulaValida2 :: Clausula -&amp;gt; Bool&lt;br /&gt;
esClausulaValida2 c =&lt;br /&gt;
    and [esModeloClausula i c | i &amp;lt;- interpretacionesClausula c]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16: Definir la función&lt;br /&gt;
--    esClausulaInsatisfacible :: Clausula -&amp;gt; Bool&lt;br /&gt;
-- tal que (esClausulaInsatisfacible c) se verifica si la clausula c es&lt;br /&gt;
-- insatisfacible. Por ejemplo, &lt;br /&gt;
--    esClausulaInsatisfacible [p, q, no p]  ==&amp;gt;  False&lt;br /&gt;
--    esClausulaInsatisfacible [p, q, no r]  ==&amp;gt;  False&lt;br /&gt;
--    esClausulaInsatisfacible []            ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esClausulaInsatisfacible :: Clausula -&amp;gt; Bool&lt;br /&gt;
esClausulaInsatisfacible c =&lt;br /&gt;
    null c&lt;br /&gt;
&lt;br /&gt;
-- Definición alternativa:&lt;br /&gt;
esClausulaInsatisfacible1 :: Clausula -&amp;gt; Bool&lt;br /&gt;
esClausulaInsatisfacible1 c =&lt;br /&gt;
    and [not (esModeloClausula i c) | i &amp;lt;- interpretacionesClausula c]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17: Definir la función&lt;br /&gt;
--    esClausulaSatisfacible :: Clausula -&amp;gt; Bool&lt;br /&gt;
-- tal que (esClausulaSatisfacible c) se verifica si la clausula c es&lt;br /&gt;
-- satisfacible. Por ejemplo, &lt;br /&gt;
--    esClausulaSatisfacible [p, q, no p]  ==&amp;gt;  True&lt;br /&gt;
--    esClausulaSatisfacible [p, q, no r]  ==&amp;gt;  True&lt;br /&gt;
--    esClausulaSatisfacible []  ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esClausulaSatisfacible :: Clausula -&amp;gt; Bool&lt;br /&gt;
esClausulaSatisfacible c =&lt;br /&gt;
    not (null c)&lt;br /&gt;
&lt;br /&gt;
-- Definición alternativa:&lt;br /&gt;
esClausulaSatisfacible1 :: Clausula -&amp;gt; Bool&lt;br /&gt;
esClausulaSatisfacible1 c =&lt;br /&gt;
    or [esModeloClausula i c | i &amp;lt;- interpretacionesClausula c]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Conjuntos válidos, consistentes e inconsistentes de clausulas      --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18: Definir la función&lt;br /&gt;
--    esConjuntoValidoDeClausulas :: [Clausula] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esConjuntoValidoDeClausulas s) se verifica si el conjunto de&lt;br /&gt;
-- clausulas s es válido. Por ejemplo,&lt;br /&gt;
--    esConjuntoValidoDeClausulas [[no p, q], [no q, p]]  ==&amp;gt;  False&lt;br /&gt;
--    esConjuntoValidoDeClausulas [[no p, p], [no q, q]]  ==&amp;gt;  True&lt;br /&gt;
--    esConjuntoValidoDeClausulas []                      ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esConjuntoValidoDeClausulas :: [Clausula] -&amp;gt; Bool&lt;br /&gt;
esConjuntoValidoDeClausulas s =&lt;br /&gt;
    and [esClausulaValida c | c &amp;lt;- s]&lt;br /&gt;
&lt;br /&gt;
-- Definición alternativa:&lt;br /&gt;
esConjuntoValidoDeClausulas1 :: [Clausula] -&amp;gt; Bool&lt;br /&gt;
esConjuntoValidoDeClausulas1 s =&lt;br /&gt;
    modelosConjuntoClausulas s == interpretacionesConjuntoClausula s&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19: Definir la función&lt;br /&gt;
--    esConjuntoConsistenteDeClausulas :: [Clausula] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esConjuntoConsistenteDeClausulas s) se verifica si el&lt;br /&gt;
-- conjunto de clausulas s es consistente. Por ejemplo,&lt;br /&gt;
--    esConjuntoConsistenteDeClausulas [[no p, q], [no q, p]]  ==&amp;gt;  True&lt;br /&gt;
--    esConjuntoConsistenteDeClausulas [[no p, p], [no q, q]]  ==&amp;gt;  True&lt;br /&gt;
--    esConjuntoConsistenteDeClausulas []                      ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esConjuntoConsistenteDeClausulas :: [Clausula] -&amp;gt; Bool&lt;br /&gt;
esConjuntoConsistenteDeClausulas s =&lt;br /&gt;
    not (null (modelosConjuntoClausulas s))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20: Definir la función&lt;br /&gt;
--    esConjuntoInconsistenteDeClausulas :: [Clausula] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esConjuntoInconsistenteDeClausulas s) se verifica si el&lt;br /&gt;
-- conjunto de clausulas s es consistente. Por ejemplo,&lt;br /&gt;
--    esConjuntoInconsistenteDeClausulas [[no p,q],[no q,p]]  ==&amp;gt;  False&lt;br /&gt;
--    esConjuntoInconsistenteDeClausulas [[no p],[p]]         ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esConjuntoInconsistenteDeClausulas :: [Clausula] -&amp;gt; Bool&lt;br /&gt;
esConjuntoInconsistenteDeClausulas s =&lt;br /&gt;
    null (modelosConjuntoClausulas s)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Validez de fórmulas mediante clausulas                             --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 21: Definir la función&lt;br /&gt;
--    esValidaPorClausulas :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esValidaPorClausulas f) se verifica si el conjunto de&lt;br /&gt;
-- clausulas de f es válido. Por ejemplo,&lt;br /&gt;
--    esValidaPorClausulas (p --&amp;gt; q)                 ==&amp;gt;  False&lt;br /&gt;
--    esValidaPorClausulas (p --&amp;gt; p)                 ==&amp;gt;  True&lt;br /&gt;
--    esValidaPorClausulas ((p --&amp;gt; q) \/ (q --&amp;gt; p))  ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esValidaPorClausulas :: Prop -&amp;gt; Bool&lt;br /&gt;
esValidaPorClausulas f =&lt;br /&gt;
    esConjuntoValidoDeClausulas (clausulas f)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Consecuencia mediante clausulas                                    --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22: Definir la función&lt;br /&gt;
--    esConsecuenciaEntreClausulas :: [Clausula] -&amp;gt; [Clausula] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esConsecuenciaEntreClausulas s1 s2) se verifica si todos los&lt;br /&gt;
-- modelos de s1 son modelos de s2. Por ejemplo,&lt;br /&gt;
--    esConsecuenciaEntreClausulas [[no p,q],[no q,r]] [[no p,r]]  &lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
--    esConsecuenciaEntreClausulas [[p]] [[p],[q]]                 &lt;br /&gt;
--    ==&amp;gt; False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esConsecuenciaEntreClausulas :: [Clausula] -&amp;gt; [Clausula] -&amp;gt; Bool&lt;br /&gt;
esConsecuenciaEntreClausulas s1 s2 =&lt;br /&gt;
    null [i | i &amp;lt;- interpretacionesConjuntoClausula (s1++s2)&lt;br /&gt;
            , esModeloConjuntoClausulas i s1&lt;br /&gt;
            , not ((esModeloConjuntoClausulas i s2))]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 23: Definir la función&lt;br /&gt;
--    esConsecuenciaPorClausulas1 :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esConsecuenciaPorClausulas s f) se verifica si las clausulas&lt;br /&gt;
-- de f son consecuencias de las de s. Por ejemplo,&lt;br /&gt;
--    esConsecuenciaPorClausulas [(p --&amp;gt; q), (q --&amp;gt; r)] (p --&amp;gt; r)&lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
--    esConsecuenciaPorClausulas [p] (p /\ q)&lt;br /&gt;
--    ==&amp;gt; False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esConsecuenciaPorClausulas :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esConsecuenciaPorClausulas s f =&lt;br /&gt;
    esConsecuenciaEntreClausulas (clausulasConjunto s) (clausulas f)&lt;br /&gt;
&lt;br /&gt;
-- Definición alternativa:&lt;br /&gt;
esConsecuenciaPorClausulas1 :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esConsecuenciaPorClausulas1 s f =&lt;br /&gt;
    esConjuntoInconsistenteDeClausulas (clausulasConjunto ((Neg f):s))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mjoseh</name></author>
		
	</entry>
</feed>