FirstOrderTheory 0.1.0.4 → 0.1.0.6
raw patch · 3 files changed
+40/−2 lines, 3 filesdep +ProperPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
Dependencies added: Proper
API changes (from Hackage documentation)
+ FirstOrderTheory.Syntax: data NNFFormula
+ FirstOrderTheory.Syntax: instance Eq NNFFormula
+ FirstOrderTheory.Syntax: instance Ord NNFFormula
+ FirstOrderTheory.Syntax: instance Show NNFFormula
+ FirstOrderTheory.Syntax: negateLit :: Literal -> Literal
+ FirstOrderTheory.Syntax: nnfCon :: NNFFormula -> NNFFormula -> NNFFormula
+ FirstOrderTheory.Syntax: nnfDis :: NNFFormula -> NNFFormula -> NNFFormula
+ FirstOrderTheory.Syntax: nnfLit :: Literal -> NNFFormula
+ FirstOrderTheory.Syntax: toPropositionalCNF :: NNFFormula -> CNF Literal
+ FirstOrderTheory.Theory: nnfCon :: NNFFormula -> NNFFormula -> NNFFormula
+ FirstOrderTheory.Theory: nnfDis :: NNFFormula -> NNFFormula -> NNFFormula
+ FirstOrderTheory.Theory: nnfLit :: Literal -> NNFFormula
Files
- FirstOrderTheory.cabal +2/−2
- src/FirstOrderTheory/Syntax.hs +37/−0
- src/FirstOrderTheory/Theory.hs +1/−0
FirstOrderTheory.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: FirstOrderTheory-version: 0.1.0.4+version: 0.1.0.6 synopsis: Grammar and typeclass for first order theories description: Grammar and typeclass for first order theories license: BSD3@@ -17,5 +17,5 @@ library exposed-modules: FirstOrderTheory.Theory, FirstOrderTheory.Utils, FirstOrderTheory.Syntax -- other-modules: - build-depends: base ==4.6.*, containers+ build-depends: base ==4.6.*, containers, Proper hs-source-dirs: src
src/FirstOrderTheory/Syntax.hs view
@@ -1,13 +1,46 @@ module FirstOrderTheory.Syntax( Literal, Atom, Term,+ NNFFormula, nnfLit, nnfCon, nnfDis,+ toPropositionalCNF,+ negateLit, atomArgs, predicateName, isFunctionWithName, isNeg, getAtom, varName, intVal, funcArgs, lit, nLit, atom, func, var, intConst) where import Data.List as L +import Proper.CNF+import Proper.Formula+ import FirstOrderTheory.Utils +-- |A quantifier free formla in negation normal form+data NNFFormula+ = Con NNFFormula NNFFormula+ | Dis NNFFormula NNFFormula+ | LF Literal+ deriving (Eq, Ord, Show)++-- |Returns a NNF Formula consisting of only the input literal+nnfLit :: Literal -> NNFFormula+nnfLit l = LF l++-- |Returns the conjunction of two NNF formulas+nnfCon l r = Con l r++-- |Return the disjunction of two NNF formulas+nnfDis l r = Dis l r++-- | Convert NNFFormula to propositional formula in+-- conjunctive normal form+toPropositionalCNF :: NNFFormula -> CNF Literal+toPropositionalCNF formula = toCNF $ toProperFormula formula++toProperFormula :: NNFFormula -> Formula Literal+toProperFormula (LF l) = val l+toProperFormula (Con l r) = con (toProperFormula l) (toProperFormula r)+toProperFormula (Dis l r) = dis (toProperFormula l) (toProperFormula l)+ data Literal = Lit Atom | Neg Atom@@ -21,6 +54,10 @@ isNeg :: Literal -> Bool isNeg (Neg _) = True isNeg _ = False++-- |Return the negation of the input literal+negateLit (Lit a) = Neg a+negateLit (Neg a) = Lit a -- |Returns the atomic formula of the given literal getAtom :: Literal -> Atom
src/FirstOrderTheory/Theory.hs view
@@ -2,6 +2,7 @@ FirstOrderTheory(..), PredicateDecl, FunctionDecl,+ nnfLit, nnfCon, nnfDis, predicateDecl, functionDecl) where