Logic-0.1.0.0: src/Logic.hs
module Logic where
import Prelude hiding ((^), (&&), (||))
import Data.List (intercalate)
data Logic = T | F | Atom String | Neg Logic | Or [Logic] | And [Logic]
instance Show Logic where
show x = case x of
Atom a -> a
Neg p -> "¬" ++ show p
Or ps -> intercalate " ∨ " (map show ps)
And ps -> intercalate " ∧ " (map show ps)
T -> "T"
F -> "F"
p = Atom "p" :: Logic
q = Atom "q" :: Logic
r = Atom "r" :: Logic
(^) :: Logic -> Logic
(^) p = Neg p
(||) :: Logic -> Logic -> Logic
(||) p q = Or [p, q]
(&&) :: Logic -> Logic -> Logic
(&&) p q = And [p, q]
(==>) :: Logic -> Logic -> Logic
(==>) p q = (Neg p) || q
(<=>) :: Logic -> Logic -> Logic
(<=>) p q = ((Neg p) || q) && (p || (Neg q))