Создал пользовательский тип логического выражения:
-- Тип логического выражения
data Prop = Var String
| Not Prop
| And Prop Prop
| Or Prop Prop
deriving (Eq, Show)
Вот пример такого выражения:
expr = Or (Var"y") (Or (Var "x") (Not (Var "x")))
Думаю понятно, у меня все максимально упрощенно, без констан, только переменные, и операции, не или и.
Мне необходимо написать функцию для него, чтобы его упростить.
А конкретно учесть двойное отрицание. не (не А) = А
Повторения. А && А = А. А || А = А
И Поглощения. А + А*B = A. A*(A+B) = B
Помогите пожалуйста с такой функцией. На вход выражение и на выходе тоже выражение.
simplifyExpr :: Prop -> Prop