import Prelude hiding ( not )
import Satchmo.Binary.Op.Fixed
import qualified Satchmo.Binary.Op.Flexible
import Satchmo.Solver.Minisat
import Satchmo.Boolean
import Satchmo.Code
import System.Environment
main :: IO ()
main = do
[ n ] <- getArgs
res <- solve $ do
x <- Satchmo.Binary.Op.Flexible.constant $ read n
a <- number $ width x
notone a
b <- number $ width x
notone b
ab <- times a b
monadic assert [ equals ab x ]
return $ decode [ a, b ]
print res
notone f = do
one <- Satchmo.Binary.Op.Flexible.constant 1
e <- equals f one
assert [ not e ]
also, see lecture notes for chapter Software zur SAT-Kodierung (in German) from my introductory course on Constraint Programming
cabal install [--global --root-cmd=sudo] satchmo
cabal install [--global --root-cmd=sudo] satchmo-backends
see below for development sources
git clone git://dfa.imn.htwk-leipzig.de/srv/git/satchmo.git git clone git://dfa.imn.htwk-leipzig.de/srv/git/satchmo-backends.git git clone git://dfa.imn.htwk-leipzig.de/srv/git/satchmo-examples.git
browse source trees: (gitweb)