packages feed

HasCacBDD-0.1.0.0: tests/Example.hs

module Main
where

import Data.HasCacBDD
import System.Exit
import System.IO

main :: IO ()
main = do
  hSetBuffering stdout NoBuffering
  putStrLn "Creating some BDDs:"
  putStrLn $ "top : " ++ show top
  putStrLn $ "bot : " ++ show bot
  putStrLn $ "var1: " ++ show (var 1)
  putStrLn $ "var1: " ++ show (var 1)
  putStrLn $ "var2: " ++ show (var 2)
  putStrLn "\nChecking some tautologies:"
  print $ bot == bot
  print $ top == top
  print $ var 1 == var 1
  print $ imp (var 1) (var 1) == top
  print $ equ (var 1) (var 1) == top
  print $ exists 1 (neg $ var 1) == top
  print $ gfp (\b -> con b (var 3)) == var 3
  print $ imp (conSet [var 1, var 0]) (var 1) == top
  print $ imp (conSet [var 0, var 1]) (var 0) == top
  print $ imp (con (var 0) (var 1)) (var 0) == top
  putStrLn "\nAnd some contradictions:"
  print $ bot == top
  print $ top == bot
  print $ var 1 == top
  print $ dis (var 1) (neg $ var 2) == top
  print $ dis (var 1) (var 2) == top
  print $ var 1 == var 2
  print $ forall 1 (var 1) == top
  putStrLn "\nLaws from de Morgan:"
  print $ dis (neg $ var 1) (neg $ var 2) == neg (con (var 1) (var 2))
  print $ con (neg $ var 1) (neg $ var 2) == neg (dis (var 1) (var 2))
  putStrLn "\nThe example from CacBDDs main.cpp: (!x[4] + !x[6]) * (!x[3] + !x[6]) * (!x[2] + !x[5])"
  let cacExample = conSet [ dis (neg (var 4)) (neg (var 6)) , neg (var 3) `dis` neg (var 6), neg (var 2) `dis` neg (var 5) ]
  print cacExample
  print $ cacExample == top
  putStrLn "Good Bye."
  exitSuccess