Regression verification of unbalanced recursive functions with multiple calls (long version)

07/28/2022
by   Chaked R. J. Sayedoff, et al.
0

Given two programs p_1 and p_2, typically two versions of the same program, the goal of regression verification is to mark pairs of functions from p_1 and p_2 that are equivalent, given a definition of equivalence. The most common definition is that of partial equivalence, namely that the two functions emit the same output if they are fed with the same input and they both terminate. The strategy used by the Regression Verification Tool (RVT) is to progress bottom up on the call graphs of P_1,P_2, abstract those functions that were already proven to be equivalent with uninterpreted functions, turn loops into recursion, and abstract the recursive calls also with uninterpreted functions. This enables it to create verification conditions in the form of small programs that are loop- and recursion-free. This method works well for recursive functions as long as they are in sync, and typically fails otherwise. In this work we study the problem of proving equivalence when the two recursive functions are not in sync. Effectively we extend previous work that studied this problem for functions with a single recursive call site, to the general case. We also introduce a method for detecting automatically the unrolling that is necessary for making two recursive functions synchronize, when possible. We show examples of pairs of functions with multiple recursive calls that can now be proven equivalent with our method, but cannot be proven equivalent with any other automated verification system.

READ FULL TEXT

page 1

page 2

page 3

page 4

research
11/01/2018

Decidable Verification of Uninterpreted Programs

verifying uninterpreted programs---programs that work over arbitrary da...
research
07/17/2019

Defining Functions on Equivalence Classes

A quotient construction defines an abstract type from a concrete type, u...
research
02/20/2023

Tail recursion transformation for invertible functions

Tail recursive functions allow for a wider range of optimisations than g...
research
01/21/2018

Self-composition to Prove Relational Properties in Annotated C Program

Deductive verification provides a powerful tool to show functional prope...
research
08/14/2019

Pointers in Recursion: Exploring the Tropics

We translate the usual class of partial/primitive recursive functions to...
research
12/13/2021

Geometric Path Enumeration for Equivalence Verification of Neural Networks

As neural networks (NNs) are increasingly introduced into safety-critica...
research
02/19/2021

Tail Modulo Cons

OCaml function calls consume space on the system stack. Operating system...

Please sign up or login with your details

Forgot password? Click here to reset