toysolver-0.0.4: src/Data/DNF.hs
-----------------------------------------------------------------------------
-- |
-- Module : Data.DNF
-- Copyright : (c) Masahiro Sakai 2011-2013
-- License : BSD-style
--
-- Maintainer : masahiro.sakai@gmail.com
-- Stability : provisional
-- Portability : portable
--
-- Disjunctive Normal Form
--
-----------------------------------------------------------------------------
module Data.DNF
( DNF (..)
) where
import Algebra.Lattice
import Algebra.Lattice.Boolean
-- | Disjunctive normal form
newtype DNF lit
= DNF
{ unDNF :: [[lit]] -- ^ list of conjunction of literals
} deriving (Show)
instance Complement lit => Complement (DNF lit) where
notB (DNF xs) = DNF . sequence . map (map notB) $ xs
instance JoinSemiLattice (DNF lit) where
DNF xs `join` DNF ys = DNF (xs++ys)
instance MeetSemiLattice (DNF lit) where
DNF xs `meet` DNF ys = DNF [x++y | x<-xs, y<-ys]
instance Lattice (DNF lit)
instance BoundedJoinSemiLattice (DNF lit) where
bottom = DNF []
instance BoundedMeetSemiLattice (DNF lit) where
top = DNF [[]]
instance BoundedLattice (DNF lit)
instance Complement lit => Boolean (DNF lit)