<?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=R14_sol</id>
	<title>R14 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=R14_sol"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2016/index.php?title=R14_sol&amp;action=history"/>
	<updated>2026-07-18T04:21:54Z</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=R14_sol&amp;diff=222&amp;oldid=prev</id>
		<title>Mjoseh: Página creada con &#039;&lt;source lang =&quot;haskell&quot;&gt; -- ResolucionProposicional.hs -- Resolución proposicional. -- ---------------------------------------------------------------------  module ResolucionP...&#039;</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2016/index.php?title=R14_sol&amp;diff=222&amp;oldid=prev"/>
		<updated>2016-05-10T12:34:46Z</updated>

		<summary type="html">&lt;p&gt;Página creada con &amp;#039;&amp;lt;source lang =&amp;quot;haskell&amp;quot;&amp;gt; -- ResolucionProposicional.hs -- Resolución proposicional. -- ---------------------------------------------------------------------  module ResolucionP...&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;
-- ResolucionProposicional.hs&lt;br /&gt;
-- Resolución proposicional.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
module ResolucionProposicional where&lt;br /&gt;
&lt;br /&gt;
import SintaxisSemantica&lt;br /&gt;
import FormasNormales&lt;br /&gt;
import Clausulas&lt;br /&gt;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Resolventes                                                        --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1: Definir la función&lt;br /&gt;
--    resolvente :: Clausula -&amp;gt; Clausula -&amp;gt; Literal -&amp;gt; Clausula&lt;br /&gt;
-- tal que (resolvente c1 c2 l) es la resolvente de c1 y c2 respecto del&lt;br /&gt;
-- literal l. Por ejemplo,&lt;br /&gt;
--    resolvente [no p,q] [no q,r] q  ==&amp;gt;  [no p,r]&lt;br /&gt;
--    resolvente [no p,no q] [q,r] (no q)  ==&amp;gt;  [no p,r]&lt;br /&gt;
--    resolvente [no p,q] [no p,no q] q  ==&amp;gt;  [no p]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
resolvente :: Clausula -&amp;gt; Clausula -&amp;gt; Literal -&amp;gt; Clausula&lt;br /&gt;
resolvente c1 c2 l =&lt;br /&gt;
    union (delete l c1) (delete (complementario l) c2) &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2: Definir la función&lt;br /&gt;
--    resolventes :: Clausula -&amp;gt; Clausula -&amp;gt; [Clausula]&lt;br /&gt;
-- tal que (resolventes c1 c2) es el conjunto de las resolventes de c1 y&lt;br /&gt;
-- c2. Por ejemplo,&lt;br /&gt;
--    resolventes [no p,q] [p,no q]  ==&amp;gt;  [[q,no q],[no p,p]]&lt;br /&gt;
--    resolventes [no p,q] [p,q]     ==&amp;gt;  [[q]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
resolventes :: Clausula -&amp;gt; Clausula -&amp;gt; [Clausula]&lt;br /&gt;
resolventes c1 c2 =&lt;br /&gt;
    [resolvente c1 c2 l | l &amp;lt;- c1, (complementario l) `elem` c2]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3: Definir la función&lt;br /&gt;
--    resolventesClausulaConjunto :: Clausula -&amp;gt; [Clausula] -&amp;gt; [Clausula]&lt;br /&gt;
-- tal que (resolventes c s) es el conjunto de las resolventes de c y&lt;br /&gt;
-- s. Por ejemplo, &lt;br /&gt;
--    resolventesClausulaConjunto [no p,q] [[p,q],[p,r],[no q,s]]&lt;br /&gt;
--    ==&amp;gt; [[q],[q,r],[no p,s]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
resolventesClausulaConjunto :: Clausula -&amp;gt; [Clausula] -&amp;gt; [Clausula]&lt;br /&gt;
resolventesClausulaConjunto c s =&lt;br /&gt;
    unionGeneral [resolventes c c1 | c1 &amp;lt;- s]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Eliminación de tautologías                                         --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1: Definir la función&lt;br /&gt;
--    esTautologia :: Clausula -&amp;gt; Bool&lt;br /&gt;
-- tal que (esTautologia c) se verifica si c es una tautología. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esTautologia [p, q, no p]  ==&amp;gt;  True&lt;br /&gt;
--    esTautologia [p, q, no r]  ==&amp;gt;  False&lt;br /&gt;
--    esTautologia []            ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esTautologia :: Clausula -&amp;gt; Bool&lt;br /&gt;
esTautologia c = &lt;br /&gt;
    [f | f &amp;lt;- c, elem (complementario f) c] /= []&lt;br /&gt;
&lt;br /&gt;
esTautologia2 :: Clausula -&amp;gt; Bool&lt;br /&gt;
esTautologia2 c = &lt;br /&gt;
   or [elem (complementario f) c | f &amp;lt;- c]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2: Definir la función&lt;br /&gt;
--    eliminaTautologias :: [Clausula] -&amp;gt; [Clausula]&lt;br /&gt;
-- tal que (eliminaTautologias s) es el conjunto obtenido eliminando las&lt;br /&gt;
-- tautologías de s. Por ejemplo,&lt;br /&gt;
--    eliminaTautologias [[p, q], [p, q, no p]]  ==&amp;gt;  [[p,q]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
eliminaTautologias :: [Clausula] -&amp;gt; [Clausula]&lt;br /&gt;
eliminaTautologias s =&lt;br /&gt;
    [c | c &amp;lt;- s, not (esTautologia c)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Decisión de inconsistencia por resolución                          --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4: Definir la función&lt;br /&gt;
--    esInconsistentePorResolucion :: [Clausula] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esInconsistentePorResolucion s) se verifica si s es&lt;br /&gt;
-- inconsistente mediante resolución. Por ejemplo,&lt;br /&gt;
--    esInconsistentePorResolucion [[p],[no p,q],[no q]]&lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
--    esInconsistentePorResolucion [[p],[no p,q]]&lt;br /&gt;
--    ==&amp;gt; False&lt;br /&gt;
--    esInconsistentePorResolucion [[p,q],[no p,q],[p,no q],[no p,no q]]&lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
--    esInconsistentePorResolucion [[p,q],[p,r],[no q,no r],[no p]]&lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esInconsistentePorResolucion :: [Clausula] -&amp;gt; Bool&lt;br /&gt;
esInconsistentePorResolucion s =&lt;br /&gt;
    esInconsistentePorResolucion&amp;#039; s []&lt;br /&gt;
&lt;br /&gt;
esInconsistentePorResolucion&amp;#039; :: [Clausula] -&amp;gt; [Clausula] -&amp;gt; Bool&lt;br /&gt;
esInconsistentePorResolucion&amp;#039; soporte usables &lt;br /&gt;
    | null soporte    = False&lt;br /&gt;
    | elem [] soporte = True&lt;br /&gt;
    | otherwise       =&lt;br /&gt;
        esInconsistentePorResolucion&amp;#039; soporte&amp;#039; usables&amp;#039;&lt;br /&gt;
        where actual   = head soporte&lt;br /&gt;
              usables&amp;#039; = union [actual] usables&lt;br /&gt;
              soporte&amp;#039; = union (tail soporte)&lt;br /&gt;
                               [c &lt;br /&gt;
                                | c &amp;lt;- resolventesClausulaConjunto&lt;br /&gt;
                                       actual &lt;br /&gt;
                                       usables&amp;#039;&lt;br /&gt;
                                , not (esTautologia c)&lt;br /&gt;
                                , notElem c soporte&lt;br /&gt;
                                , notElem c usables&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Validez mediante resolución                                        --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5: Definir la función&lt;br /&gt;
--    esValidaPorResolucion :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esValidaPorResolucion f) se verifica si f es válida por&lt;br /&gt;
-- resolución. Por ejemplo, &lt;br /&gt;
--    esValidaPorResolucion (p --&amp;gt; p)                 ==&amp;gt;  True&lt;br /&gt;
--    esValidaPorResolucion ((p --&amp;gt; q) \/ (q --&amp;gt; p))  ==&amp;gt;  True&lt;br /&gt;
--    esValidaPorResolucion (p --&amp;gt; q)                 ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esValidaPorResolucion :: Prop -&amp;gt; Bool&lt;br /&gt;
esValidaPorResolucion f =&lt;br /&gt;
    esInconsistentePorResolucion &lt;br /&gt;
    (eliminaTautologias (clausulas (Neg f)))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Consecuencia mediante resolución                                   --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6: Definir la función&lt;br /&gt;
--    esConsecuenciaPorResolucion :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esConsecuenciaPorResolucion s f) se verifica si f es&lt;br /&gt;
-- consecuencia de s mediante el método de resolución. Por ejemplo,&lt;br /&gt;
--    esConsecuenciaPorResolucion [p --&amp;gt; q, q --&amp;gt; r] (p --&amp;gt; r)  &lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
--    esConsecuenciaPorResolucion [p --&amp;gt; q, q --&amp;gt; r] (p &amp;lt;--&amp;gt; r)&lt;br /&gt;
--    ==&amp;gt; False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esConsecuenciaPorResolucion :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esConsecuenciaPorResolucion s f =&lt;br /&gt;
    esInconsistentePorResolucion &lt;br /&gt;
    (eliminaTautologias (clausulasConjunto ((Neg f):s)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mjoseh</name></author>
		
	</entry>
</feed>