Nota: En este ejercicio usaremos las mismas notaciones que en anterior importando los módulos Interpretaciones_de_FNC y Evaluacion_de_FNC
Una interpretación I es un modelo de un literal L si el valor de L en I es verdadero. Por ejemplo, la interpretación [2,5]
- es modelo del literal x(2) (porque 2 ∈ [2,5])
- no es modelo del literal x(3) (porque 3 ∉ [2,5])
- es modelo del literal -x(4) (porque 4 ∉ [2,5])
Una interpretación I es un modelo de una cláusula C si el valor de C en I es verdadero. Por ejemplo, la interpretación [2,5]
- es modelo de la cláusula (x(2) v x(3)) (porque x(2) es verdadero)
- no es modelo de la cláusula (x(3) v x(4)) (porque x(3) y x(4) son falsos)
Una interpretación I es un modelo de una FNC F si el valor de F en I es verdadero. Por ejemplo, la interpretación [2,5]
- es modelo de la FNC ((x(2) v x(5)) & (-x(4) v x(3)) porque lo es de sus dos cláusulas.
Definir las siguientes funciones
esModeloLiteral :: Interpretacion -> Literal -> Bool esModeloClausula :: Interpretacion -> Clausula -> Bool esModelo :: Interpretacion -> FNC -> Bool modelosClausula :: Clausula -> [Interpretacion] modelos :: FNC -> [Interpretacion] |
tales que
- (esModeloLiteral i l) se verifica si i es modelo del literal l. Por ejemplo,
esModeloLiteral [3,5] 3 == True esModeloLiteral [3,5] 4 == False esModeloLiteral [3,5] (-3) == False esModeloLiteral [3,5] (-4) == True |
- (esModeloClausula i c) se verifica si i es modelo de la cláusula c. Por ejemplo,
esModeloClausula [3,5] [2,3,-5] == True esModeloClausula [3,5] [2,4,-1] == True esModeloClausula [3,5] [2,4,1] == False |
- (esModelo i f) se verifica si i es modelo de la fórmula f. Por ejemplo,
esModelo [1,3] [[1,-2],[3]] == True esModelo [1] [[1,-2],[3]] == False esModelo [1] [] == True |
- (modelosClausula c) es la lista de los modelos de la cláusula c. Por ejemplo,
modelosClausula [-1,2] == [[],[2],[1,2]] modelosClausula [-1,1] == [[],[1]] modelosClausula [] == [] |
- (modelos f) es la lista de los modelos de la fórmula f. Por ejemplo,
modelos [[-1,2],[-2,1]] == [[],[1,2]] modelos [[-1,2],[-2],[1]] == [] modelos [[1,-1,2]] == [[],[1],[2],[1,2]] |
Nota: Escribir la solución en el módulo Modelos_de_FNC para poderlo usar en los siguientes ejercicios.
Soluciones
module Modelos_de_FNC where import Interpretaciones_de_FNC import Evaluacion_de_FNC esModeloLiteral :: Interpretacion -> Literal -> Bool esModeloLiteral i l | l > 0 = l `elem` i | otherwise = negate l `notElem` i esModeloClausula :: Interpretacion -> Clausula -> Bool esModeloClausula i = any (esModeloLiteral i) esModelo :: Interpretacion -> FNC -> Bool esModelo i = all (esModeloClausula i) modelosClausula :: Clausula -> [Interpretacion] modelosClausula c = [i | i <- interpretacionesClausula c, esModeloClausula i c] modelos :: FNC -> [Interpretacion] modelos f = [i | i <- interpretaciones f, esModelo i f] |
Otras soluciones
- Se pueden escribir otras soluciones en los comentarios.
- El código se debe escribir entre una línea con <pre lang=”haskell”> y otra con </pre>
Pensamiento
“Por muy correcto que parezca un teorema matemático, nunca hay que conformarse con que no haya algo imperfecto en él hasta obtener la impresión de qie es bello.”
2 soluciones de “Modelos de FNC (fórmulas en forma normal conjuntiva)”