<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/LMF2015/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mansortri</id>
	<title>Lógica matemática y fundamentos (2014-15) - Contribuciones del usuario [es]</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/LMF2015/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mansortri"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php/Especial:Contribuciones/Mansortri"/>
	<updated>2026-07-18T08:43:04Z</updated>
	<subtitle>Contribuciones del usuario</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_7&amp;diff=260</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_7&amp;diff=260"/>
		<updated>2015-04-12T18:20:38Z</updated>

		<summary type="html">&lt;p&gt;Mansortri: &lt;/p&gt;
&lt;hr /&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;
-- 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;
&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;
-- Jaime Alberto &lt;br /&gt;
&lt;br /&gt;
literal :: Prop -&amp;gt; Bool&lt;br /&gt;
literal (Atom f) = True&lt;br /&gt;
literal (Neg f)  = literal f&lt;br /&gt;
literal _  = 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;
&lt;br /&gt;
dobleNegación :: Prop -&amp;gt; Bool&lt;br /&gt;
dobleNegación (Neg (Neg f)) = 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 f g) = True&lt;br /&gt;
alfa (Neg (Disj f g))=True&lt;br /&gt;
alfa (Neg(Impl f g))=True&lt;br /&gt;
alfa (Equi f g) = True&lt;br /&gt;
alfa _ =False&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 f g) = True&lt;br /&gt;
beta (Neg (Conj f g))=True&lt;br /&gt;
beta (Impl f g)=True&lt;br /&gt;
beta (Neg (Equi f g)) = 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 (Conj f g)       = [f,g]&lt;br /&gt;
componentes (Neg (Impl f g)) = [f, no g]&lt;br /&gt;
componentes (Neg (Disj f g)) = [no f, no g]&lt;br /&gt;
componentes (Equi f g)       = [no (f--&amp;gt;g), no (g--&amp;gt;f)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
componentes g = [quitanegacion (no x)|x&amp;lt;-componentes (quitanegacion (no g))]&lt;br /&gt;
    where quitanegacion (Neg (Neg f)) =f&lt;br /&gt;
          quitanegacion f       = f&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
componentes1 :: Prop -&amp;gt; [Prop]&lt;br /&gt;
componentes1 (Neg (Neg f)) = [f]&lt;br /&gt;
componentes1 (Conj f g) = [f,g]&lt;br /&gt;
componentes1 (Neg (Impl f g)) = [f, Neg g]&lt;br /&gt;
componentes1 (Neg (Disj f g)) = [Neg f, Neg g]&lt;br /&gt;
componentes1 (Equi f g) = [Impl f g, Impl g f]&lt;br /&gt;
componentes1 (Disj f g) = [f,g]&lt;br /&gt;
componentes1 (Impl f g) = [Neg f, g]&lt;br /&gt;
componentes1 (Neg (Conj f g)) = [Neg f, Neg g]&lt;br /&gt;
componentes1 (Neg (Equi f g)) = [Neg (Impl f g), Neg (Impl g f)]&lt;br /&gt;
&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 = all (literal)&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
conjuntoDeLiterales1 :: [Prop] -&amp;gt; Bool&lt;br /&gt;
conjuntoDeLiterales1 fs = aux fs&lt;br /&gt;
                        where aux [] = True&lt;br /&gt;
                              aux (x:xs) = literal x &amp;amp;&amp;amp; aux xs&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 = or [elem (no p) fs| p&amp;lt;-fs]&lt;br /&gt;
tieneContradicción&amp;#039; fs = or (map (\x-&amp;gt; elem (no x) fs) fs)&lt;br /&gt;
&lt;br /&gt;
tieneContradiccion1 :: [Prop]-&amp;gt;Bool&lt;br /&gt;
tieneContradiccion1 [] = False&lt;br /&gt;
tieneContradiccion1 ((Neg x):xs) = elem x xs || elem (Neg (Neg x)) xs || tieneContradiccion xs&lt;br /&gt;
tieneContradiccion1 (x:xs) = elem (Neg x) xs || tieneContradiccion xs&lt;br /&gt;
&lt;br /&gt;
-- Aunque en general tieneContradiccion1 no es más eficiente, sí lo puede ser para &lt;br /&gt;
-- casos puntuales, p.e. ys = [Neg (Atom &amp;quot;q&amp;quot;)] ++ [Atom &amp;quot;s&amp;quot; | x &amp;lt;- [1..100000]]++[Atom &amp;quot;q&amp;quot;]&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;
&lt;br /&gt;
expansiónDN :: [Prop] -&amp;gt; Prop -&amp;gt; [[Prop]]&lt;br /&gt;
expansiónDN fs (Neg (Neg f)) = [f:(filter (/=Neg(Neg f)) fs)]&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
expansionDN1 :: [Prop] -&amp;gt; Prop -&amp;gt; [[Prop]]&lt;br /&gt;
expansionDN1 fs f = [(componentes 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;
&lt;br /&gt;
expansiónAlfa :: [Prop] -&amp;gt; Prop -&amp;gt; [[Prop]]&lt;br /&gt;
expansiónAlfa fs f = [componentes f++(filter (/=f) fs)]&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
expansionAlfa1 :: [Prop] -&amp;gt; Prop -&amp;gt; [[Prop]]&lt;br /&gt;
expansionAlfa1 fs f = [(componentes f) ++ [x | x &amp;lt;- fs, x /= f]]&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 = [x:(filter(/=f) fs), y:(filter (/=f) fs)]&lt;br /&gt;
                     where x = head (componentes f)&lt;br /&gt;
                           y = last (componentes f)&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
expansionBeta1 :: [Prop] -&amp;gt; Prop -&amp;gt; [[Prop]]&lt;br /&gt;
expansionBeta1 fs f =  [[head(componentes f)] ++ [x | x &amp;lt;- fs, x /= f],&lt;br /&gt;
             [head( reverse(componentes f))] ++ [x | x &amp;lt;- fs, x /= 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 xs |existeDN xs = expansiónDN xs x&lt;br /&gt;
             |existeAlfa xs = expansiónAlfa xs y &lt;br /&gt;
             | otherwise    = expansiónBeta xs z&lt;br /&gt;
                              where existeDN xs = or (map&lt;br /&gt;
                                                      (dobleNegación) xs)&lt;br /&gt;
                                    existeAlfa xs= or (map (alfa) xs)&lt;br /&gt;
                                    x= head (filter (dobleNegación) xs)&lt;br /&gt;
                                    y= head (filter (alfa) xs)&lt;br /&gt;
                                    z= head (filter (beta) xs)&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
sucesores1 :: [Prop] -&amp;gt; [[Prop]]&lt;br /&gt;
sucesores1 fs | [] /= haydoble fs = expansionDN fs (head (haydoble fs))&lt;br /&gt;
             | [] /= hayalfa fs = expansionAlfa fs (head (hayalfa fs)) &lt;br /&gt;
             | [] /= haybeta fs = expansionBeta fs (head (haybeta fs))&lt;br /&gt;
             | otherwise = [[]]&lt;br /&gt;
&lt;br /&gt;
haydoble xs = [ x | x &amp;lt;- xs, dobleNegacion x]&lt;br /&gt;
&lt;br /&gt;
hayalfa ys = [y | y &amp;lt;- ys, alfa y]&lt;br /&gt;
&lt;br /&gt;
haybeta zs = [z | z &amp;lt;- zs, beta z]&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 = [x |x&amp;lt;-aux xs, (not.tieneContradicción) x] &lt;br /&gt;
&lt;br /&gt;
    where aux xs |conjuntoDeLiterales xs = [xs]&lt;br /&gt;
                 | otherwise =map (nub) (concat[(modelosTab x)|x&amp;lt;-sucesores xs])&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 [] _ = True&lt;br /&gt;
subconjunto [x] [y] =False&lt;br /&gt;
subconjunto (x:xs) ys |elem x ys = subconjunto xs ys&lt;br /&gt;
                      | otherwise=False&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
subconjunto1 :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Bool&lt;br /&gt;
subconjunto1 xs ys = length xs == length [x | x &amp;lt;- xs, elem x ys]&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 =  aux ps (modelosTab fs)&lt;br /&gt;
    where aux [] ys = ys &lt;br /&gt;
          aux (x:xs) ys = aux xs (delete x ys)&lt;br /&gt;
          ps  = [x |x&amp;lt;-modelosTab fs, f x (modelosTab fs)]&lt;br /&gt;
          f x xs = or [ subconjunto y x|y&amp;lt;-xs,x/=y]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
modelosGenerales1 :: [Prop] -&amp;gt; [[Prop]]&lt;br /&gt;
modelosGenerales1 xs = limpieza (modelosTab xs)&lt;br /&gt;
limpieza [] = []&lt;br /&gt;
limpieza (x:xs) | or [subconjunto x y | y &amp;lt;- xs] = limpieza xs&lt;br /&gt;
                | otherwise = x:limpieza [y | y &amp;lt;- xs, not(subconjunto y&lt;br /&gt;
                                                                       x)]&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 = null (modelosTab [no f])&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona &lt;br /&gt;
&lt;br /&gt;
esTeoremaPorTableros1 :: Prop -&amp;gt; Bool&lt;br /&gt;
esTeoremaPorTableros1 f = modelosTab [Neg f] == [] &lt;br /&gt;
&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 = null (modelosGenerales (no f:fs))&lt;br /&gt;
&lt;br /&gt;
-- Francisco Javier Carmona&lt;br /&gt;
&lt;br /&gt;
esDeduciblePorTableros1 :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esDeduciblePorTableros1 fs f = modelosTab ((Neg f):fs) == []&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mansortri</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_7&amp;diff=257</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_7&amp;diff=257"/>
		<updated>2015-04-11T11:09:06Z</updated>

		<summary type="html">&lt;p&gt;Mansortri: &lt;/p&gt;
&lt;hr /&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;
-- 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;
&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;
-- 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 f)) = 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 f g) = True&lt;br /&gt;
alfa (Neg (Disj f g))=True&lt;br /&gt;
alfa (Neg(Impl f g))=True&lt;br /&gt;
alfa (Equi f g) = True&lt;br /&gt;
alfa _ =False&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 f g) = True&lt;br /&gt;
beta (Neg (Conj f g))=True&lt;br /&gt;
beta (Impl f g)=True&lt;br /&gt;
beta (Neg (Equi f g)) = 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 (Conj f g)       = [f,g]&lt;br /&gt;
componentes (Neg (Impl f g)) = [f, no g]&lt;br /&gt;
componentes (Neg (Disj f g)) = [no f, no g]&lt;br /&gt;
componentes (Equi f g)       = [no (f--&amp;gt;g), no (g--&amp;gt;f)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
componentes g = [quitanegacion (no x)|x&amp;lt;-componentes (quitanegacion (no g))]&lt;br /&gt;
    where quitanegacion (Neg (Neg f)) =f&lt;br /&gt;
          quitanegacion f       = f&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 = all (literal)&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 = or [elem (no p) fs| p&amp;lt;-fs]&lt;br /&gt;
tieneContradicción&amp;#039; fs = or (map (\x-&amp;gt; elem (no x) fs) fs)&lt;br /&gt;
&lt;br /&gt;
tieneContradiccion1 :: [Prop]-&amp;gt;Bool&lt;br /&gt;
tieneContradiccion1 [] = False&lt;br /&gt;
tieneContradiccion1 ((Neg x):xs) = elem x xs || elem (Neg (Neg x)) xs || tieneContradiccion xs&lt;br /&gt;
tieneContradiccion1 (x:xs) = elem (Neg x) xs || tieneContradiccion xs&lt;br /&gt;
&lt;br /&gt;
-- Aunque en general tieneContradiccion1 no es más eficiente, sí lo puede ser para &lt;br /&gt;
-- casos puntuales, p.e. ys = [Neg (Atom &amp;quot;q&amp;quot;)] ++ [Atom &amp;quot;s&amp;quot; | x &amp;lt;- [1..100000]]++[Atom &amp;quot;q&amp;quot;]&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 (Neg (Neg f)) = [f:(filter (/=Neg(Neg f)) fs)]&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 = [componentes f++(filter (/=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 = [x:(filter(/=f) fs), y:(filter (/=f) fs)]&lt;br /&gt;
                     where x = head (componentes f)&lt;br /&gt;
                           y = last (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 xs |existeDN xs = expansiónDN xs x&lt;br /&gt;
             |existeAlfa xs = expansiónAlfa xs y &lt;br /&gt;
             | otherwise    = expansiónBeta xs z&lt;br /&gt;
                              where existeDN xs = or (map&lt;br /&gt;
                                                      (dobleNegación) xs)&lt;br /&gt;
                                    existeAlfa xs= or (map (alfa) xs)&lt;br /&gt;
                                    x= head (filter (dobleNegación) xs)&lt;br /&gt;
                                    y= head (filter (alfa) xs)&lt;br /&gt;
                                    z= head (filter (beta) xs)&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 = [x |x&amp;lt;-aux xs, (not.tieneContradicción) x] &lt;br /&gt;
&lt;br /&gt;
    where aux xs |conjuntoDeLiterales xs = [xs]&lt;br /&gt;
                 | otherwise =map (nub) (concat[(modelosTab x)|x&amp;lt;-sucesores xs])&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 [] _ = True&lt;br /&gt;
subconjunto [x] [y] =False&lt;br /&gt;
subconjunto (x:xs) ys |elem x ys = subconjunto xs ys&lt;br /&gt;
                      | otherwise=False&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 =  aux ps (modelosTab fs)&lt;br /&gt;
    where aux [] ys = ys &lt;br /&gt;
          aux (x:xs) ys = aux xs (delete x ys)&lt;br /&gt;
          ps  = [x |x&amp;lt;-modelosTab fs, f x (modelosTab fs)]&lt;br /&gt;
          f x xs = or [ subconjunto y x|y&amp;lt;-xs,x/=y]&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 = null (modelosTab [no f])&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 = null (modelosGenerales (no f:fs))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mansortri</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=109</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=109"/>
		<updated>2015-02-13T18:56:45Z</updated>

		<summary type="html">&lt;p&gt;Mansortri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
(D -&amp;gt; C)&lt;br /&gt;
&lt;br /&gt;
-C&lt;br /&gt;
&lt;br /&gt;
||- -D&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
(Observación: Sería mas conveniente en mi opinión usar el símbolo &amp;#039;¬&amp;#039; para la negación,&lt;br /&gt;
aunque simplemente es una cuestión de notación) Emilio Martínez Rivero&lt;br /&gt;
&lt;br /&gt;
(Yo opino igual, más que nada para seguir manteniendo la notación vista en clase, al igual que opino que sería conveniente usar &amp;#039;|=&amp;#039; para Por tanto, notación también vista en clase, más que nada para que no haya mucha diferencia entre la clase y los ejercicios que resolvemos por aquí) José Martín Delgado&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
((V v P) -&amp;gt; (R &amp;amp; F))&lt;br /&gt;
&lt;br /&gt;
((F v N) -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
||- (V -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((T &amp;amp; P) -&amp;gt; -L)&lt;br /&gt;
&lt;br /&gt;
T&lt;br /&gt;
&lt;br /&gt;
||- (L -&amp;gt; -P)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((A &amp;amp; -B) -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
(A v B)&lt;br /&gt;
&lt;br /&gt;
||- (-B -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1) Vamos a definir la función nv(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
nv(F) = 1 ...................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) ................ si F es -G&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) + nv(H) ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2) Vamos a definir la función prof(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
prof(F) = 0 ...................................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + prof(G) ........................ si F es -G&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + max{prof(G),prof(H)} ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Demostración: (nv(F)≤2^prof(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
       Caso base: (F atómico)&lt;br /&gt;
&lt;br /&gt;
	nv(F) = 1 y 2^prof(F)= 2^0 = 1  ==&amp;gt; nv(F)≤ 2^prof(F) [De hecho es igual]&lt;br /&gt;
&lt;br /&gt;
        Hipótesis de inducción: Supongamos que nv(F)≤ 2^prof(F) y nv(G)≤ 2^prof(G).&lt;br /&gt;
	&lt;br /&gt;
	Entonces 1) nv(¬F)= nv(F) y 2^(prof(¬F)) = 2^(1+prof(F))=2*2^(prof(F))&lt;br /&gt;
	&lt;br /&gt;
	nv(F) ≤ 2^(prof(F) por H.I. ===&amp;gt; nv(¬F)=nv(F) ≤2*2^(prof(F)) = 2^(prof(¬F)  &lt;br /&gt;
&lt;br /&gt;
	2) nv(F*G) = nv(F)+nv(G) y 2^prof(F*G)= 2^(1+max{prof(F),prof(G)})&lt;br /&gt;
&lt;br /&gt;
     Tenemos ahora dos posibles casos:&lt;br /&gt;
&lt;br /&gt;
	Caso1: prof(F)≤prof(G):: H1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        Entonces tenemos que nv(F)≤2^prof(F) por H.I ==&amp;gt; nv(F)≤2^prof(G) (por H1)&lt;br /&gt;
			     nv(G)≤2^prof(G) por H.I&lt;br /&gt;
&lt;br /&gt;
	Luego nv(F*G) = nv(G)+nv(F)≤2*2^(prof(G))=2^(1+max{prof(G),prof(F)}) = 2^prof(G*F)&lt;br /&gt;
	Por tanto nv(F*G)≤2^prof(F*G)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	Caso2: Es análogo al Caso1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	QED.&lt;br /&gt;
&lt;br /&gt;
Emilio Martínez Rivero&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Creo que sí. Bastaría tomar un conjunto S = {F_1, F_2, F_3} de modo que dos de ellas fueran insatisfacibles y la restante fuera una tautología. Obtendríamos entonces los siguientes subconjuntos:&lt;br /&gt;
&lt;br /&gt;
{F_1, F_2, F_3} (no consistente por ser F_1 y F_2 insatisfacibles)&lt;br /&gt;
&lt;br /&gt;
{F_1, F_2} (no consistente por ser F_1 y F_2 insatisfacibles)&lt;br /&gt;
&lt;br /&gt;
{F_1, F_3} (no consistente por ser F_1 insatisfacible)&lt;br /&gt;
&lt;br /&gt;
{F_2, F_3} (no consistente por ser F_2 insatisfacible)&lt;br /&gt;
&lt;br /&gt;
{F_1} (no consistente por ser F_1 insatisfacible)&lt;br /&gt;
&lt;br /&gt;
{F_2} (no consistente por ser F_2 insatisfacible)&lt;br /&gt;
&lt;br /&gt;
{F_3} (consistente por ser F_3 una tautología)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Construyamos el siguiente esquema de tabla de verdad donde el 0 representa que la fórmula no es satisfacible, y el 1 que sí es satisfacible:&lt;br /&gt;
&lt;br /&gt;
F G | F -&amp;gt; G&lt;br /&gt;
&lt;br /&gt;
0 0 | 0 1* 0 (I1)&lt;br /&gt;
&lt;br /&gt;
0 1 | 0 1* 1 (I2)&lt;br /&gt;
&lt;br /&gt;
1 0 | 1 0* 0 (I3)&lt;br /&gt;
&lt;br /&gt;
1 1 | 1 1* 1 (I4)&lt;br /&gt;
&lt;br /&gt;
Mediante * hemos denotado al resultado de la fórmula (F -&amp;gt; G). Como partimos de que (F -&amp;gt; G) es satisfacible, nos fijamos únicamente en los modelos I1, I2 e I4. Sin embargo, al decirnos que F es satisfacible, debemos eliminar los modelos I1 e I2, ya que en ellos F no es satisfacible. Por lo tanto, obtenemos que el modelo restante para (F -&amp;gt; G) y F satisfacibles es el modelo I4 en el cual G también es satisfacible. Por lo tanto, la respuesta a la pregunta es afirmativa.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución2:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Contraejemplo:&lt;br /&gt;
&lt;br /&gt;
F=p&lt;br /&gt;
&lt;br /&gt;
Q=q&amp;amp;-q&lt;br /&gt;
&lt;br /&gt;
F-&amp;gt;Q = p-&amp;gt;(q&amp;amp;-q)&lt;br /&gt;
&lt;br /&gt;
F es satsfacible si p=1, F-&amp;gt;Q es satisfacible si p=0 pero Q es insatisfacible.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manuel Soriano Trigueros&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1) Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
La respuesta es falsa. Consideremos la fórmula F dada mediante:&lt;br /&gt;
&lt;br /&gt;
(p v (q &amp;amp; -q)) la cual es satisfacible (tomar por ejemplo el modelo (p,q)=(1,1))&lt;br /&gt;
&lt;br /&gt;
Tenemos que el conjunto de subfórmulas de F viene dado a través de:&lt;br /&gt;
&lt;br /&gt;
Subf(F) = { (p v (q &amp;amp; -q)), p, (q &amp;amp; -q), q, -q}&lt;br /&gt;
&lt;br /&gt;
Observemos que la subfórmula (q &amp;amp; -q) no es satisfacible, con lo cual ya hemos encontrado un contraejemplo válido.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos - (negación), v (disyunción) y &amp;amp; (conjunción)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2) Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Creo que la respuesta es falsa, ya que para todo fórmula F, el conjunto de subfórmulas de F contendrá a las fórmulas atómicas, las cuales nunca son válidas.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Mansortri</name></author>
		
	</entry>
</feed>