Section: Software
Timbuk: a tree automata library
Participants : Thomas Genet, Benoît Boyer.
Timbuk [53] is a library of Ocaml functions for manipulating tree automata. More precisely Timbuk deals with finite bottom-up tree automata (deterministic or not). This library provides the classical operations over tree automata, viz , the boolean operations (intersection, union, complement), emptiness and inclusion checking, renaming, determinisation, transition normalisation, and a mechanism for building the tree automaton recognizing the set of irreducible terms for a left-linear TRS. This library also implements some more specific algorithms that we use for verification of cryptographic protocols and Java bytecode programs:
-
exact computation of reachable terms for most of the known decidable classes of term rewriting systems,
-
approximation of reachable terms and normal forms for any term rewriting system,
-
matching in tree automata,
-
the checker for approximations of reachable terms extracted from the Coq specification [44] .
This software is distributed under the Gnu Library General Public License and is freely available at http://www.irisa.fr/lande/genet/timbuk/ . Timbuk has been registered at the APP with number IDDN.FR.001.20005.00.S.P.2001.000.10600.
Timbuk is now in version 3.0 and provides tree automata completion with equational abstractions as proposed in 6.2 .
Timbuk is used by other research groups to achieve cryptographic protocol verification. Frédéric Oehl and David Sinclair of Dublin University use it in an approach combining a proof assistant (Isabelle/HOL) and approximations (done with Timbuk) [74] , [73] . Pierre-Cyrille Heam, Yohan Boichut and Olga Kouchnarenko of the Cassis Inria project use Timbuk as a verification back-end [42] for AVISPA [35] . AVISPA is a tool for verifying cryptographic protocols defined in high level protocol specification format. More recently, Timbuk was also used at LIAFA by Gael Patin, Mihaela Sighireanu and Tayssir Touili to design the SPADE tool whose purpose is to model-check multi-threaded and recursive programs.