<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/LMF2015/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/LMF2015/index.php?action=history&amp;feed=atom&amp;title=R12_sol"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=R12_sol&amp;action=history"/>
	<updated>2026-07-19T01:04:14Z</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/LMF2015/index.php?title=R12_sol&amp;diff=314&amp;oldid=prev</id>
		<title>Mjoseh: Página creada con &#039;&lt;source lang = &quot;haskell&quot;&gt; -- ResolucionProposicional.hs -- Resolución proposicional. -- ---------------------------------------------------------------------  module Resolucion...&#039;</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=R12_sol&amp;diff=314&amp;oldid=prev"/>
		<updated>2015-05-18T16:04:59Z</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 Resolucion...&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 :: Cláusula -&amp;gt; Cláusula -&amp;gt; Literal -&amp;gt; Cláusula&lt;br /&gt;
-- tal que (resolvente c1 c2 l) es la resolvente de c1 y c2 respecto del&lt;br /&gt;
-- literal l. Por ejemplo,&lt;br /&gt;
--    resolvente [no p,q] [no q,r] q  ==&amp;gt;  [no p,r]&lt;br /&gt;
--    resolvente [no p,no q] [q,r] (no q)  ==&amp;gt;  [no p,r]&lt;br /&gt;
--    resolvente [no p,q] [no p,no q] q  ==&amp;gt;  [no p]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
resolvente :: Cláusula -&amp;gt; Cláusula -&amp;gt; Literal -&amp;gt; Cláusula&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 :: Cláusula -&amp;gt; Cláusula -&amp;gt; [Cláusula]&lt;br /&gt;
-- tal que (resolventes c1 c2) es el conjunto de las resolventes de c1 y&lt;br /&gt;
-- c2. Por ejemplo,&lt;br /&gt;
--    resolventes [no p,q] [p,no q]  ==&amp;gt;  [[q,no q],[no p,p]]&lt;br /&gt;
--    resolventes [no p,q] [p,q]     ==&amp;gt;  [[q]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
resolventes :: Cláusula -&amp;gt; Cláusula -&amp;gt; [Cláusula]&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;
--    resolventesCláusulaConjunto :: Cláusula -&amp;gt; [Cláusula] -&amp;gt; [Cláusula]&lt;br /&gt;
-- tal que (resolventes c s) es el conjunto de las resolventes de c y&lt;br /&gt;
-- s. Por ejemplo, &lt;br /&gt;
--    resolventesCláusulaConjunto [no p,q] [[p,q],[p,r],[no q,s]]&lt;br /&gt;
--    ==&amp;gt; [[q],[q,r],[no p,s]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
resolventesCláusulaConjunto :: Cláusula -&amp;gt; [Cláusula] -&amp;gt; [Cláusula]&lt;br /&gt;
resolventesCláusulaConjunto c s =&lt;br /&gt;
    uniónGeneral [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;
--    esTautología :: Cláusula -&amp;gt; Bool&lt;br /&gt;
-- tal que (esTautología c) se verifica si c es una tautología. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esTautología [p, q, no p]  ==&amp;gt;  True&lt;br /&gt;
--    esTautología [p, q, no r]  ==&amp;gt;  False&lt;br /&gt;
--    esTautología []            ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esTautología :: Cláusula -&amp;gt; Bool&lt;br /&gt;
esTautología c = &lt;br /&gt;
    [f | f &amp;lt;- c, elem (complementario f) c] /= []&lt;br /&gt;
&lt;br /&gt;
esTautología2 :: Cláusula -&amp;gt; Bool&lt;br /&gt;
esTautología2 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;
--    eliminaTautologías :: [Cláusula] -&amp;gt; [Cláusula]&lt;br /&gt;
-- tal que (eliminaTautologías s) es el conjunto obtenido eliminando las&lt;br /&gt;
-- tautologías de s. Por ejemplo,&lt;br /&gt;
--    eliminaTautologías [[p, q], [p, q, no p]]  ==&amp;gt;  [[p,q]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
eliminaTautologías :: [Cláusula] -&amp;gt; [Cláusula]&lt;br /&gt;
eliminaTautologías s =&lt;br /&gt;
    [c | c &amp;lt;- s, not (esTautología 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;
--    esInconsistentePorResolución :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esInconsistentePorResolución s) se verifica si s es&lt;br /&gt;
-- inconsistente mediante resolución. Por ejemplo,&lt;br /&gt;
--    esInconsistentePorResolución [[p],[no p,q],[no q]]&lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
--    esInconsistentePorResolución [[p],[no p,q]]&lt;br /&gt;
--    ==&amp;gt; False&lt;br /&gt;
--    esInconsistentePorResolución [[p,q],[no p,q],[p,no q],[no p,no q]]&lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
--    esInconsistentePorResolución [[p,q],[p,r],[no q,no r],[no p]]&lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esInconsistentePorResolución :: [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esInconsistentePorResolución s =&lt;br /&gt;
    esInconsistentePorResolución&amp;#039; s []&lt;br /&gt;
&lt;br /&gt;
esInconsistentePorResolución&amp;#039; :: [Cláusula] -&amp;gt; [Cláusula] -&amp;gt; Bool&lt;br /&gt;
esInconsistentePorResolución&amp;#039; soporte usables &lt;br /&gt;
    | null soporte    = False&lt;br /&gt;
    | elem [] soporte = True&lt;br /&gt;
    | otherwise       =&lt;br /&gt;
        esInconsistentePorResolución&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;- resolventesCláusulaConjunto&lt;br /&gt;
                                       actual &lt;br /&gt;
                                       usables&amp;#039;&lt;br /&gt;
                                , not (esTautología 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;
--    esVálidaPorResolución :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esVálidaPorResolución f) se verifica si f es válida por&lt;br /&gt;
-- resolución. Por ejemplo, &lt;br /&gt;
--    esVálidaPorResolución (p --&amp;gt; p)                 ==&amp;gt;  True&lt;br /&gt;
--    esVálidaPorResolución ((p --&amp;gt; q) \/ (q --&amp;gt; p))  ==&amp;gt;  True&lt;br /&gt;
--    esVálidaPorResolución (p --&amp;gt; q)                 ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esVálidaPorResolución :: Prop -&amp;gt; Bool&lt;br /&gt;
esVálidaPorResolución f =&lt;br /&gt;
    esInconsistentePorResolución &lt;br /&gt;
    (eliminaTautologías (cláusulas (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;
--    esConsecuenciaPorResolución :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esConsecuenciaPorResolución s f) se verifica si f es&lt;br /&gt;
-- consecuencia de s mediante el método de resolución. Por ejemplo,&lt;br /&gt;
--    esConsecuenciaPorResolución [p --&amp;gt; q, q --&amp;gt; r] (p --&amp;gt; r)  &lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
--    esConsecuenciaPorResolución [p --&amp;gt; q, q --&amp;gt; r] (p &amp;lt;--&amp;gt; r)&lt;br /&gt;
--    ==&amp;gt; False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esConsecuenciaPorResolución :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esConsecuenciaPorResolución s f =&lt;br /&gt;
    esInconsistentePorResolución &lt;br /&gt;
    (eliminaTautologías (cláusulasConjunto ((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>