Actualización de «Simplificación de expresiones proposicionales»
He actualizado las soluciones del ejercicio «Simplificación de expresiones proposicionales» cuyo enunciado es
El siguiente tipo de dato algebraico representa las fórmulas proposicionales construidas con una variable (X), las constantes verdadera (V) y falsa (F), la negación (Neg) y la disyunción (Dis):
data Form = X | V | F | Neg Form | Dis Form Form deriving (Eq, Ord, Show)
Por ejemplo, la fórmula (¬X v V) se representa por (Dis (Neg X) V).
Definir las funciones
valor :: Form -> Bool -> Bool simplifica :: Form -> Form
tales que
-
(valor p i)es el valor de la fórmulapcuando se le asigna aXel valori. Por ejemplo,
valor (Neg X) True == False valor (Neg F) True == True valor (Dis X (Neg X)) True == True valor (Dis X (Neg X)) False == True
-
(simplifica p)es una forma obtenida aplicándole aplas siguientes reglas de simplificación:
Neg V = F Neg F = V Neg (Neg q) = q Dis V q = V Dis F q = q Dis q V = V Dis q F = F Dis q q = q
Por ejemplo,
simplifica (Dis X (Neg (Neg X))) == X simplifica (Neg (Dis (Neg (Neg X)) F)) == Neg X simplifica (Dis (Neg F) F) == V simplifica (Dis (Neg V) (Neg (Dis (Neg X) F))) == X simplifica (Dis (Neg V) (Neg (Dis (Neg (Neg X)) F))) == Neg X
Comprobar con QuickCheck que para cualquier fórmula p y cualquier booleano i se verifica que (valor (simplifica p) i) es igual a (valor p i).
Nota: Puedes consultar las soluciones aquí.