-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Boolean normal form: NNF, DNF & CNF
--
-- The provided types that might be useful in symbolic manipulation of
-- propositional logic expressions.
@package boolean-normal-forms
@version 0.0.0.1
module Data.Algebra.Boolean.CoBoolean
-- | A class to values translable to booleans.
class CoBoolean a
toBoolean :: (CoBoolean a, Boolean b) => a -> b
-- | A polymorphic class of values translable to booleans.
class CoBoolean1 b
toBooleanWith :: (CoBoolean1 b, Boolean c) => (a -> c) -> b a -> c
-- | Less polymorphic version of toBoolean.
toBool :: CoBoolean a => a -> Bool
-- | Less polymorphic version of toBooleanWith.
toBoolWith :: CoBoolean1 b => (a -> Bool) -> b a -> Bool
instance CoBoolean1 Maybe
instance CoBoolean (Maybe a)
instance (CoBoolean f, CoBoolean g) => CoBoolean (Either f g)
instance CoBoolean Bool
module Data.Algebra.Boolean.Negable
-- | Free Negable.
data Neg a
-- | Positive value
Pos :: a -> Neg a
-- | Negative value
Neg :: a -> Neg a
-- | Class to represent invertible values.
--
-- Must obey the double negation law: not (not x) = x
--
-- The negation appears only in leafs of normal forms, and the underlying
-- proposition class might have built-in negation, thus we use
-- Negable.
class Negable x
not :: Negable x => x -> x
instance Typeable1 Neg
instance Eq a => Eq (Neg a)
instance Ord a => Ord (Neg a)
instance Show a => Show (Neg a)
instance Read a => Read (Neg a)
instance Functor Neg
instance (Negable a, Negable b) => Negable (Either a b)
instance (Negable a, Negable b) => Negable (a, b)
instance Monoid m => Negable (Maybe m)
instance Negable Bool
instance Negable (Neg a)
instance CoBoolean1 Neg
instance CoBoolean (Neg a)
module Data.Algebra.Boolean.FreeBoolean
-- | Free Boolean type, does not perform any optimizations on the
-- structure. Useful only in tests.
--
-- Consider using NNF.
data FreeBoolean a
FBValue :: a -> FreeBoolean a
FBTrue :: FreeBoolean a
FBFalse :: FreeBoolean a
FBNot :: (FreeBoolean a) -> FreeBoolean a
FBAnd :: (FreeBoolean a) -> (FreeBoolean a) -> FreeBoolean a
FBOr :: (FreeBoolean a) -> (FreeBoolean a) -> FreeBoolean a
instance Typeable1 FreeBoolean
instance Eq a => Eq (FreeBoolean a)
instance Ord a => Ord (FreeBoolean a)
instance Show a => Show (FreeBoolean a)
instance Read a => Read (FreeBoolean a)
instance Functor FreeBoolean
instance Boolean (FreeBoolean a)
instance Negable (FreeBoolean a)
instance CoBoolean a => CoBoolean (FreeBoolean a)
instance CoBoolean1 FreeBoolean
module Data.Algebra.Boolean.NormalForm
-- | Class unifying different boolean normal forms.
class CoBoolean1 nf => NormalForm nf where type family NFConstraint nf a :: Constraint type instance NFConstraint nf a = ()
toNormalForm :: NormalForm nf => a -> nf a
simplify :: (NormalForm nf, NFConstraint nf a) => (a -> Maybe Bool) -> nf a -> nf a
fromFreeBoolean :: (NormalForm nf, NFConstraint nf a) => FreeBoolean a -> nf a
instance NormalForm FreeBoolean
module Data.Algebra.Boolean.NNF.Tree
-- | Boolean formula in Negation Normal Form
--
-- Boolean operations will perform transformations as below:
--
data NNF a
NNFTrue :: NNF a
NNFFalse :: NNF a
NNFValue :: a -> NNF a
NNFOr :: (NNF a) -> (NNF a) -> NNF a
NNFAnd :: (NNF a) -> (NNF a) -> NNF a
instance Typeable1 NNF
instance Eq a => Eq (NNF a)
instance Ord a => Ord (NNF a)
instance Show a => Show (NNF a)
instance Read a => Read (NNF a)
instance Functor NNF
instance NormalForm NNF
instance Negable a => Boolean (NNF a)
instance Negable a => Negable (NNF a)
instance CoBoolean1 NNF
instance CoBoolean a => CoBoolean (NNF a)
-- | This module re-exports tree-based implementation.
module Data.Algebra.Boolean.NNF
module Data.Algebra.Boolean.DNF.Set
-- | Boolean formula in Disjunction Normal Form
--
newtype DNF a
DNF :: Set (Set a) -> DNF a
unDNF :: DNF a -> Set (Set a)
fromDoubleList :: Ord a => [[a]] -> DNF a
toDoubleList :: DNF a -> [[a]]
fromNNF :: (Ord a, Negable a) => NNF a -> DNF a
instance Typeable1 DNF
instance Eq a => Eq (DNF a)
instance Ord a => Ord (DNF a)
instance Show a => Show (DNF a)
instance (Ord a, Read a) => Read (DNF a)
instance NormalForm DNF
instance (Ord a, Negable a) => Boolean (DNF a)
instance (Ord a, Negable a) => Negable (DNF a)
instance CoBoolean a => CoBoolean (DNF a)
instance CoBoolean1 DNF
-- | This module re-exports Set-based implementation.
module Data.Algebra.Boolean.DNF
module Data.Algebra.Boolean.CNF.Set
-- | Boolean formula in Conjunction Normal Form
--
newtype CNF a
CNF :: Set (Set a) -> CNF a
unCNF :: CNF a -> Set (Set a)
fromDoubleList :: Ord a => [[a]] -> CNF a
toDoubleList :: CNF a -> [[a]]
fromNNF :: (Ord a, Negable a) => NNF a -> CNF a
instance Typeable1 CNF
instance Eq a => Eq (CNF a)
instance Ord a => Ord (CNF a)
instance Show a => Show (CNF a)
instance (Ord a, Read a) => Read (CNF a)
instance NormalForm CNF
instance (Ord a, Negable a) => Boolean (CNF a)
instance (Ord a, Negable a) => Negable (CNF a)
instance CoBoolean a => CoBoolean (CNF a)
instance CoBoolean1 CNF
-- | This module re-exports Set-based implementation.
module Data.Algebra.Boolean.CNF
module Data.Algebra.Boolean.NNF.Set
-- | Boolean formula in Negation Normal Form
--
-- Boolean operations will perform transformations as below:
--
data NNF a
NNFTrue :: NNF a
NNFFalse :: NNF a
NNFValue :: a -> NNF a
NNFOr :: (Set (NNF a)) -> NNF a
NNFAnd :: (Set (NNF a)) -> NNF a
instance Typeable1 NNF
instance Eq a => Eq (NNF a)
instance Ord a => Ord (NNF a)
instance Show a => Show (NNF a)
instance (Ord a, Read a) => Read (NNF a)
instance NormalForm NNF
instance (Ord a, Negable a) => Boolean (NNF a)
instance (Ord a, Negable a) => Negable (NNF a)
instance CoBoolean1 NNF
instance CoBoolean a => CoBoolean (NNF a)
module Data.Algebra.Boolean.DNF.List
-- | Boolean formula in Disjunction Normal Form
--
newtype DNF a
DNF :: [[a]] -> DNF a
unDNF :: DNF a -> [[a]]
fromDoubleList :: [[a]] -> DNF a
toDoubleList :: DNF a -> [[a]]
fromNNF :: Negable a => NNF a -> DNF a
instance Typeable1 DNF
instance Eq a => Eq (DNF a)
instance Ord a => Ord (DNF a)
instance Show a => Show (DNF a)
instance Read a => Read (DNF a)
instance Functor DNF
instance NormalForm DNF
instance Negable a => Boolean (DNF a)
instance Negable a => Negable (DNF a)
instance CoBoolean a => CoBoolean (DNF a)
instance CoBoolean1 DNF
module Data.Algebra.Boolean.CNF.List
-- | Boolean formula in Conjunction Normal Form
--
newtype CNF a
CNF :: [[a]] -> CNF a
unCNF :: CNF a -> [[a]]
fromDoubleList :: [[a]] -> CNF a
toDoubleList :: CNF a -> [[a]]
fromNNF :: Negable a => NNF a -> CNF a
instance Typeable1 CNF
instance Eq a => Eq (CNF a)
instance Ord a => Ord (CNF a)
instance Show a => Show (CNF a)
instance Read a => Read (CNF a)
instance Functor CNF
instance NormalForm CNF
instance Negable a => Boolean (CNF a)
instance Negable a => Negable (CNF a)
instance CoBoolean a => CoBoolean (CNF a)
instance CoBoolean1 CNF