Tag. separation-logic
References (47)
Verifying Isolation Levels of Database Implementations for Free Using Separation Logic mathiasen-2026-verifying
Code-Specify-Test-Debug-Prove: Flexibly Integrating Separation Logic Specification into Conventional Workflows aamer-2026-code
Modular Verification of Differential Privacy in Probabilistic Higher-Order Separation Logic haselwarter-2026-modular
Iris-WasmFX: Modular Reasoning for Wasm Stack Switching legoupil-2026-iris
Contextual Refinement of Higher-Order Concurrent Probabilistic Programs li-2026-contextual
Cerisier: A Program Logic for Attestation in a Capability Machine rousseau-2026-cerisier
Mixtris: Mechanised Higher-Order Separation Logic for Mixed Choice Multiparty Message Passing hinrichsen-2026-mixtris
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
Modular Specifications and Implementations of Random Samplers in Higher-Order Separation Logic marionneau-2026-modular
Verifying Wait-Freedom for Concurrent Higher-Order Programs namakonov-2026-verifying
Reasoning about Weak Isolation Levels in Separation Logic alnormathiasen-2025-reasoning
Modular Reasoning about Error Bounds for Concurrent Probabilistic Programs li-2025-modular
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.
Fulminate: Testing CN Separation-Logic Specifications in C banerjee-2025-fulminate
The Nextgen Modality: A Modality for Non-Frame-Preserving Updates in Separation Logic vindum-2025-the
Separated and Shared Effects in Higher-Order Languages amorim_hsu_independent
Idempotent Resources in Separation Logic: The Heart of core in Iris gratzer-2025-idempotent
Tachis: Higher-Order Separation Logic with Credits for Expected Costs haselwarter-2024-tachis
Error Credits: Resourceful Reasoning about Error Bounds for Higher-Order Probabilistic Programs aguirre-2024-error
Cerise: Program Verification on a Capability Machine in the Presence of Untrusted Code georges-2024-cerise
Trillium: Higher-Order Concurrent and Distributed Separation Logic for Intensional Refinement timany-2024-trillium
A denotationally-based program logic for higher-order store aagaard-2023-a
Grove: A Separation-Logic Library for Verifying Distributed Systems sharmaGroveSeparationLogicLibrary2023
Leaf: Modularity for Temporary Sharing in Separation Logic hance-2023-leaf
Verifying Reliable Network Components in a Distributed Separation Logic with Dependent Separation Protocols gondelman-2023-verifying
Lilac: A Modal Separation Logic for Conditional Probability li-2023-lilac
CN: Verifying Systems C Code with Separation-Logic Refinement Types pulte-2023-cn
Modular Verification of State-Based CRDTs in Separation Logic nieto-2023-modular
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.