UCLID (pronounced "Euclid") is a tool for verifying models of computer systems. It started out primarily focused on infinite-state systems (i.e., systems that, in addition to Boolean state variables, have state variables that are integer-valued or functions from integers to integers or Booleans), but now is equipped with techniques to also reason about word-level descriptions of systems (those with finite-precision types). The key component of UCLID is a decision procedure for a decidable fragment of first-order logic, including uninterpreted functions and equality, integer linear arithmetic, finite-precision bit-vector arithmetic, and constrained lambda expressions (for modeling arrays, memories, etc.). The decision procedure operates by translating the input formula to an equi-satisfiable Boolean formula on which it invokes a Boolean satisfiability (SAT) solver.
Applications of UCLID include microprocessor verification, protocol analysis, analyzing software for security vulnerabilities, and verifying models of hybrid systems. The decision procedure can also be used as a stand-alone theorem prover, or within other first-order or higher-order logic theorem provers.
The UCLID project is funded through generous support from the Semiconductor Research Corporation (SRC contracts 1355.001 and 2045.001), the National Science Foundation (NSF grants CNS-0627734 and CCF-0613997), Microsoft Research, and Intel Corporation.