Abstract: Formal verification tools have advanced to the point where they are routinely used to verify complex hardware systems and protocols. Engineers designing complex subsystems, such as coherent caches and floating-point units, use formal verification to track down bugs that may only occur rarely, but with disastrous consequences when they do.
To date, most successful formal verification tools are based on a bit-level model of computation. Using powerful inference engines, such as Binary Decision Diagrams (BDDs) and Boolean satisfiability (SAT) checkers, symbolic model checkers and similar tools can analyze all possible behaviors of very large, finite-state systems.
For many hardware and software systems, we would like to go beyond bit-level models to handle systems that are truly infinite state, or that are better modeled as infinite-state systems. Examples include systems containing buffers of arbitrary size, and programs manipulating integer data. Historically, much of the effort in verifying such systems has involved automated theorem provers, requiring considerable guidance and expertise on the part of the user. Instead, we would like to devise approaches for these more powerful computational models that retain the desirable features of model checking, such as the high degree of automation and the ability to generate counterexamples.
We have developed UCLID, a prototype verifier for infinite-state systems. The UCLID modeling language extends that of SMV, a bit-level model checker, to include integer and function state variables, addition by constants, and relational operations. The underlying logic is quite expressive, but it still permits a decision procedure where we transform the formula into propositional logic and then use either BDDs or a SAT solver. We demonstrate UCLID's modeling and verification capabilities with such examples as out-of-order microprocessors, and directory-based cache coherency protocols.
![]() |
Maintainer | [ Home > Seminar ] |
Last modified: Tue Sep 6 09:27:17 EDT 2005 |