Skip to content

Instantly share code, notes, and snippets.

@JacksonGariety
Last active November 3, 2016 23:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JacksonGariety/b3ac405b19d5de62d893b161f82234b5 to your computer and use it in GitHub Desktop.
Save JacksonGariety/b3ac405b19d5de62d893b161f82234b5 to your computer and use it in GitHub Desktop.
-- import qualified Data.Map as Map
import Debug.Trace
data Expr = Nil | Phrase String | Not Expr | And Expr Expr | Or Expr Expr
deriving (Show, Eq)
dne :: Expr -> Expr
dne (Not (Not p)) = p
dne _ = Nil
dni :: Expr -> Expr
dni p = Not (Not p)
rules :: [Expr -> Expr]
rules = [dne, dni]
prove :: [Expr] -> Expr -> String
prove props c = go props rules []
where go [] _ [] = error "no props"
go [] _ next = go next rules []
go (p:ps) [] next = go ps rules (res:next)
where res = (head rules) p
go px (r:rs) next
| (traceShow (head px) False) = "foo"
| res == c = "proven"
| otherwise = go px rs (res:next)
where res = r (head px)
main :: IO ()
main = print $ prove [(Not (Not (Not (Not (Not (Not (Phrase "a")))))))] (Phrase "a")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment