<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/LMF2016/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fravalher1</id>
	<title>Lógica Matemática y fundamentos (2015-16) - Contribuciones del usuario [es]</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/LMF2016/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fravalher1"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2016/index.php/Especial:Contribuciones/Fravalher1"/>
	<updated>2026-07-17T11:34:53Z</updated>
	<subtitle>Contribuciones del usuario</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2016/index.php?title=Relaci%C3%B3n_2a&amp;diff=94</id>
		<title>Relación 2a</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2016/index.php?title=Relaci%C3%B3n_2a&amp;diff=94"/>
		<updated>2016-02-25T23:09:56Z</updated>

		<summary type="html">&lt;p&gt;Fravalher1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- SintaxisSemanticaProp.hs&lt;br /&gt;
-- Lógica proposicional: Sintaxis y semántica&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 SintaxisSemantica where&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Librerías auxiliares                                               --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
import Data.List &lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Gramática de fórmulas prosicionales                                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1: Definir los siguientes tipos de datos:&lt;br /&gt;
-- * SímboloProposicional para representar los símbolos de proposiciones&lt;br /&gt;
-- * Prop para representar las fórmulas proposicionales usando los&lt;br /&gt;
--   constructores Atom, Neg, Conj, Disj, Impl y Equi para las fórmulas&lt;br /&gt;
--   atómicas, negaciones, conjunciones, implicaciones y equivalencias,&lt;br /&gt;
--   respectivamente.  &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
type SimboloProposicional = String&lt;br /&gt;
 &lt;br /&gt;
data Prop = Atom SimboloProposicional&lt;br /&gt;
          | Neg Prop &lt;br /&gt;
          | Conj Prop Prop &lt;br /&gt;
          | Disj Prop Prop &lt;br /&gt;
          | Impl Prop Prop &lt;br /&gt;
          | Equi Prop Prop &lt;br /&gt;
          deriving (Eq,Ord)&lt;br /&gt;
 &lt;br /&gt;
instance Show Prop where&lt;br /&gt;
    show (Atom p)   = p&lt;br /&gt;
    show (Neg p)    = &amp;quot;no &amp;quot; ++ show p&lt;br /&gt;
    show (Conj p q) = &amp;quot;(&amp;quot; ++ show p ++ &amp;quot; /\\ &amp;quot; ++ show q ++ &amp;quot;)&amp;quot;&lt;br /&gt;
    show (Disj p q) = &amp;quot;(&amp;quot; ++ show p ++ &amp;quot; \\/ &amp;quot; ++ show q ++ &amp;quot;)&amp;quot;&lt;br /&gt;
    show (Impl p q) = &amp;quot;(&amp;quot; ++ show p ++ &amp;quot; --&amp;gt; &amp;quot; ++ show q ++ &amp;quot;)&amp;quot;&lt;br /&gt;
    show (Equi p q) = &amp;quot;(&amp;quot; ++ show p ++ &amp;quot; &amp;lt;--&amp;gt; &amp;quot; ++ show q ++ &amp;quot;)&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2: Definir las siguientes fórmulas proposicionales&lt;br /&gt;
-- atómicas: p, p1, p2, q, r, s, t y u.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
p, p1, p2, q, r, s, t, u :: Prop&lt;br /&gt;
p  = Atom &amp;quot;p&amp;quot;&lt;br /&gt;
p1 = Atom &amp;quot;p1&amp;quot;&lt;br /&gt;
p2 = Atom &amp;quot;p2&amp;quot;&lt;br /&gt;
q  = Atom &amp;quot;q&amp;quot;&lt;br /&gt;
r  = Atom &amp;quot;r&amp;quot;&lt;br /&gt;
s  = Atom &amp;quot;s&amp;quot;&lt;br /&gt;
t  = Atom &amp;quot;t&amp;quot;&lt;br /&gt;
u  = Atom &amp;quot;u&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3: Definir la función&lt;br /&gt;
--    no :: Prop -&amp;gt; Prop&lt;br /&gt;
-- tal que (no f) es la negación de f.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
no :: Prop -&amp;gt; Prop&lt;br /&gt;
no = Neg&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4: Definir los siguientes operadores&lt;br /&gt;
--    (/\), (\/), (--&amp;gt;), (&amp;lt;--&amp;gt;) :: Prop -&amp;gt; Prop -&amp;gt; Prop&lt;br /&gt;
-- tales que&lt;br /&gt;
--    f /\ g      es la conjunción de f y g&lt;br /&gt;
--    f \/ g      es la disyunción de f y g&lt;br /&gt;
--    f --&amp;gt; g     es la implicación de f a g&lt;br /&gt;
--    f &amp;lt;--&amp;gt; g    es la equivalencia entre f y g&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
infixr 5 \/&lt;br /&gt;
infixr 4 /\&lt;br /&gt;
infixr 3 --&amp;gt;&lt;br /&gt;
infixr 2 &amp;lt;--&amp;gt;&lt;br /&gt;
(/\), (\/), (--&amp;gt;), (&amp;lt;--&amp;gt;) :: Prop -&amp;gt; Prop -&amp;gt; Prop&lt;br /&gt;
(/\)   = Conj&lt;br /&gt;
(\/)   = Disj&lt;br /&gt;
(--&amp;gt;)  = Impl&lt;br /&gt;
(&amp;lt;--&amp;gt;) = Equi&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Símbolos proposicionales de una fórmula                            --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5: Definir la función&lt;br /&gt;
--    símbolosPropFórm :: Prop -&amp;gt; [Prop]&lt;br /&gt;
-- tal que (símbolosPropFórm f) es el conjunto formado por todos los&lt;br /&gt;
-- símbolos proposicionales que aparecen en f. Por ejemplo,&lt;br /&gt;
--    símbolosPropFórm (p /\ q --&amp;gt; p)  ==&amp;gt; [p,q]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
simbolosPropForm :: Prop -&amp;gt; [Prop]&lt;br /&gt;
simbolosPropForm (Atom f) = [(Atom f)]&lt;br /&gt;
simbolosPropForm (Neg f) = simbolosPropForm f&lt;br /&gt;
simbolosPropForm (Conj f g) = union (simbolosPropForm f) (simbolosPropForm g)&lt;br /&gt;
simbolosPropForm (Disj f g) = union (simbolosPropForm f) (simbolosPropForm g) &lt;br /&gt;
simbolosPropForm (Impl f g) = union (simbolosPropForm f) (simbolosPropForm g)&lt;br /&gt;
simbolosPropForm (Equi f g) = union (simbolosPropForm f) (simbolosPropForm g)&lt;br /&gt;
&lt;br /&gt;
--------------------------TIENE UN FALLO, pues devuelve una lista con simbolos repetidos... una posible solución:&lt;br /&gt;
--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
eliminaRepetidos :: [Prop] -&amp;gt; [Prop]&lt;br /&gt;
eliminaRepetidos [(Atom x)] = [(Atom x)]&lt;br /&gt;
eliminaRepetidos xs = if (head xs) `elem`&lt;br /&gt;
                                           (tail xs) then&lt;br /&gt;
                                               eliminaRepetidos (tail&lt;br /&gt;
                                                                 xs)&lt;br /&gt;
else [head xs] ++ eliminaRepetidos (tail xs)                  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
simbolosPropForm :: Prop -&amp;gt; [Prop]&lt;br /&gt;
simbolosPropForm f = reverse (eliminaRepetidos (simbolosPropFormAUX f))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
simbolosPropFormAUX (Atom f) = [(Atom f)]&lt;br /&gt;
simbolosPropFormAUX (Neg f) = simbolosPropFormAUX f&lt;br /&gt;
simbolosPropFormAUX (Conj f g)= (simbolosPropFormAUX f) ++ (simbolosPropFormAUX g)&lt;br /&gt;
simbolosPropFormAUX (Disj f g)= (simbolosPropFormAUX f) ++ (simbolosPropFormAUX g)&lt;br /&gt;
simbolosPropFormAUX (Impl f g)= (simbolosPropFormAUX f) ++ (simbolosPropFormAUX g)&lt;br /&gt;
simbolosPropFormAUX (Equi f g)= (simbolosPropFormAUX f) ++ (simbolosPropFormAUX g)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Interpretaciones                                                   --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6: Definir el tipo de datos Interpretación para&lt;br /&gt;
-- representar las interpretaciones como listas de fórmulas atómicas.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
type Interpretacion = [Prop]&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Significado de una fórmula en una interpretación                   --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7: Definir la función&lt;br /&gt;
--    significado :: Prop -&amp;gt; Interpretación -&amp;gt; Bool&lt;br /&gt;
-- tal que (significado f i) es el significado de f en i. Por ejemplo,&lt;br /&gt;
--    significado ((p \/ q) /\ ((no q) \/ r)) [r]    ==&amp;gt;  False&lt;br /&gt;
--    significado ((p \/ q) /\ ((no q) \/ r)) [p,r]  ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
significado :: Prop -&amp;gt; Interpretacion -&amp;gt; Bool&lt;br /&gt;
significado (Atom f) i = (elem (Atom f) i)&lt;br /&gt;
significado (Neg f) i = not (significado f i)&lt;br /&gt;
significado (Conj f g) i = (significado f i)&amp;amp;&amp;amp;(significado g i)&lt;br /&gt;
significado (Disj f g) i = (significado f i)||(significado g i)&lt;br /&gt;
significado (Equi f g) i = (significado f i)==(significado g i)&lt;br /&gt;
significado (Impl f g) i &lt;br /&gt;
                   |((significado f i)==True)&amp;amp;&amp;amp;((significado g i))==False=False&lt;br /&gt;
                   |otherwise = True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{-Otra opción:&lt;br /&gt;
esAtomica :: Prop -&amp;gt; Bool&lt;br /&gt;
esAtomica (Atom _) = True&lt;br /&gt;
esAtomica f = False&lt;br /&gt;
significado f y | esAtomica f = elem f y&lt;br /&gt;
significado (Neg x) xs = not (significado x xs)&lt;br /&gt;
significado (Disj x y) xs = not (all (==False) [significado  x xs,&lt;br /&gt;
                                                             significado&lt;br /&gt;
                                                             y xs])&lt;br /&gt;
significado (Conj x y) xs = all(==True) [significado x xs, significado y xs]&lt;br /&gt;
significado (Impl x y) xs |significado x xs == True &amp;amp;&amp;amp; significado y xs&lt;br /&gt;
                            == False = False&lt;br /&gt;
                          |otherwise = True&lt;br /&gt;
significado (Equi x y) xs = significado x xs == significado y xs&lt;br /&gt;
-}&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Interpretaciones de una fórmula                                    --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8: Definir la función&lt;br /&gt;
--    subconjuntos :: [a] -&amp;gt; [[a]]&lt;br /&gt;
-- tal que (subconjuntos x) es la lista de los subconjuntos de x. Por&lt;br /&gt;
-- ejmplo, &lt;br /&gt;
--    subconjuntos &amp;quot;abc&amp;quot;  ==&amp;gt;  [&amp;quot;abc&amp;quot;,&amp;quot;ab&amp;quot;,&amp;quot;ac&amp;quot;,&amp;quot;a&amp;quot;,&amp;quot;bc&amp;quot;,&amp;quot;b&amp;quot;,&amp;quot;c&amp;quot;,&amp;quot;&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
subconjuntos :: [a] -&amp;gt; [[a]]&lt;br /&gt;
subconjuntos [] = [[]]&lt;br /&gt;
subconjuntos (x:xs) = (map (x:) (subconjuntos xs))++(subconjuntos xs)&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9: Definir la función&lt;br /&gt;
--    interpretacionesForm :: Prop -&amp;gt; [Interpretación]&lt;br /&gt;
-- tal que (interpretacionesForm f) es la lista de todas las&lt;br /&gt;
-- interpretaciones de f. Por ejemplo, &lt;br /&gt;
--    interpretacionesForm (p /\ q --&amp;gt; p)  ==&amp;gt;  [[p,q],[p],[q],[]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
interpretacionesForm :: Prop -&amp;gt; [Interpretacion]&lt;br /&gt;
interpretacionesForm f = subconjuntos (simbolosPropForm f)&lt;br /&gt;
&lt;br /&gt;
{- Otra opción:&lt;br /&gt;
interpretacionesForm = subconjuntos.simbolosPropForm&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Modelos de fórmulas                                                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10: Definir la función&lt;br /&gt;
--    esModeloFormula :: Interpretacion -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esModeloFormula i f) se verifica si i es un modelo de f. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esModeloFormula [r]   ((p \/ q) /\ ((no q) \/ r))    ==&amp;gt;  False&lt;br /&gt;
--    esModeloFormula [p,r] ((p \/ q) /\ ((no q) \/ r))    ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
esModeloFormula :: Interpretacion -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esModeloFormula i f = significado f i&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11: Definir la función&lt;br /&gt;
--    modelosFormula :: Prop -&amp;gt; [Interpretacion]&lt;br /&gt;
-- tal que (modelosFormula f) es la lista de todas las interpretaciones&lt;br /&gt;
-- de f que son modelo de F. Por ejemplo,&lt;br /&gt;
--    modelosFormula ((p \/ q) /\ ((no q) \/ r)) &lt;br /&gt;
--    ==&amp;gt; [[p,q,r],[p,r],[p],[q,r]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
modelosFormula :: Prop -&amp;gt; [Interpretacion]&lt;br /&gt;
modelosFormula f = [i|i &amp;lt;-(interpretacionesForm f), esModeloFormula i f]&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Fórmulas válidas, satisfacibles e insatisfacibles                  --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12: Definir la función&lt;br /&gt;
--    esValida :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esValida f) se verifica si f es válida. Por ejemplo,&lt;br /&gt;
--    esValida (p --&amp;gt; p)                 ==&amp;gt;  True&lt;br /&gt;
--    esValida (p --&amp;gt; q)                 ==&amp;gt;  False&lt;br /&gt;
--    esValida ((p --&amp;gt; q) \/ (q --&amp;gt; p))  ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
esValida :: Prop -&amp;gt; Bool&lt;br /&gt;
esValida f = null((interpretacionesForm f)\\( modelosFormula f))&lt;br /&gt;
&lt;br /&gt;
{- Otra opción:&lt;br /&gt;
esValida f = length(modelosFormula f)==length(interpretacionesForm f)&lt;br /&gt;
-}&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13: Definir la función&lt;br /&gt;
--    esInsatisfacible :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esInsatisfacible f) se verifica si f es insatisfacible. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esInsatisfacible (p /\ (no p))             ==&amp;gt;  True&lt;br /&gt;
--    esInsatisfacible ((p --&amp;gt; q) /\ (q --&amp;gt; r))  ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
esInsatisfacible :: Prop -&amp;gt; Bool&lt;br /&gt;
esInsatisfacible f = null (modelosFormula f)&lt;br /&gt;
&lt;br /&gt;
{- Otra opción:&lt;br /&gt;
esInsatisfacible = null. modelosFormula&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14: Definir la función&lt;br /&gt;
--    esSatisfacible :: Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esSatisfacible f) se verifica si f es satisfacible. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esSatisfacible (p /\ (no p))             ==&amp;gt;  False&lt;br /&gt;
--    esSatisfacible ((p --&amp;gt; q) /\ (q --&amp;gt; r))  ==&amp;gt;  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
esSatisfacible :: Prop -&amp;gt; Bool&lt;br /&gt;
esSatisfacible f = not( null (modelosFormula f))&lt;br /&gt;
&lt;br /&gt;
{- Otra opción:&lt;br /&gt;
esSatisfacible  = not.esInsatisfacible &lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Símbolos proposicionales de un conjunto de fórmulas                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15: Definir la función&lt;br /&gt;
--    unionGeneral :: Eq a =&amp;gt; [[a]] -&amp;gt; [a]&lt;br /&gt;
-- tal que (unionGeneral x) es la unión de los conjuntos de la lista de&lt;br /&gt;
-- conjuntos x. Por ejemplo,&lt;br /&gt;
--    unionGeneral []                 ==&amp;gt;  []&lt;br /&gt;
--    unionGeneral [[1]]              ==&amp;gt;  [1]&lt;br /&gt;
--    unionGeneral [[1],[1,2],[2,3]]  ==&amp;gt;  [1,2,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
unionGeneral :: Eq a =&amp;gt; [[a]] -&amp;gt; [a]&lt;br /&gt;
unionGeneral [] = []&lt;br /&gt;
unionGeneral (xs:xss) = union xs (unionGeneral xss) &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16: Definir la función&lt;br /&gt;
--    simbolosPropConj :: [Prop] -&amp;gt; [Prop]&lt;br /&gt;
-- tal que (simbolosPropConj s) es el conjunto de los símbolos&lt;br /&gt;
-- proposiciones de s. Por ejemplo,&lt;br /&gt;
--    simbolosPropConj [p /\ q --&amp;gt; r, p --&amp;gt; s]  ==&amp;gt;  [p,q,r,s]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
simbolosPropConj :: [Prop] -&amp;gt; [Prop]&lt;br /&gt;
simbolosPropConj s = unionGeneral [simbolosPropForm f|f&amp;lt;-s]&lt;br /&gt;
&lt;br /&gt;
{- Otra Opción:&lt;br /&gt;
simbolosPropConj =nub.concat.map(simbolosPropForm) &lt;br /&gt;
-}&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Interpretaciones de un conjunto de fórmulas                        --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17: Definir la función&lt;br /&gt;
--    interpretacionesConjunto :: [Prop] -&amp;gt; [Interpretacion]&lt;br /&gt;
-- tal que (interpretacionesConjunto s) es la lista de las&lt;br /&gt;
-- interpretaciones de s. Por ejemplo,&lt;br /&gt;
--    interpretacionesConjunto [p --&amp;gt; q, q --&amp;gt; r]&lt;br /&gt;
--    ==&amp;gt; [[p,q,r],[p,q],[p,r],[p],[q,r],[q],[r],[]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interpretacionesConjunto :: [Prop] -&amp;gt; [Interpretacion]&lt;br /&gt;
interpretacionesConjunto s = subconjuntos.simbolosPropConj&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Modelos de conjuntos de fórmulas                                   --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18: Definir la función&lt;br /&gt;
--    esModeloConjunto :: Interpretacion -&amp;gt; [Prop] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esModeloConjunto i s) se verifica si i es modelo de s. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esModeloConjunto [p,r] [(p \/ q) /\ ((no q) \/ r), q --&amp;gt; r]&lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
--    esModeloConjunto [p,r] [(p \/ q) /\ ((no q) \/ r), r --&amp;gt; q]&lt;br /&gt;
--    ==&amp;gt; False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esModeloConjunto :: Interpretacion -&amp;gt; [Prop] -&amp;gt; Bool&lt;br /&gt;
esModeloConjunto i s =  and [esModeloFormula i f|f&amp;lt;-s]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19: Definir la función&lt;br /&gt;
--    modelosConjunto :: [Prop] -&amp;gt; [Interpretacion]&lt;br /&gt;
-- tal que (modelosConjunto s) es la lista de modelos del conjunto&lt;br /&gt;
-- s. Por ejemplo,&lt;br /&gt;
--    modelosConjunto [(p \/ q) /\ ((no q) \/ r), q --&amp;gt; r]&lt;br /&gt;
--    ==&amp;gt; [[p,q,r],[p,r],[p],[q,r]]&lt;br /&gt;
--    modelosConjunto [(p \/ q) /\ ((no q) \/ r), r --&amp;gt; q]&lt;br /&gt;
--    ==&amp;gt; [[p,q,r],[p],[q,r]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
modelosConjunto :: [Prop] -&amp;gt; [Interpretacion]&lt;br /&gt;
modelosConjunto s = [i|i&amp;lt;-interpretacionesConjunto s, esModeloConjunto i s]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Conjuntos consistentes e inconsistentes de fórmulas                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20: Definir la función&lt;br /&gt;
--    esConsistente :: [Prop] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esConsistente s) se verifica si s es consistente. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esConsistente [(p \/ q) /\ ((no q) \/ r), p --&amp;gt; r]        &lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
--    esConsistente [(p \/ q) /\ ((no q) \/ r), p --&amp;gt; r, no r]  &lt;br /&gt;
--    ==&amp;gt; False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esConsistente :: [Prop] -&amp;gt; Bool&lt;br /&gt;
esConsistente s = not.null.modelosConjunto&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 21: Definir la función&lt;br /&gt;
--    esInconsistente :: [Prop] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esInconsistente s) se verifica si s es inconsistente. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esInconsistente [(p \/ q) /\ ((no q) \/ r), p --&amp;gt; r]        &lt;br /&gt;
--    ==&amp;gt; False&lt;br /&gt;
--    esInconsistente [(p \/ q) /\ ((no q) \/ r), p --&amp;gt; r, no r]  &lt;br /&gt;
--    ==&amp;gt; True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esInconsistente :: [Prop] -&amp;gt; Bool&lt;br /&gt;
esInconsistente s = not.esConsistente&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Consecuencia lógica                                                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22: Definir la función&lt;br /&gt;
--    esConsecuencia :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
-- tal que (esConsecuencia s f) se verifica si f es consecuencia de&lt;br /&gt;
-- s. Por ejemplo,&lt;br /&gt;
--    esConsecuencia [p --&amp;gt; q, q --&amp;gt; r] (p --&amp;gt; r)  ==&amp;gt;  True&lt;br /&gt;
--    esConsecuencia [p] (p /\ q)                  ==&amp;gt;  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esConsecuencia :: [Prop] -&amp;gt; Prop -&amp;gt; Bool&lt;br /&gt;
esConsecuencia s f = and[esModeloFormula i f|i&amp;lt;- modelosConjunto s]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fravalher1</name></author>
		
	</entry>
</feed>