HsSymMath ========= Interactive mathematical languages written in haskell ## Logic.hs ## Formal logic parser ### Command line ### Currently the command line will take a logical expression as an argument and print out its corresponding truth table. ``` \$ ./Logic Enter Command > TruthTable: a&b+c->~a&b 'a' 'b' 'c' | (((a&b)+c)->(~a&b)) True True True | False True True False | False True False True | False True False False | True False True True | True False True False | True False False True | False False False False | True Enter Command > ToNand: a&b->c (((((a|b)|(a|b))|((a|b)|(a|b)))|(((a|b)|(a|b))|((a|b)|(a|b))))|(c|c)) Enter Command > ToNor: a&b->c (((((a/a)/(b/b))/((a/a)/(b/b)))/c)/((((a/a)/(b/b))/((a/a)/(b/b)))/c)) ``` ### Code ### ```haskell > And (Atom 'a') (Not (Atom 'b')) (a&~b) > truthTable \$ And (Atom 'a') (Not (Atom 'b')) 'a' 'b' | (a&~b) True True | False True False | True False True | False False False | False > toNand \$ And (Atom 'a') (Not (Atom 'b')) ((a|(b|b))|(a|(b|b))) > toNor \$ And (Atom 'a') (Not (Atom 'b')) ((a/a)/((b/b)/(b/b))) > let exp = And (Atom 'a') (Not (Atom 'b')) > exp == toNand exp True > exp == toNor exp True > exp == toNor (toNand exp) True ```