The following is a partial list of state-of-the-art tools that
implement the techniques covered in the course. It is designed to
serve as inspiration for the kinds of tools you may want to use or
build in the course project. Some of them will also be
featured in the homework assignments.
SAT solving
SMT solving
Finite model finding
- Kodkod and Alloy (relational logic)
- Nitrox (higher-order logic)
- IDP (first-order logic with inductive definitions)
- MACE4 (first-order logic)
Verification
- Dafny (an imperative and functional programming language with a verifier)
- Boogie (an intermediate verification language—great for building other tools)
- VCC (a verifier for concurrent C programs)
- Leon (a verifier and synthesizer for Scala)
Bounded verification
- CBMC (a bounded model checker for C)
- Rubicon (a bounded verifier for Ruby)
- TACO (a bounded verifier for Java)
Symbolic execution
Synthesis and more
- SKETCH (an imperative language for synthesis)
- Rosette (a solver-aided host language)
- Kaplan (declarative execution for Scala)
- Squander (declarative execution for Java)
- BugAssist (fault localization for C)