An Evidential Tool Bus
Theorem provers, model checkers, static analyzers, test generators...all of these and many other kinds of formal methods tools can contribute to the analysis and development of computer systems and software. It is already quite common to use several kinds of tools in a loose combination: for example, we might use static analysis and then model checking to help find and eliminate design flaws prior to undertaking formal verification with a theorem prover. And some modern tools, such as test generators, are built using model checkers, predicate abstractors, decision procedures and constraint solvers as components in tight combination.
But we can foresee a different kind of combination where many tools and methods are used in ad hoc combination within a single analysis. For example, static analysis might yield invariants that enable decision procedures to build a predicate abstraction whose reachable states are calculated as a BDD and then concretized to yield a strong invariant for the original system; the invariant then enables properties of the original system to be verified by highly automated theorem proving.
This sort of combination clearly requires an integrating platform – a tool bus – to connect the various tools together; but the capabilities required go beyond those of platforms such as Eclipse. The entities exchanged among clients of the bus – proofs, counterexamples, specifications, theoreems, counterexamples, abstractions – have logical content, and the overall purpose of the bus is to gather and integrate evidence for verification or refutation.
In this paper I propose requirements for such an “evidential tool bus,” and sketch a possible architecture.