Module DA.Logic¶
Logic - Propositional calculus.
Data Types¶
data Formula t
A
Formula t
is a formula in propositional calculus with propositions of type t.Proposition p
is the formula pFor a formula f,Negation f
is ¬fConjunction [Formula t]
For formulas f1, ..., fn,Conjunction [f1, ..., fn]
is f1 ∧ ... ∧ fnDisjunction [Formula t]
For formulas f1, ..., fn,Disjunction [f1, ..., fn]
is f1 ∨ ... ∨ fninstance Applicative Formula
instance Eq t => Eq (Formula t)
Functions¶
- (&&&)
: Formula t -> Formula t -> Formula t
&&&
is the ∧ operation of the boolean algebra of formulas, to be read as "and"
- (|||)
: Formula t -> Formula t -> Formula t
|||
is the ∨ operation of the boolean algebra of formulas, to be read as "or"
- true
: Formula t
true
is the 1 element of the boolean algebra of formulas, represented as an empty conjunction.
- false
: Formula t
false
is the 0 element of the boolean algebra of formulas, represented as an empty disjunction.
- toNNF
-
toNNF
transforms a formula to negation normal form (see https://en.wikipedia.org/wiki/Negation_normal_form).
- toDNF
-
toDNF
turns a formula into disjunctive normal form. (see https://en.wikipedia.org/wiki/Disjunctive_normal_form).
- traverse
: Applicative f => (t -> f s) -> Formula t -> f (Formula s)
An implementation of
traverse
in the usual sense.
- zipFormulas
: Formula t -> Formula s -> Formula (t, s)
zipFormulas
takes to formulas of same shape, meaning only propositions are different and zips them up.
- substitute
: (t -> Optional Bool) -> Formula t -> Formula t
substitute
takes a truth assignment and substitutesTrue
orFalse
into the respective places in a formula.
- reduce
-
reduce
reduces a formula as far as possible by:- Removing any occurrences of
true
andfalse
; - Removing directly nested Conjunctions and Disjunctions;
- Going to negation normal form.
- Removing any occurrences of
- isBool
-
isBool
attempts to convert a formula to a bool. It satisfiesisBool true == Right True
andtoBool false == Right False
. Otherwise, it returnsLeft x
, wherex
is the input.
- interpret
: (t -> Optional Bool) -> Formula t -> Either (Formula t) Bool
interpret
is a version oftoBool
that first substitutes using a truth function and then reduces as far as possible.
- substituteA
: Applicative f => (t -> f (Optional Bool)) -> Formula t -> f (Formula t)
substituteA
is a version ofsubstitute
that allows for truth values to be obtained from an action.
- interpretA
: Applicative f => (t -> f (Optional Bool)) -> Formula t -> f (Either (Formula t) Bool)
interpretA
is a version ofinterpret
that allows for truth values to be obtained form an action.