Automatic Equivalence Checking of Programs with Uninterpreted Functions and Integer Arithmetic

Nuno P. Lopes and José Monteiro

 

Abstract:

Proving equivalence of programs has several important applications, including algorithm recognition, regression checking, compiler optimization verification and validation, and information flow checking.
Despite being a topic with so many important applications, program equivalence checking has seen little advances over the past decades due to its inherent (high) complexity.
In this paper, we propose, to the best of our knowledge, the first semi-algorithm for the automatic verification of partial equivalence of two programs over the combined theory of uninterpreted function symbols and integer arithmetic (UF+IA). The proposed algorithm supports, in particular, programs with nested loops.
The crux of the technique is a transformation of uninterpreted functions (UFs) applications into integer polynomials, which enables the precise summarization of loops with UF applications using recurrences. The equivalence checking algorithm then proceeds on loop-free, integer only programs.
We implemented the proposed technique in CORK, a tool that automatically verifies the correctness of compiler optimizations, and we show that it can prove more optimizations correct than state-of-the-art techniques.

 

Published:

N. P. Lopes and J. Monteiro. Automatic Equivalence Checking of Programs with Uninterpreted Functions and Integer Arithmetic. International Journal on Software Tools for Technology Transfer, 18(4):359-374, Aug. 2016.

 

Download:

 

Bibtex:

@article{cork-sttt16,
  title =	{Automatic Equivalence Checking of Programs with Uninterpreted Functions and Integer Arithmetic},
  author =	{Nuno P. Lopes and Jos\'{e} Monteiro},
  journal =	{International Journal on Software Tools for Technology Transfer},
  volume =	{18},
  number =	{4},
  publisher =	{Springer Berlin Heidelberg},
  pages =	{359--374},
  month =	aug,
  year =	2016
}

 

Copyright notice:

The final publication is available at link.springer.com.

 

<-- Return