<?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=Ejercicio_4_%28a%29</id>
	<title>Ejercicio 4 (a) - 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=Ejercicio_4_%28a%29"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Ejercicio_4_(a)&amp;action=history"/>
	<updated>2026-07-20T00:34:40Z</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=Ejercicio_4_(a)&amp;diff=335&amp;oldid=prev</id>
		<title>Jalonso: Página creada con &#039;&lt;source lang=&quot;haskell&quot;&gt;  -- --------------------------------------------------------------------- -- Gramática de fórmulas prosicionales                                -- -- -...&#039;</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Ejercicio_4_(a)&amp;diff=335&amp;oldid=prev"/>
		<updated>2015-06-03T17:46:48Z</updated>

		<summary type="html">&lt;p&gt;Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;  -- --------------------------------------------------------------------- -- Gramática de fórmulas prosicionales                                -- -- -...&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;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Gramática de fórmulas prosicionales                                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Se definen los siguientes tipos de datos:&lt;br /&gt;
-- * SimboloProposicional 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;
-- Se definen 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;
-- Se define 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;
-- Se definen 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;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Interpretaciones                                                   --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Se define el tipo de datos Interpretación para representar las&lt;br /&gt;
-- interpretaciones como listas de pares (átomo,booleano).&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
type Interpretacion = [(Prop,Bool)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Se define el tipo de dato Literal como sinónimo de fórmula. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
type Literal = Prop&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Cláusulas                                                          --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Se define el tipo de datos Cláusula como una lista de literales. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
type Clausula = [Literal]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. Definir la función&lt;br /&gt;
--    esModeloClausula :: Interpretacion -&amp;gt; Cláusula -&amp;gt; Bool&lt;br /&gt;
-- tal que (esModeloClausula i c) se verifica si i es modelo de c . Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    esModeloClausula [(p,True),(q,False),(r,True)] [p, q]     ==  True&lt;br /&gt;
--    esModeloClausula [(p,False),(q,False),(r,True)] [p, no q] ==  True&lt;br /&gt;
--    esModeloClausula [(p,False),(q,True),(r,True)] [p, no q]  ==  False&lt;br /&gt;
--    esModeloClausula [(p,False),(q,True),(r,True)] []         ==  False&lt;br /&gt;
--    esModeloClausula [(p,False),(q,True),(r,True)] [no q]     ==  False&lt;br /&gt;
--    esModeloClausula [(p,False),(q,False),(r,True)] [no q]    ==  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esModeloClausula :: Interpretacion -&amp;gt; Clausula -&amp;gt; Bool&lt;br /&gt;
esModeloClausula i c = or [esModeloLiteral i l | l &amp;lt;- c]&lt;br /&gt;
&lt;br /&gt;
esModeloLiteral :: Interpretacion -&amp;gt; Literal -&amp;gt; Bool&lt;br /&gt;
esModeloLiteral i (Atom s)       = busca (Atom s) i&lt;br /&gt;
esModeloLiteral i (Neg (Atom s)) = not (esModeloLiteral i (Atom s))&lt;br /&gt;
&lt;br /&gt;
busca :: Eq t1 =&amp;gt; t1 -&amp;gt; [(t1, t)] -&amp;gt; t&lt;br /&gt;
busca p i = head [v | (a,v) &amp;lt;- i, a == p]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
</feed>