El tipo de las fórmulas proposicionales - Reconocedor de tautologías
Una fórmula es una tautología si es verdadera en todas sus interpretaciones. Por ejemplo,
-
(A ∧ B) → A
es una tautología -
A → (A ∧ B)
no es una tautología
Usando el tipo de las fórmulas proposicionales definido en el ejercicio anterior, definir la función
esTautologia :: FProp -> Bool
tal que esTautologia p
se verifica si la fórmula p
es una tautología. Por ejemplo,
λ> esTautologia (Impl (Conj (Var 'A') (Var 'B')) (Var 'A')) True λ> esTautologia (Impl (Var 'A') (Conj (Var 'A') (Var 'B'))) False
Soluciones
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
Soluciones en Haskell
import Tipo_de_formulas (FProp(..)) import Valor_de_una_formula (valor) import Interpretaciones_de_una_formula (interpretaciones) esTautologia :: FProp -> Bool esTautologia p = and [valor i p | i <- interpretaciones p]
Soluciones en Python
from src.interpretaciones_de_una_formula import interpretaciones from src.tipo_de_formulas import Conj, Const, FProp, Impl, Neg, Var from src.valor_de_una_formula import valor def esTautologia(p: FProp) -> bool: return all((valor(i, p) for i in interpretaciones(p)))