| Safe Haskell | Safe |
|---|---|
| Language | Haskell2010 |
Logic
- type VarProp = String
- data FProp
- p :: FProp
- q :: FProp
- r :: FProp
- no :: FProp -> FProp
- (∨) :: FProp -> FProp -> FProp
- (∧) :: FProp -> FProp -> FProp
- (→) :: FProp -> FProp -> FProp
- (↔) :: FProp -> FProp -> FProp
- substitute :: FProp -> VarProp -> FProp -> FProp
- type Interpretation = [FProp]
- signify :: FProp -> Interpretation -> Bool
- isModelForm :: Interpretation -> FProp -> Bool
- propSymbolsForm :: FProp -> [FProp]
- interpretationsForm :: FProp -> [Interpretation]
- modelsForm :: FProp -> [Interpretation]
- isValid :: FProp -> Bool
- isUnsatisfiable :: FProp -> Bool
- isSatisfiable :: FProp -> Bool
- type KB = Set FProp
- propSymbolsKB :: KB -> [FProp]
- interpretationsKB :: KB -> [Interpretation]
- isModelKB :: Interpretation -> KB -> Bool
- modelsKB :: KB -> [Interpretation]
- isConsistent :: KB -> Bool
- isInconsistent :: KB -> Bool
- isConsequence :: KB -> FProp -> Bool
- prop_isValid :: FProp -> Bool
- prop_isConsequence :: KB -> FProp -> Bool
- isConsequenceKB :: KB -> KB -> Bool
- equivalent :: FProp -> FProp -> Bool
- equivalentKB :: KB -> KB -> Bool
- prop_equivalent :: FProp -> FProp -> Bool
Documentation
substitute :: FProp -> VarProp -> FProp -> FProp Source #
For example, >>> substitute (no p) "p" q ¬q >>> substitute (no (q ∧ no p)) "p" (q ↔ p) ¬(q ∧ ¬(q ↔ p))
type Interpretation = [FProp] Source #
signify :: FProp -> Interpretation -> Bool Source #
For example,
>>>signify ((p ∨ q) ∧ ((no q) ∨ r)) [r]False>>>signify ((p ∨ q) ∧ ((no q) ∨ r)) [p,r]True
isModelForm :: Interpretation -> FProp -> Bool Source #
For example,
>>>isModelForm [r] ((p ∨ q) ∧ ((no q) ∨ r))False>>>isModelForm [p,r] ((p ∨ q) ∧ ((no q) ∨ r))True
propSymbolsForm :: FProp -> [FProp] Source #
For example,
>>>propSymbolsForm (p ∧ q → p)[p,q]
interpretationsForm :: FProp -> [Interpretation] Source #
For example,
>>>interpretationsForm (p ∧ q → p)[[],[p],[q],[p,q]]
modelsForm :: FProp -> [Interpretation] Source #
For example,
>>>modelsForm ((p ∨ q) ∧ ((no q) ∨ r))[[p],[p,r],[q,r],[p,q,r]]
isValid :: FProp -> Bool Source #
For example,
>>>isValid (p → p)True>>>isValid (p → q)False>>>isValid ((p → q) ∨ (q → p))True
isUnsatisfiable :: FProp -> Bool Source #
For example,
>>>isUnsatisfiable (p ∧ (no p))True>>>isUnsatisfiable ((p → q) ∧ (q → r))False
isSatisfiable :: FProp -> Bool Source #
For example,
>>>isSatisfiable (p ∧ (no p))False>>>isSatisfiable ((p → q) ∧ (q → r))True
propSymbolsKB :: KB -> [FProp] Source #
For example,
>>>propSymbolsKB (S.fromList [p ∧ q → r, p → r])[p,r,q]
interpretationsKB :: KB -> [Interpretation] Source #
For example,
>>>interpretationsKB (S.fromList [p → q, q → r])[[],[p],[q],[p,q],[r],[p,r],[q,r],[p,q,r]]
isModelKB :: Interpretation -> KB -> Bool Source #
For example,
>>>isModelKB [r] (S.fromList [q,no p ,r])False>>>isModelKB [q,r] (S.fromList [q,no p ,r])True
modelsKB :: KB -> [Interpretation] Source #
For example,
>>>modelsKB $ S.fromList [(p ∨ q) ∧ ((no q) ∨ r), q → r][[p],[p,r],[q,r],[p,q,r]]>>>modelsKB $ S.fromList [(p ∨ q) ∧ ((no q) ∨ r), r → q][[p],[q,r],[p,q,r]]
isConsistent :: KB -> Bool Source #
For example,
>>>isConsistent $ S.fromList [(p ∨ q) ∧ ((no q) ∨ r), p → r]True>>>isConsistent $ S.fromList [(p ∨ q) ∧ ((no q) ∨ r), p → r, no r]False
isInconsistent :: KB -> Bool Source #
For example,
>>>isInconsistent $ S.fromList [(p ∨ q) ∧ ((no q) ∨ r), p → r]False>>>isInconsistent $ S.fromList [(p ∨ q) ∧ ((no q) ∨ r), p → r, no r]True
isConsequence :: KB -> FProp -> Bool Source #
For example,
>>>isConsequence (S.fromList [p → q, q → r]) (p → r)True>>>isConsequence (S.fromList [p]) (p ∧ q)False
prop_isValid :: FProp -> Bool Source #
>>>quickCheck prop_isValid+++ OK, passed 100 tests.
prop_isConsequence :: KB -> FProp -> Bool Source #
>>>quickCheck prop_isConsequence+++ OK, passed 100 tests.
isConsequenceKB :: KB -> KB -> Bool Source #
For example, >>> isConsequenceKB (S.fromList [p → q, q → r]) (S.fromList [p → q, p → r]) True >>> isConsequenceKB (S.fromList [p]) (S.fromList [p ∧ q]) False
equivalent :: FProp -> FProp -> Bool Source #
For example, >>> equivalent (p → q) (no p ∨ q) True >>> equivalent (p) (no (no p)) True