module-management-0.20.2: testdata/split-merge-expected/Data/Logic/Classes/ClauseNormalForm.hs
{-# LANGUAGE FunctionalDependencies, MultiParamTypeClasses #-}
module Data.Logic.Classes.ClauseNormalForm
( ClauseNormalFormula(clauses, makeCNF, satisfiable)
) where
import Control.Monad (MonadPlus)
import Data.Logic.Classes.Negate
import Data.Set as S
-- |A class to represent formulas in CNF, which is the conjunction of
-- a set of disjuncted literals each which may or may not be negated.
class (Negatable lit, Eq lit, Ord lit) => ClauseNormalFormula cnf lit | cnf -> lit where
clauses :: cnf -> S.Set (S.Set lit)
makeCNF :: S.Set (S.Set lit) -> cnf
satisfiable :: MonadPlus m => cnf -> m Bool