MemSAT: checking axiomatic specifications of memory models
PLDI '10 Proceedings of the 2010 ACM SIGPLAN conference on Programming language design and implementation
Falling back on executable specifications
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
Monarch: model-based development of software architectures
MODELS'10 Proceedings of the 13th international conference on Model driven engineering languages and systems: Part II
Unifying execution of imperative and declarative code
Proceedings of the 33rd International Conference on Software Engineering
Relational reasoning via SMT solving
FM'11 Proceedings of the 17th international conference on Formal methods
Assessing the Kodkod model finder for resolving model inconsistencies
ECMFA'11 Proceedings of the 7th European conference on Modelling foundations and applications
Towards a notion of unsatisfiable and unrealizable cores for LTL
Science of Computer Programming
Automated repair of HTML generation errors in PHP applications using string constraint solving
Proceedings of the 34th International Conference on Software Engineering
Preventing arithmetic overflows in alloy
ABZ'12 Proceedings of the Third international conference on Abstract State Machines, Alloy, B, VDM, and Z
Extending alloy with partial instances
ABZ'12 Proceedings of the Third international conference on Abstract State Machines, Alloy, B, VDM, and Z
Proceedings of the 17th ACM SIGPLAN international conference on Functional programming
Modeling and solving technical product configuration problems
Artificial Intelligence for Engineering Design, Analysis and Manufacturing
Proceedings of the 2013 International Symposium on Software Testing and Analysis
Hi-index | 0.00 |
Relational logic is an attractive candidate for a software description language, because both the design and implementation of software often involve reasoning about relational structures: organizational hierarchies in the problem domain, architectural configurations in the high level design, or graphs and linked lists in low level code. Until recently, however, frameworks for solving relational constraints have had limited applicability. Designed to analyze small, hand-crafted models of software systems, current frameworks perform poorly on specifications that are large or that have partially known solutions.This thesis presents an efficient constraint solver for relational logic, with recent applications to design analysis, code checking, test-case generation, and declarative configuration. The solver provides analyses for both satisfiable and unsatisfiable specifications—a finite model finder for the former and a minimal unsatisfiable core extractor for the latter. It works by translating a relational problem to a boolean satisfiability problem; applying an off-the-shelf SAT solver to the resulting formula; and converting the SAT solver's output back to the relational domain. The idea of solving relational problems by reduction to SAT is not new. The core contributions of this work, instead, are new techniques for expanding the capacity and applicability of SAT-based engines. They include: a new interface to SAT that extends relational logic with a mechanism for specifying partial solutions; a new translation algorithm based on sparse matrices and auto-compacting circuits; a new symmetry detection technique that works in the presence of partial solutions; and a new core extraction algorithm that recycles inferences made at the boolean level to speed up core minimization at the specification level. (Copies available exclusively from MIT Libraries, Rm. 14-0551, Cambridge, MA 02139-4307. Ph. 617-253-5668; Fax 617-253-1690.)