EN FR
EN FR


Section: Software

The CADP Toolbox

Participants : Iker Bellicot, Hubert Garavel [contact person] , Yann Genevois, Rémi Hérilier, Frédéric Lang, Radu Mateescu, Christine McKinty, Wendelin Serwe, Damien Thivolle.

We maintain and enhance Cadp (Construction and Analysis of Distributed Processes – formerly known as Cæsar /Aldébaran Development Package[9] , a toolbox for protocols and distributed systems engineering (see http://cadp.inria.fr ). In this toolbox, we develop and maintain the following tools:

  • Cæsar.adt  [3] is a compiler that translates Lotos abstract data types into C types and C functions. The translation involves pattern-matching compiling techniques and automatic recognition of usual types (integers, enumerations, tuples, etc.), which are implemented optimally.

  • Cæsar  [11] is a compiler that translates Lotos processes into either C code (for rapid prototyping and testing purposes) or finite graphs (for verification purpose). The translation is done using several intermediate steps, among which the construction of a Petri net extended with typed variables, data handling features, and atomic transitions.

  • Open/Cæsar  [4] is a generic software environment for developing tools that explore graphs on the fly (for instance, simulation, verification, and test generation tools). Such tools can be developed independently of any particular high level language. In this respect, Open/Cæsar plays a central role in Cadp by connecting language-oriented tools with model-oriented tools. Open/Cæsar consists of a set of 16 code libraries with their programming interfaces, such as:

    • Caesar_Graph , which provides the programming interface for graph exploration,

    • Caesar_Hash , which contains several hash functions,

    • Caesar_Solve , which resolves boolean equation systems on the fly,

    • Caesar_Stack , which implements stacks for depth-first search exploration, and

    • Caesar_Table , which handles tables of states, transitions, labels, etc.

    A number of tools have been developed within the Open/Cæsar environment, among which:

    • Bisimulator , which checks bisimulation equivalences and preorders,

    • Cunctator , which performs on-the-fly steady-state simulation of continuous-time Markov chains,

    • Determinator , which eliminates stochastic nondeterminism in normal, probabilistic, or stochastic systems,

    • Distributor , which generates the graph of reachable states using several machines,

    • Evaluator , which evaluates regular alternation-free μ-calculus formulas,

    • Executor , which performs random execution,

    • Exhibitor , which searches for execution sequences matching a given regular expression,

    • Generator , which constructs the graph of reachable states,

    • Projector , which computes abstractions of communicating systems,

    • Reductor , which constructs and minimizes the graph of reachable states modulo various equivalence relations,

    • Simulator , Xsimulator , and Ocis , which allow interactive simulation, and

    • Terminator , which searches for deadlock states.

  • Bcg (Binary Coded Graphs) is both a file format for storing very large graphs on disk (using efficient compression techniques) and a software environment for handling this format. Bcg also plays a key role in Cadp as many tools rely on this format for their inputs/outputs. The Bcg environment consists of various libraries with their programming interfaces, and of several tools, such as:

    • Bcg_Draw , which builds a two-dimensional view of a graph,

    • Bcg_Edit , which allows to modify interactively the graph layout produced by Bcg_Draw ,

    • Bcg_Graph , which generates various forms of practically useful graphs,

    • Bcg_Info , which displays various statistical information about a graph,

    • Bcg_Io , which performs conversions between Bcg and many other graph formats,

    • Bcg_Labels , which hides and/or renames (using regular expressions) the transition labels of a graph,

    • Bcg_Merge , which gathers graph fragments obtained from distributed graph construction,

    • Bcg_Min , which minimizes a graph modulo strong or branching equivalences (and can also deal with probabilistic and stochastic systems),

    • Bcg_Steady , which performs steady-state numerical analysis of (extended) continuous-time Markov chains,

    • Bcg_Transient , which performs transient numerical analysis of (extended) continuous-time Markov chains, and

    • Xtl (eXecutable Temporal Language), which is a high level, functional language for programming exploration algorithms on Bcg graphs. Xtl provides primitives to handle states, transitions, labels, successor and predecessor functions, etc.

      For instance, one can define recursive functions on sets of states, which allow to specify in Xtl evaluation and diagnostic generation fixed point algorithms for usual temporal logics (such as Hml   [60] , Ctl   [53] , Actl   [55] , etc.).

  • The connection between explicit models (such as Bcg graphs) and implicit models (explored on the fly) is ensured by Open/Cæsar -compliant compilers, e.g.:

    • Bcg_Open , for models represented as Bcg graphs,

    • Cæsar.open , for models expressed as Lotos descriptions,

    • Exp.open , for models expressed as communicating automata,

    • Fsp.Open , for models expressed as Fsp [66] descriptions,

    • Lnt.Open , for models expressed as Lotos NT descriptions, and

    • Seq.open , for models represented as sets of execution trace.

The Cadp toolbox also includes Tgv (Test Generation based on Verification), developed by the Verimag laboratory (Grenoble) and the Vertecs project team at Inria Rennes.

The Cadp tools are well-integrated and can be accessed easily using either the Eucalyptus graphical interface or the Svl  [6] scripting language. Both Eucalyptus and Svl provide users with an easy and uniform access to the Cadp tools by performing file format conversions automatically whenever needed and by supplying appropriate command-line options as the tools are invoked.