Portability | portable |
---|---|
Stability | experimental |
Maintainer | jhendrix@galois.com |
Safe Haskell | Safe-Inferred |
Interfaces for building, simulating and analysing And-Inverter Graphs (AIG).
- class IsLit l where
- class IsLit l => IsAIG l g | g -> l where
- withNewGraph :: Proxy l g -> (forall s. g s -> IO a) -> IO a
- newGraph :: Proxy l g -> IO (SomeGraph g)
- aigerNetwork :: Proxy l g -> FilePath -> IO (Network l g)
- trueLit :: g s -> l s
- falseLit :: g s -> l s
- constant :: g s -> Bool -> l s
- asConstant :: g s -> l s -> Maybe Bool
- newInput :: g s -> IO (l s)
- and :: g s -> l s -> l s -> IO (l s)
- ands :: g s -> [l s] -> IO (l s)
- or :: g s -> l s -> l s -> IO (l s)
- eq :: g s -> l s -> l s -> IO (l s)
- implies :: g s -> l s -> l s -> IO (l s)
- xor :: g s -> l s -> l s -> IO (l s)
- mux :: g s -> l s -> l s -> l s -> IO (l s)
- inputCount :: g s -> IO Int
- getInput :: g s -> Int -> IO (l s)
- writeAiger :: FilePath -> Network l g -> IO ()
- checkSat :: g s -> l s -> IO SatResult
- cec :: Network l g -> Network l g -> IO VerifyResult
- evaluator :: g s -> [Bool] -> IO (l s -> Bool)
- evaluate :: Network l g -> [Bool] -> IO [Bool]
- data Proxy l g where
- data SomeGraph g where
- data Network l g where
- networkInputCount :: Network l g -> IO Int
- data SatResult
- data VerifyResult
- toSatResult :: VerifyResult -> SatResult
- toVerifyResult :: SatResult -> VerifyResult
Main interface classes
class IsLit l => IsAIG l g | g -> l whereSource
An And-Inverter-Graph is a data structure storing bit-level nodes.
Graphs are and-inverter graphs, which contain a number of input literals and Boolean operations for creating new literals. Every literal is part of a specific graph, and literals from different networks may not be mixed.
Both the types for literals and graphs must take a single phantom type for an arugment that is used to ensure that literals from different networks cannot be used in the same operation.
:: Proxy l g | A |
-> (forall s. g s -> IO a) | The AIG graph computation to run |
-> IO a |
Create a temporary graph, and use it to compute a result value.
newGraph :: Proxy l g -> IO (SomeGraph g)Source
Build a new graph instance, and packge it into the
SomeGraph
type that remembers the IsAIG implementation.
aigerNetwork :: Proxy l g -> FilePath -> IO (Network l g)Source
Read an AIG from a file, assumed to be in Aiger format
Get unique literal in graph representing constant true.
Get unique literal in graph representing constant false.
constant :: g s -> Bool -> l sSource
Generate a constant literal value
asConstant :: g s -> l s -> Maybe BoolSource
Return if the literal is a fixed constant. If the literal
is symbolic, return Nothing
.
newInput :: g s -> IO (l s)Source
Generate a fresh input literal
and :: g s -> l s -> l s -> IO (l s)Source
Compute the logical and of two literals
ands :: g s -> [l s] -> IO (l s)Source
Build the conjunction of a list of literals
or :: g s -> l s -> l s -> IO (l s)Source
Compute the logical or of two literals
eq :: g s -> l s -> l s -> IO (l s)Source
Compute the logical equality of two literals
implies :: g s -> l s -> l s -> IO (l s)Source
Compute the logical implication of two literals
xor :: g s -> l s -> l s -> IO (l s)Source
Compute the exclusive or of two literals
mux :: g s -> l s -> l s -> l s -> IO (l s)Source
Perform a mux (if-then-else on the bits).
inputCount :: g s -> IO IntSource
Return number of inputs in the graph.
getInput :: g s -> Int -> IO (l s)Source
Get input at given index in the graph.
writeAiger :: FilePath -> Network l g -> IO ()Source
Write network out to AIGER file.
checkSat :: g s -> l s -> IO SatResultSource
Check if literal is satisfiable in network.
cec :: Network l g -> Network l g -> IO VerifyResultSource
Perform combinational equivalence checking.
evaluator :: g s -> [Bool] -> IO (l s -> Bool)Source
Evaluate the network on a set of concrete inputs.
evaluate :: Network l g -> [Bool] -> IO [Bool]Source
Evaluate the network on a set of concrete inputs.
Helper datatypes
A proxy is used to identify a specific AIG instance when calling methods that create new AIGs.
Some graph quantifies over the state phantom variable for a graph.
A network is an and-inverstor graph paired with it's outputs, thus representing a complete combinational circuit.
networkInputCount :: Network l g -> IO IntSource
Representations of prover results
data VerifyResult Source
Result of a verification check.
toSatResult :: VerifyResult -> SatResultSource
Convert a verify result to a sat result by negating it.
toVerifyResult :: SatResult -> VerifyResultSource
Convert a sat result to a verify result by negating it.