We present a transformational approach to program verification and software model checking
that uses three main ingredients: (i) Constraint Logic Programming (CLP), (ii) metaprogram-
ming and program specialization, and (iii) proof by transformation. (i) Constraints are used for
representing in a compact way (finite or infinite) sets of values or memory states, and logic is
used for expressing properties of program executions [2, 4, 5]. The least fixpoint semantics and
negation allow us to denote both the least models and the greatest models of programs, and thus
to reason about the (finite or infinite) behaviour of programs. (ii) Metaprogramming is used for
getting a verification technique which is parametric with respect to the programming language
in use. In particular, we introduce a CLP program I which defines the (meta)interpreter of
the programming language in which the program P to be verified is written. Then, in order to
gain efficiency, we remove this interpretation layer by specializing the interpreter I with respect
to the given program P [1, 6, 7]. The property φ that should be proved (or disproved) about
program P , is expressed through the CLP clauses that characterize the set of states in which φ
holds (or does not hold, respectively). (iii) Having derived a CLP program
[1]
Alberto Pettorossi,et al.
Verifying programs via iterated specialization
,
2013,
PEPM '13.
[2]
Alberto Pettorossi,et al.
Perfect Model Checking via Unfold/Fold Transformations
,
2000,
Computational Logic.
[3]
Ashutosh Gupta,et al.
HSF(C): A Software Verifier Based on Horn Clauses - (Competition Contribution)
,
2012,
TACAS.
[4]
Edmund M. Clarke,et al.
Model Checking
,
1999,
Handbook of Automated Reasoning.
[5]
Giorgio Delzanno,et al.
Model Checking in CLP
,
1999,
TACAS.
[6]
Thierry Massart,et al.
Infinite State Model Checking by Abstract Interpretation and Program Specialisation
,
1999,
LOPSTR.
[7]
Alberto Pettorossi,et al.
Generalization strategies for the verification of infinite state systems
,
2011,
Theory and Practice of Logic Programming.
[8]
John P. Gallagher,et al.
Analysis of Imperative Programs through Analysis of Constraint Logic Programs
,
1998,
SAS.
[9]
Laurent Fribourg,et al.
Constraint Logic Programming Applied to Model Checking
,
1999,
LOPSTR.