🤖 AI Summary
This paper addresses the semantic gap between programming and specification in formal verification by extending the {log} constraint logic programming language into an integrated verification framework that unifies program execution and automated proof. Methodologically, it constructs an executable state-machine model grounded in set theory and binary relations, enabling unified support for modeling, scenario execution, verification condition generation, SMT-based automated proving, and test-case generation. Crucially, it achieves, for the first time, dual semantics—where the same set-theoretic code serves both as an executable program and a formal specification. Contributions include: (1) eliminating the semantic divide between programming and verification; and (2) establishing an end-to-end verification environment that achieves fully automated security verification and high-coverage test generation on multiple industrial-scale protocols, with verification efficiency substantially surpassing traditional approaches.
📝 Abstract
{log} (read 'setlog') was born as a Constraint Logic Programming (CLP) language where sets and binary relations are first-class citizens, thus fostering set programming. Internally, {log} is a constraint satisfiability solver implementing decision procedures for several fragments of set theory. Hence, {log} can be used as a declarative, set, logic programming language and as an automated theorem prover for set theory. Over time {log} has been extended with some components integrated to the satisfiability solver thus providing a formal verification environment. In this paper we make a comprehensive presentation of this environment which includes a language for the description of state machines based on set theory, an interactive environment for the execution of functional scenarios over state machines, a generator of verification conditions for state machines, automated verification of state machines, and test case generation. State machines are both, programs and specifications; exactly the same code works as a program and as its specification. In this way, with a few additions, a CLP language turned into a seamlessly integrated programming and automated proof system.