<?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=R7_sol</id>
	<title>R7 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=R7_sol"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=R7_sol&amp;action=history"/>
	<updated>2026-07-19T01:04:39Z</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=R7_sol&amp;diff=311&amp;oldid=prev</id>
		<title>Mjoseh: Página creada con &#039;&lt;source lang = &quot;haskell&quot;&gt; -- TablerosSemánticos.hs -- Tableros semánticos proposicionales. -- ---------------------------------------------------------------------  module Tab...&#039;</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=R7_sol&amp;diff=311&amp;oldid=prev"/>
		<updated>2015-05-18T16:01:57Z</updated>

		<summary type="html">&lt;p&gt;Página creada con &amp;#039;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt; -- TablerosSemánticos.hs -- Tableros semánticos proposicionales. -- ---------------------------------------------------------------------  module Tab...&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;
-- TablerosSemánticos.hs&lt;br /&gt;
-- Tableros semánticos proposicionales.&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 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 (Atom f)       = True&lt;br /&gt;
literal (Neg (Atom f)) = True&lt;br /&gt;
literal _              = False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Notación uniforme                                                  --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1: Definir la función&lt;br /&gt;
--    dobleNegación :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (dobleNegación f) se verifica si f es una doble negación. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    dobleNegación (no (no p))     ==&amp;gt;  True&lt;br /&gt;
--    dobleNegación (no (p --&amp;gt; q))  ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
dobleNegación :: Prop -&amp;gt; Bool&lt;br /&gt;
dobleNegación (Neg (Neg _)) = True&lt;br /&gt;
dobleNegación _             = False&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2: Definir la función&lt;br /&gt;
--    alfa :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (alfa f) se verifica si f es una fórmula alfa.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
alfa :: Prop -&amp;gt; Bool&lt;br /&gt;
alfa (Conj _ _)       = True&lt;br /&gt;
alfa (Neg (Impl _ _)) = True&lt;br /&gt;
alfa (Neg (Disj _ _)) = True&lt;br /&gt;
alfa _                = 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;
&lt;br /&gt;
beta :: Prop -&amp;gt; Bool&lt;br /&gt;
beta (Disj _ _)       = True&lt;br /&gt;
beta (Impl _ _)       = True&lt;br /&gt;
beta (Neg (Conj _ _)) = True&lt;br /&gt;
beta (Equi _ _)       = True&lt;br /&gt;
beta (Neg (Equi _ _)) = True&lt;br /&gt;
beta _                = False&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4: Definir la función&lt;br /&gt;
--    componentes :: Prop -&amp;gt; [Prop]&lt;br /&gt;
-- tal que (componentes ) es la lista de las componentes de la fórmula&lt;br /&gt;
-- f. Por ejemplo, &lt;br /&gt;
--    componentes (p /\ q --&amp;gt; r)       ==&amp;gt;  [no (p /\ q),r]&lt;br /&gt;
--    componentes (no (p /\ q --&amp;gt; r))  ==&amp;gt;  [(p /\ q),no r]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
componentes :: Prop -&amp;gt; [Prop]&lt;br /&gt;
componentes (Neg (Neg f))    = [f]&lt;br /&gt;
componentes (Conj f g)       = [f, g]&lt;br /&gt;
componentes (Neg (Impl f g)) = [f, Neg g]&lt;br /&gt;
componentes (Neg (Disj f g)) = [Neg f, Neg g]&lt;br /&gt;
componentes (Disj f g)       = [f, g]&lt;br /&gt;
componentes (Impl f g)       = [Neg f, g]&lt;br /&gt;
componentes (Neg (Conj f g)) = [Neg f, Neg g]&lt;br /&gt;
componentes (Equi f g)       = [Conj f g, Conj (Neg f) (Neg g)]&lt;br /&gt;
componentes (Neg (Equi f g)) = [Conj f (Neg g), Conj (Neg f) g]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Modelos mediante tableros                                          --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5: Definir la función&lt;br /&gt;
--    conjuntoDeLiterales :: [Prop] -&amp;gt; Bool&lt;br /&gt;
-- tal que (conjuntoDeLiterales fs) se verifica si fs es un conjunto de&lt;br /&gt;
-- literales. Por ejemplo, &lt;br /&gt;
--    conjuntoDeLiterales [p --&amp;gt; q, no r, r /\ s, p]  ==&amp;gt;  False&lt;br /&gt;
--    conjuntoDeLiterales [p, no q, r]                ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
conjuntoDeLiterales :: [Prop] -&amp;gt; Bool&lt;br /&gt;
conjuntoDeLiterales fs =&lt;br /&gt;
    and [literal f | f &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;
&lt;br /&gt;
tieneContradicción :: [Prop] -&amp;gt; Bool&lt;br /&gt;
-- tieneContradicción fs &lt;br /&gt;
--     | trace (&amp;quot;  &amp;quot; ++ show fs) False = undefined&lt;br /&gt;
tieneContradicción fs =&lt;br /&gt;
    [f | f &amp;lt;- fs, elem (Neg f) 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 =&lt;br /&gt;
    [(componentes f) `union` (delete f fs)]&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 =&lt;br /&gt;
    [(componentes f) `union` (delete f fs)]&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 =&lt;br /&gt;
    [[g] `union` (delete f fs) | g &amp;lt;- componentes f]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10: Definir la función&lt;br /&gt;
--    sucesores :: [Prop] -&amp;gt; [[Prop]]&lt;br /&gt;
-- tal que (sucesores fs) es la lista de sucesores de fs. Por ejemplo,&lt;br /&gt;
--    sucesores [q \/ s, no(no r), p1 /\ p2] =&amp;gt; [[r,(q \/ s),(p1 /\ p2)]]&lt;br /&gt;
--    sucesores [r,(q \/ s),(p1 /\ p2)]      =&amp;gt; [[p1,p2,r,(q \/ s)]]&lt;br /&gt;
--    sucesores [p1,p2,r,(q \/ s)]           =&amp;gt; [[q,p1,p2,r],[s,p1,p2,r]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sucesores :: [Prop] -&amp;gt; [[Prop]]&lt;br /&gt;
sucesores fs &lt;br /&gt;
    | doblesNegación /= []  = expansiónDN   fs (head doblesNegación)&lt;br /&gt;
    | alfas /= []           = expansiónAlfa fs (head alfas)&lt;br /&gt;
    | betas /= []           = expansiónBeta fs (head betas)&lt;br /&gt;
    where doblesNegación = [f | f &amp;lt;- fs, dobleNegación f]&lt;br /&gt;
          alfas          = [f | f &amp;lt;- fs, alfa f]&lt;br /&gt;
          betas          = [f | f &amp;lt;- fs, beta f]&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 &lt;br /&gt;
    | tieneContradicción fs  = []&lt;br /&gt;
    | conjuntoDeLiterales fs = [fs]&lt;br /&gt;
    | otherwise              = uniónGeneral [modelosTab gs &lt;br /&gt;
                                             | gs &amp;lt;- sucesores fs]&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 =&lt;br /&gt;
    and [elem x ys | x &amp;lt;- xs]&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 =&lt;br /&gt;
    [gs | gs &amp;lt;- modelos&lt;br /&gt;
        , [hs | hs &amp;lt;- delete gs modelos, subconjunto hs gs] == []]&lt;br /&gt;
    where modelos = modelosTab fs&lt;br /&gt;
&lt;br /&gt;
modelosGenerales&amp;#039; :: [Prop] -&amp;gt; [[Prop]]&lt;br /&gt;
modelosGenerales&amp;#039; fs =&lt;br /&gt;
    [gs | gs &amp;lt;- modelos&lt;br /&gt;
        , and [not (subconjunto hs gs) | hs &amp;lt;- delete gs modelos]]&lt;br /&gt;
    where modelos = modelosTab fs&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 =&lt;br /&gt;
    modelosTab [Neg f] == []&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 =&lt;br /&gt;
    modelosTab ((Neg f):fs) == []&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>