Predicate Pairing with Abstraction for Relational Verification

  title={Predicate Pairing with Abstraction for Relational Verification},
  author={Emanuele De Angelis and Fabio Fioravanti and Alberto Pettorossi and Maurizio Proietti},
Relational verification is a technique that aims at proving properties that relate two different program fragments, or two different program runs. It has been shown that constrained Horn clauses (CHCs) can effectively be used for relational verification by applying a CHC transformation, called Predicate Pairing, which allows the CHC solver to infer relations among arguments of different predicates. In this paper we study how the effects of the Predicate Pairing transformation can be enhanced by… 
Analysis and Transformation of Constrained Horn Clauses for Program Verification
Analysis and transformation techniques that originate in the field of constraint logic programming (CLP) to the problem of verifying software systems are surveyed and static analysis techniques for CHCs that may be used for inferring relevant program properties, such as loop invariants are described.
Semantic program alignment for equivalence checking
A robust semantics-driven technique for program equivalence checking is introduced and it is demonstrated that the algorithm is applicable to challenging equivalence problems beyond the scope of existing techniques.


Relational Verification Through Horn Clause Transformation
Through an experimental evaluation, it is shown that in many cases CHC solvers are able to prove the satisfiability (or the unsatisfiability) of sets of clauses obtained by applying the transformations proposed, whereas the samesolvers are unable to perform those proofs when given as input the original, untransformed sets of CHCs.
Predicate Pairing for program verification
A transformation technique, called Predicate Pairing, is introduced, which is able, in many interesting cases, to transform a set of clauses into an equisatisfiable set whose satisfiability can be proved by finding an 𝓐-definable model, and hence can be effectively verified by a state-of-the-art CHC solver.
Simple relational correctness proofs for static analyses and program transformations
We show how some classical static analyses for imperative programs, and the optimizing transformations which they enable, may be expressed and proved correct using elementary logical and
Relational Verification Using Product Programs
This work provides a general notion of product program that supports a direct reduction of relational verification to standard verification, and illustrates the benefits of the method with selected examples, including non-interference, standard loop optimizations, and a state-of-the-art optimization for incremental computation.
VeriMAP: A Tool for Verifying Programs through Transformations
Experimental results show that VeriMAP is competitive with respect to state-of-the-art tools for program verification.
Program verification via iterated specialization
Proving correctness of imperative programs by linearizing constrained Horn clauses
A method for verifying the correctness of imperative programs which is based on the automated transformation of their specifications, and it is shown that several specifications that could not be proved valid by LA-solving methods, can be provedvalid after linearization.
Semantics-based generation of verification conditions by program specialization
The method is parametric with respect to the semantics of the imperative programming language, as it specializes, by using unfold/fold transformation rules, a Horn clause interpreter that encodes that semantics.
A Rule-based Verification Strategy for Array Manipulating Programs
A method for verifying properties of imperative programs that manipulate integer arrays by encoding the negation of the property of an imperative program prog as a predicate incorrect defined by a CLP program P, and showing that the property holds by proving that incorrect is not a consequence of P.