Reference. Simple relational correctness proofs for static analyses and program transformations
Cite
Cited by (5)
Relational Separation Logic for Compiler Verification leroy_pottier_relsep_2026
Simuliris: A Separation Logic Framework for Verifying Concurrent Program Optimizations gaher_etal_simuliris_2022
Today’s compilers employ a variety of non-trivial optimizations to achieve good performance. One key trick compilers use to justify transformations of concurrent programs is to assume that the source program has no data races: if it does, they cause the program to have undefined behavior (UB) and give the compiler free rein. However, verifying correctness of optimizations that exploit this assumption is a non-trivial problem. In particular, prior work either has not proven that such optimizations preserve program termination (particularly non-obvious when considering optimizations that move instructions out of loop bodies), or has treated all synchronization operations as external functions (losing the ability to reorder instructions around them).
In this work we present Simuliris, the first simulation technique to establish termination preservation (under a fair scheduler) for a range of concurrent program transformations that exploit UB in the source language. Simuliris is based on the idea of using ownership to reason modularly about the assumptions the compiler makes about programs with well-defined behavior. This brings the benefits of concurrent separation logics to the space of verifying program transformations: we can combine powerful reasoning techniques such as framing and coinduction to perform thread-local proofs of non-trivial concurrent program optimizations. Simuliris is built on a (non-step-indexed) variant of the Coq-based Iris framework, and is thus not tied to a particular language. In addition to demonstrating the effectiveness of Simuliris on standard compiler optimizations involving data race UB, we also instantiate it with Jung et al.’s Stacked Borrows semantics for Rust and generalize their proofs of interesting type-based aliasing optimizations to account for concurrency.
ReLoC Reloaded: A Mechanized Relational Logic for Fine-Grained Concurrency and Logical Atomicity frumin_krebbers_birkedal_reloc_2021
A Higher-Order Logic for Concurrent Termination-Preserving Refinement tassarotti_jung_harper_2017
Relational separation logic yang_relational_separation_2007
Cites 33 works (1 here)
With notes (1)
Certification of Compiler Optimizations Using Kleene Algebra with Tests kozen2000certification
External (32)
- Automatically proving the correctness of compiler optimizations (2003)
- Verification of the Schorr-Waite graph marking algorithm by refinement (2003)
- VOC: A methodology for the translation validation for optimizing compilers (2003)
- Secure information flow and pointer confinement in a Java-like language (2002)
- Proving correctness of compiler optimizations by temporal logic (2002)
- A PER model of secure information flow in sequential programs (2001)
- Set constraints for destructive array update optimization (2001)
- Automatic useless-code detection and elimination for HOT functional programs (2000)
- Type-based useless variable elimination (2000)
- Translation validation for an optimizing compiler (2000)
- A core calculus of dependency (1999)
- Monads, effects and transformations (1999)
- Useless-code Detection and Elimination for PCF with Algebraic Datatypes (1999)
- Credible compilation with pointers (1999)
- Constraint systems for useless variable elimination (1999)
- Secure information flow in a multi-threaded imperative language (1998)
- Lightweight closure conversion (1997)
- Type specialization for the lambda calculus (1996)
- Relational properties of domains (1996)
- A sound type system for secure flow analysis (1996)
- Subtyping with singleton types (1995)
- Formal parametric polymorphism (1993)
- Specifying the correctness of binding-time analysis (1993)
- The Formal Semantics of Programming Languages (1993)
- Binding time analysis: A new PERspective (1991)
- A PER model of polymorphism and recursive types (1990)
- Compilers: Principles, Techniques and Tools (1986)
- Program transformations in a denotational setting (1985)
- Program slicing (1984)
- Flow Analysis of Computer Programs (1977)
- A unified approach to global program optimization (1973)
- An axiomatic basis for computer programming (1969)