Reference. A Higher-Order Logic for Concurrent Termination-Preserving Refinement
Cite
Cited by (9)
Lawyer: Modular Obligations-Based Liveness Reasoning in Higher-Order Impredicative Concurrent Separation Logic namakonov-2026-lawyer
Relational Separation Logic for Compiler Verification leroy_pottier_relsep_2026
Tail Modulo Cons, OCaml, and Relational Separation Logic allain_etal_tmc_2025
Common functional languages incentivize tail-recursive functions, as opposed to general recursive functions that consume stack space and may not scale to large inputs. This distinction occasionally requires writing functions in a tail-recursive style that may be more complex and slower than the natural, non-tail-recursive definition.
This work describes our implementation of the tail modulo constructor (TMC) transformation in the OCaml compiler, an optimization that provides stack-efficiency for a larger class of functions — tail-recursive modulo constructors — which includes in particular the natural definition of List.map and many similar recursive data-constructing functions.
We prove the correctness of this program transformation in a simplified setting — a small untyped calculus — that captures the salient aspects of the OCaml implementation. Our proof is mechanized in the Coq proof assistant, using the Iris base logic. An independent contribution of our work is an extension of the Simuliris approach to define simulation relations that support different calling conventions. To our knowledge, this is the first use of Simuliris to prove the correctness of a compiler transformation.
A Logical Approach to Type Soundness timany-2024-a
Trillium: Higher-Order Concurrent and Distributed Separation Logic for Intensional Refinement timany-2024-trillium
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.
Transfinite Iris: resolving an existential dilemma of step-indexed separation logic spies-2021-transfinitex
ReLoC Reloaded: A Mechanized Relational Logic for Fine-Grained Concurrency and Logical Atomicity frumin_krebbers_birkedal_reloc_2021
Iris from the ground up: A modular foundation for higher-order concurrent separation logic jung_etal_iris_ground_up_2018
Cites 45 works (7 here)
With notes (7)
Interactive proofs in higher-order concurrent separation logic krebbers-2017-interactive
Higher-order ghost state jung_higher-order_2016
Iris: Monoids and Invariants as an Orthogonal Basis for Concurrent Reasoning jung-2015-iris
Session Types as Intuitionistic Linear Propositions caires-2010-session
Relational separation logic yang_relational_separation_2007
Simple relational correctness proofs for static analyses and program transformations benton_relational_2004
BI as an assertion language for mutable data structures ishtiaq_ohearn_bi_2001
External (38)
- A relational model of types-and-effects in higher-order concurrent separation logic (2017)
- Website with Coq development (2016)
- A program logic for concurrent objects under fair scheduling (2016)
- Modular termination verification for non-blocking concurrency (2016)
- Transfinite step-indexing: Decoupling concrete and logical steps (2016)
- Design and implementation of concurrent C0 (2016)
- A taste of categorical logic — tutorial notes (2014)
- TaDA: A logic for time and data abstraction (2014)
- Rely-guarantee-based simulation for compositional verification of concurrent program transformations (2014)
- Compositional verification of termination-preserving refinement of concurrent programs (2014)
- Communicating state transition systems for fine-grained concurrent resources (2014)
- Impredicative concurrent abstract predicates (2014)
- Propositions as sessions (2014)
- Step-indexed relational reasoning for countable nondeterminism (2013)
- Behavioral polymorphism and parametricity in session-based communication (2013)
- Everything you always wanted to know about synchronization but were afraid to ask (2013)
- Views: Compositional reasoning for concurrent programs (2013)
- Quantitative reasoning for proving lock-freedom (2013)
- Higher-order processes, functions, and sessions: A monadic integration (2013)
- Unifying refinement and Hoare-style reasoning in a logic for higher-order concurrency (2013)
- Linear logical relations for session-based concurrency (2012)
- The category-theoretic solution of recursive metric-space equations (2010)
- Concurrent abstract predicates (2010)
- Linear type theory for asynchronous session types (2010)
- Local rely-guarantee reasoning (2009)
- Resources, concurrency, and local reasoning (2007)
- A marriage of rely/guarantee and separation logic (2007)
- Language primitives and type discipline for structured communication-based programming revisited: Two systems for higher-order session communication (2007)
- Variables as resource for shared-memory programs: Semantics and soundness (2006)
- The java.util.concurrent synchronizer framework (2005)
- An indexed model of recursive types for foundational proof-carrying code (2001)
- Queue locks on cache coherent multiprocessors (1994)
- Building fifo and priority-queueing spin locks from atomic swap (1993)
- Types for dyadic interaction (1993)
- Algorithms for scalable synchronization on shared-memory multiprocessors (1991)
- Solving reflexive domain equations in a category of complete metric spaces (1989)
- Tentative steps toward a development method for interfering programs (1983)
- Impartiality, justice and fairness: The ethics of concurrent termination (1981)