Kodkod: A Relational Constraint Solver
E. Torlak
Kodkod is an efficient SAT-based analysis engine for first order logic with relations, transitive closure, and partial instances. The current prototype, which includes a finite model finder and a minimal unsatisfiable core extractor, is being used as a backend to the Karun, Forge, and Miniatur code checkers, a course scheduler, the Alloy Analyzer 4.0, a network configuration tool, etc.
Knowledge Flow Analysis for Security Protocols
E. Torlak, M. van Dijk, B. Gassend, D. Jackson and S. Devadas
We have developed a new approach to formulating and checking cryptographic protocols. It does not enable any new form of analysis. Instead, it makes verification more accessible to the designers of protocols. Its key contribution is a new characterization of these protocols that is both closer to how designers conceive them, and amenable to a direct encoding in standard first-order logic. This more direct encoding allows existing tools to be applied as black boxes without modification; it requires no tweaking of parameters or issuing of special directives by the user. Moreover, because the semantic gap between informal descriptions of protocols and their formalization is smaller, there are fewer opportunities for errors to creep in.
Subtypes for Relational Constraint Languages
J. Edwards, D. Jackson, E. Torlak and V. Yeung
Type systems have been studied extensively for programming languages, but not for specification languages. We have developed a type system for the increasingly important class of specification languages based on first-order constraints over relational data models, which have applications in software modelling, architectural description, web ontologies, access control, etc.
The Alloy Modelling Language and Analyzer
D. Jackson, S. Khurshid, I. Shlyakhter, R. Seater, M. Taghdiri, M. Vaziri, E. Torlak, V. Yeung and F. Chang
Alloy is a software modelling language that can describe complex structures and their evolution, and which is amenable to fully automatic analysis. The Alloy Analyzer is a tool for analyzing models written in Alloy. It can generate instances of invariants, simulate the execution of operations (even those defined implicitly), and can check user-specified properties of a model. Alloy and its analyzer have been used to find errors in several published systems, applied by several companies to internal products, and taught in a number of university courses. Alloy has also been used for generating structurally complex test cases from declarative specifications, for checking correctness of heapmanipulating Java procedures, for runtime conformance checking of object-oriented code, and for establishing the exact formal properties of an algorithm to be proved with a theorem prover.