Introduction |
NBAC is a verification/slicing tool developped during my PhD thesis at the laboratory VERIMAG, part of IMAG federation in Grenoble. Its developpement has been since I got my position at IRISA.
The tool analyses synchronous and deterministic reactive systems containing combination of Boolean and numerical variables and continuously interacting with an external environment. Its input format is directly inspired by the low-level semantics of the LUSTRE dataflow synchronous language. Notice that asynchronous and/or non-deterministic systems can be compiled in this model. The following connections are shown below.
The kind of analyses performed by NBAC are
together with a necessary condition on states and inputs to stay in this set during an execution, either a verdict to a verification problem. The returned set of states and necessary condition is actually given by an explicit control structure, where locations are labeled by (disjoint) sets of states and transitions between locations are labeled by necessary conditions.
The tool has been developped mainly in OCaml. For representing Boolean functions and guarded functions, it uses the BDD library Cudd, an extension to it called Cuddaux,which are both interfaced to OCaml with MLCuddIDL. The tool uses now the APRON for the numerical abstrac domain, instead of the older version of the convex polyhedra library NewPolka
It can be downloaded in binary format for Linux and Solaris systems. A tutorial is available, as well as a user manual.
The tool is founded on the theory of abstract interpretation [2][3][4], which allows to overcome the undecidability of the reachability/coreachability problem for the class of program treated by NBAC. Sets of states are represented in an approximate way by abtract values belonging to an abstract domain, and (fixpoint) computations are performed on this abstract domain. This leads to conservative results: if a state is shown unreachable (resp. not coreachable), then it is for sure. That's all that can be said.
The "basic" abstract domain we use is the direct product of the Boolean lattice and the convex polyhedra lattice. More practically a set of states is represented by the conjunction of a BDD (for the Boolean variables of the program) and a convex polyhedra (for its numerical variables).1
The originality of NBAC is summarized below:
Details can be found in [10][7][9][8].
Introduction |