-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Utilities for symbolic predicate logic expressions -- -- picologic provides symbolic logic expressions that can be -- integrated with the picosat solver. @package picologic @version 0.2.0 module Picologic.AST data Expr -- | Variable Var :: Ident -> Expr -- | Logical negation Neg :: Expr -> Expr -- | Logical conjunction Conj :: Expr -> Expr -> Expr -- | Logical disjunction Disj :: Expr -> Expr -> Expr -- | Logical biconditional Iff :: Expr -> Expr -> Expr -- | Material implication Implies :: Expr -> Expr -> Expr -- | Constant true Top :: Expr -- | Constant false Bottom :: Expr newtype Ident Ident :: String -> Ident newtype Solutions Solutions :: [[Expr]] -> Solutions type Ctx = Map Ident Bool -- | Variables in expression variables :: Expr -> [Ident] -- | Evaluate expression. eval :: Ctx -> Expr -> Bool -- | Conjunctive normal form. (May result in exponential growth) cnf :: Expr -> Expr -- | Negation normal form. (May result in exponential growth) nnf :: Expr -> Expr -- | Remove tautologies. simp :: Expr -> Expr -- | Test if expression is constant. isConst :: Expr -> Bool -- | Propagate constants (to simplify expression). propConst :: Expr -> Expr -- | Substitute expressions for variables. This doesn't resolve any -- potential variable name conflicts. subst :: Map Ident Expr -> Expr -> Expr -- | Partially evaluate expression. partEval :: Ctx -> Expr -> Expr instance Data.Data.Data Picologic.AST.Expr instance GHC.Classes.Ord Picologic.AST.Expr instance GHC.Classes.Eq Picologic.AST.Expr instance Data.Data.Data Picologic.AST.Ident instance GHC.Show.Show Picologic.AST.Ident instance GHC.Classes.Ord Picologic.AST.Ident instance GHC.Classes.Eq Picologic.AST.Ident module Picologic.Parser parseFile :: FilePath -> IO (Either ParseError Expr) parseExpr :: String -> Either ParseError Expr readExpr :: String -> Expr module Picologic.Pretty -- | Pretty print with unicode symbols. ppExprU :: Expr -> Doc -- | Pretty print with ascii symbols. ppExprA :: Expr -> Doc -- | Pretty print into S-Expressions ppExprLisp :: Expr -> Doc ppSolutions :: Solutions -> String instance GHC.Show.Show Picologic.AST.Expr instance GHC.Show.Show Picologic.AST.Solutions module Picologic.Solver -- | Yield the solutions for an expression using the PicoSAT solver. solveProp :: Expr -> IO Solutions -- | Yield the solutions for an expression using the PicoSAT solver. The -- Expression must be in CNF form already. solveCNF :: Expr -> IO Solutions -- | Yield one single solution for an expression using the PicoSAT solver. -- The Expression must be in CNF form already. solveOneCNF :: Expr -> IO (Maybe [Expr]) -- | Yield the integer clauses given to the SAT solver. clausesExpr :: Expr -> [[Int]] addVarsToSolutions :: [Ident] -> Solutions -> Solutions module Picologic.Tseitin tseitinCNF :: Expr -> Expr dropTseitinVarsInSolutions :: Solutions -> Solutions dropTseitinVars :: [Expr] -> [Expr] -- | Example usage: -- --
--   import Picologic
--   p, q, r :: Expr
--   p = readExpr "~(A | B)"
--   q = readExpr "(A | ~B | C) & (B | D | E) & (D | F)"
--   r = readExpr "(φ <-> ψ)"
--   
-- -- The expression can be pretty printed using logical symbols: -- --
--   >>> ppExprU p
--   ¬(A ∨ B)
--   
--   >>> ppExprU q
--   ((((A ∨ ¬B) ∨ C) ∧ ((B ∨ D) ∨ E)) ∧ (D ∨ F))
--   
--   >>> ppExprU (cnf r)
--   ((φ ∧ (φ ∨ ¬ψ)) ∧ ((ψ ∨ ¬φ) ∧ ψ))
--   
-- -- To run the expression against the SAT solver run: -- --
--   >>> solveProp p >>= putStrLn . ppSolutions
--   ~A ~B
--   ~A B
--   A ~B
--   
module Picologic