Verification-Preserving Inlining in Automatic Separation Logic Verifiers (extended version)

08/22/2022
by   Thibault Dardinier, et al.
0

Bounded verification has proved useful to detect bugs and to increase confidence in the correctness of a program. In contrast to unbounded verification, reasoning about calls via (bounded) inlining and about loops via (bounded) unrolling does not require method specifications and loop invariants and, therefore, reduces the annotation overhead to the bare minimum, namely specifications of the properties to be verified. For verifiers based on traditional program logics, verification via inlining (and unrolling) is verification-preserving: successful unbounded verification of a program w.r.t. some annotation implies successful verification of the inlined program. That is, any error detected in the inlined program reveals a true error in the original program. However, this essential property might not hold for automatic separation logic verifiers such as Caper, GRASShopper, RefinedC, Steel, VeriFast, and verifiers based on Viper. In this setting, inlining generally changes the resources owned by method executions, which may affect automatic proof search algorithms and introduce spurious errors. In this paper, we present the first technique for verification-preserving inlining in automatic separation logic verifiers. We identify a semantic condition on programs and prove in Isabelle/HOL that it ensures verification-preserving inlining for state-of-the-art automatic separation logic verifiers. We also prove a dual result: successful verification of the inlined program ensures that there are method and loop annotations that enable the verification of the original program for bounded executions. To check our semantic condition automatically, we present two approximations that can be checked syntactically and with a program verifier, respectively. We implemented these checks in Viper and demonstrate that they are effective for non-trivial examples from different verifiers.

READ FULL TEXT
research
08/15/2022

Exact Separation Logic

Over-approximating (OX) program logics, such as separation logic, are us...
research
04/15/2019

Specifying Concurrent Programs in Separation Logic: Morphisms and Simulations

In addition to pre- and postconditions, program specifications in recent...
research
05/29/2021

Formally Validating a Practical Verification Condition Generator (extended version)

A program verifier produces reliable results only if both the logic used...
research
04/13/2018

CUBA: Interprocedural Context-UnBounded Analysis of Concurrent Programs (Extended Manuscript)

A classical result by Ramalingam about synchronization-sensitive interpr...
research
05/24/2022

Properties of the Hebrew Calendar

We describe an ACL2 program that implements the Hebrew calendar and the ...
research
01/29/2019

Abstract I/O Specification

We recently proposed an approach for the specification and modular forma...
research
07/08/2022

Flux: Liquid Types for Rust

We introduce Flux, which shows how logical refinements can work hand in ...

Please sign up or login with your details

Forgot password? Click here to reset