cudd-0.1.0.4: Bindings to the CUDD binary decision diagrams library

Safe HaskellNone
LanguageHaskell2010

Cudd.Imperative

Description

An ST Monad based interface to the CUDD BDD library

This is a straightforward wrapper around the C library. See http://vlsi.colorado.edu/~fabio/CUDD/ for documentation.

Exampe usage:

import Control.Monad.ST
import Cudd.Imperative

main = do
    res <- stToIO $ withManagerDefaults $ \manager -> do
        v1      <- ithVar manager 0
        v2      <- ithVar manager 1
        conj    <- bAnd manager v1 v2
        implies <- lEq manager conj v1
        deref manager conj
        return implies
    print res

Documentation

newtype DDManager s u Source #

Constructors

DDManager 

newtype DDNode s u Source #

Constructors

DDNode 

Fields

Instances

Eq (DDNode s u) Source # 

Methods

(==) :: DDNode s u -> DDNode s u -> Bool #

(/=) :: DDNode s u -> DDNode s u -> Bool #

Ord (DDNode s u) Source # 

Methods

compare :: DDNode s u -> DDNode s u -> Ordering #

(<) :: DDNode s u -> DDNode s u -> Bool #

(<=) :: DDNode s u -> DDNode s u -> Bool #

(>) :: DDNode s u -> DDNode s u -> Bool #

(>=) :: DDNode s u -> DDNode s u -> Bool #

max :: DDNode s u -> DDNode s u -> DDNode s u #

min :: DDNode s u -> DDNode s u -> DDNode s u #

Show (DDNode s u) Source # 

Methods

showsPrec :: Int -> DDNode s u -> ShowS #

show :: DDNode s u -> String #

showList :: [DDNode s u] -> ShowS #

cuddInit :: Int -> Int -> Int -> Int -> Int -> ST s (DDManager s u) Source #

withManager :: Int -> Int -> Int -> Int -> Int -> (forall u. DDManager s u -> ST s a) -> ST s a Source #

withManagerDefaults :: (forall u. DDManager s u -> ST s a) -> ST s a Source #

withManagerIO :: MonadIO m => Int -> Int -> Int -> Int -> Int -> (forall u. DDManager RealWorld u -> m a) -> m a Source #

withManagerIODefaults :: MonadIO m => (forall u. DDManager RealWorld u -> m a) -> m a Source #

shuffleHeap :: DDManager s u -> [Int] -> ST s () Source #

bZero :: DDManager s u -> DDNode s u Source #

bOne :: DDManager s u -> DDNode s u Source #

ithVar :: DDManager s u -> Int -> ST s (DDNode s u) Source #

bAnd :: DDManager s u -> DDNode s u -> DDNode s u -> ST s (DDNode s u) Source #

bOr :: DDManager s u -> DDNode s u -> DDNode s u -> ST s (DDNode s u) Source #

bNand :: DDManager s u -> DDNode s u -> DDNode s u -> ST s (DDNode s u) Source #

bNor :: DDManager s u -> DDNode s u -> DDNode s u -> ST s (DDNode s u) Source #

bXor :: DDManager s u -> DDNode s u -> DDNode s u -> ST s (DDNode s u) Source #

bXnor :: DDManager s u -> DDNode s u -> DDNode s u -> ST s (DDNode s u) Source #

bNot :: DDNode s u -> DDNode s u Source #

bIte :: DDManager s u -> DDNode s u -> DDNode s u -> DDNode s u -> ST s (DDNode s u) Source #

bExists :: DDManager s u -> DDNode s u -> DDNode s u -> ST s (DDNode s u) Source #

bForall :: DDManager s u -> DDNode s u -> DDNode s u -> ST s (DDNode s u) Source #

deref :: DDManager s u -> DDNode s u -> ST s () Source #

setVarMap :: DDManager s u -> [DDNode s u] -> [DDNode s u] -> ST s () Source #

varMap :: DDManager s u -> DDNode s u -> ST s (DDNode s u) Source #

lEq :: DDManager s u -> DDNode s u -> DDNode s u -> ST s Bool Source #

swapVariables :: DDManager s u -> [DDNode s u] -> [DDNode s u] -> DDNode s u -> ST s (DDNode s u) Source #

ref :: DDNode s u -> ST s () Source #

largestCube :: DDManager s u -> DDNode s u -> ST s (DDNode s u, Int) Source #

makePrime :: DDManager s u -> DDNode s u -> DDNode s u -> ST s (DDNode s u) Source #

support :: DDManager s u -> DDNode s u -> ST s (DDNode s u) Source #

indicesToCube :: DDManager s u -> [Int] -> ST s (DDNode s u) Source #

computeCube :: DDManager s u -> [DDNode s u] -> [Bool] -> ST s (DDNode s u) Source #

nodesToCube :: DDManager s u -> [DDNode s u] -> ST s (DDNode s u) Source #

compose :: DDManager s u -> DDNode s u -> DDNode s u -> Int -> ST s (DDNode s u) Source #

andAbstract :: DDManager s u -> DDNode s u -> DDNode s u -> DDNode s u -> ST s (DDNode s u) Source #

xorExistAbstract :: DDManager s u -> DDNode s u -> DDNode s u -> DDNode s u -> ST s (DDNode s u) Source #

leqUnless :: DDManager s u -> DDNode s u -> DDNode s u -> DDNode s u -> ST s Bool Source #

equivDC :: DDManager s u -> DDNode s u -> DDNode s u -> DDNode s u -> ST s Bool Source #

xEqY :: DDManager s u -> [DDNode s u] -> [DDNode s u] -> ST s (DDNode s u) Source #

pickOneMinterm :: DDManager s u -> DDNode s u -> [DDNode s u] -> ST s (DDNode s u) Source #

toInt :: DDNode s u -> Int Source #

dagSize :: DDNode s u -> ST s Int Source #

regular :: DDNode s u -> DDNode s u Source #

andLimit :: DDManager s u -> DDNode s u -> DDNode s u -> Int -> ST s (Maybe (DDNode s u)) Source #

newVarAtLevel :: DDManager s u -> Int -> ST s (DDNode s u) Source #

liCompaction :: DDManager s u -> DDNode s u -> DDNode s u -> ST s (DDNode s u) Source #

squeeze :: DDManager s u -> DDNode s u -> DDNode s u -> ST s (DDNode s u) Source #

minimize :: DDManager s u -> DDNode s u -> DDNode s u -> ST s (DDNode s u) Source #

newVar :: DDManager s u -> ST s (DDNode s u) Source #

vectorCompose :: DDManager s u -> DDNode s u -> [DDNode s u] -> ST s (DDNode s u) Source #

quit :: DDManager s u -> ST s () Source #

printMinterm :: DDManager s u -> DDNode s u -> ST s () Source #

checkCube :: DDManager s u -> DDNode s u -> ST s Bool Source #

data DDGen s u t Source #

Constructors

DDGen (Ptr CDDGen) 

genFree :: DDGen s u t -> ST s () Source #

isGenEmpty :: DDGen s u t -> ST s Bool Source #

firstCube :: DDManager s u -> DDNode s u -> ST s (Maybe ([SatBit], DDGen s u Cube)) Source #

nextCube :: DDManager s u -> DDGen s u Cube -> ST s (Maybe [SatBit]) Source #

firstPrime :: DDManager s u -> DDNode s u -> DDNode s u -> ST s (Maybe ([SatBit], DDGen s u Prime)) Source #

firstNode :: DDManager s u -> DDNode s u -> ST s (Maybe (DDNode s u, DDGen s u Node)) Source #

nextNode :: DDManager s u -> DDGen s u Node -> ST s (Maybe (DDNode s u)) Source #