Reference. A Denotational Approach to Release/Acquire Concurrency
We present a compositional denotational semantics for a functional language with first-class parallel composition and shared-memory operations whose operational semantics follows the Release/Acquire weak memory model (RA). The semantics is formulated in Moggi’s monadic approach, and is based on Brookes-style traces. To do so we adapt Brookes’s traces to Kang et al.’s view-based machine for RA, and supplement Brookes’s mumble and stutter closure operations with additional operations, specific to RA. The latter provides a more nuanced understanding of traces that uncouples them from operational interrupted executions. We show that our denotational semantics is adequate and use it to validate various program transformations of interest. This is the first work to put weak memory models on the same footing as many other programming effects in Moggi’s standard monadic approach.
Cite
Cited by (4)
An Equational Axiomatization of Dynamic Threads via Algebraic Effects: Presheaves on Finite Relations, Labelled Posets, and Parameterized Algebraic Theories kammar-2026-an
We use the theory of algebraic effects to give a complete equational axiomatization for dynamic threads. Our method is based on parameterized algebraic theories, which give a concrete syntax for strong monads on functor categories, and are a convenient framework for names and binding. Our programs are built from the key primitives ‘fork’ and ‘wait’. ‘Fork’ creates a child thread and passes its name (thread ID) to the parent thread. ‘Wait’ allows us to wait for given child threads to finish. We provide a parameterized algebraic theory built from fork and wait, together with basic atomic actions and laws such as associativity of ‘fork’. Our equational axiomatization is complete in two senses. First, for closed expressions, it completely captures equality of labelled posets (pomsets), an established model of concurrency: model complete. Second, any two open expressions are provably equal if they are equal under all closing substitutions: syntactically complete. The benefit of algebraic effects is that the semantic analysis can focus on the algebraic operations of fork and wait. We then extend the analysis to a simple concurrent programming language by giving operational and denotational semantics. The denotational semantics is built using the methods of parameterized algebraic theories and we show that it is sound, adequate, and fully abstract at first order for labelled-poset observations.
A Brookes-Style Denotational Semantics for Release/Acquire Concurrency dvir-2025-a
We present a compositional denotational semantics for a functional language with first-class parallel composition and shared-memory operations whose operational semantics follows the Release/Acquire weak memory model (RA). The semantics is formulated in Moggi’s monadic approach and is based on Brookes-style traces. To do so we adapt Brookes’s traces to view-based machine for RA by Kang et al., and supplement Brookes’s mumble and stutter closure operations with additional operations, specific to RA. The latter provides a more nuanced understanding of traces that uncouples them from operational interrupted executions. We show that our denotational semantics is adequate and use it to validate various program transformations of interest. This is the first work to put weak memory models on the same footing as many other programming effects in Moggi’s standard monadic approach.
Two-sorted algebraic decompositions of Brookes’s shared-state denotational semantics dvir-2025-two
We define a two sorted equational theory of algebraic effects that models concurrent shared state with preemptive interleaving, recovering Brookes’s seminal 1996 trace-based model precisely. The decomposition allows us to analyse Brookes’s model algebraically in terms of separate but interacting components. The multiple sorts partition terms into layers. We use two sorts: a “hold” sort for layers that disallow interleaving of environment memory accesses, analogous to holding a global lock on the memory; and a “cede” sort for the opposite. The algebraic signature comprises of independent interlocking components: two new operators that switch between these sorts, delimiting the atomic layers, thought of as acquiring and releasing the global lock; non-deterministic choice; and state-accessing operators. The axioms similarly divide cleanly: the delimiters behave as a closure pair; all operators are strict, and distribute over non-empty non-deterministic choice; and non-deterministic global state obeys Plotkin and Power’s presentation of global state. Our representation theorem expresses the free algebras over a two-sorted family of variables as sets of traces with suitable closure conditions. When the held sort has no variables, we recover Brookes’s trace semantics. We define several other single-and two-sorted theories to elucidate the connection to Brookes’s model via translation embeddings and equivalences.
The Denotational Semantics of SSA ghalayini-2024-the
Static single assignment form, or SSA, has been the dominant compiler intermediate representation for decades. In this paper, we give a type theory for a variant of SSA, including its equational theory, which are strong enough to validate a variety of control and data flow transformations. We also give a categorical semantics for SSA, and show that the type theory is sound and complete with respect to the categorical axiomatization. We demonstrate the utility of our model by exhibiting a variety of concrete models satisfying our axioms, including in particular a model of TSO weak memory. The correctness of the syntactic metatheory, as well as the completeness proof has been mechanized in the Lean proof assistant.
Cites 48 works (1 here)
With notes (1)
An Algebraic Theory for Shared-State Concurrency dvir-2022-an
External (47)
- A denotational approach to release/acquire concurrency (extended version) (2024)
- Weakest preconditions in fibrations (2022)
- Sequential reasoning for optimizing compilers under weak memory concurrency (2022)
- The leaky semicolon: compositional semantic dependencies for relaxed-memory concurrency (2022)
- Modular data-race-freedom guarantees in the promising semantics (2021)
- Pomsets with preconditions: a simple model of relaxed memory (2020)
- Modular Relaxed Dependencies in Weak Memory Concurrency (2020)
- Verification under causally consistent shared memory (2019)
- The next 700 relational program logics (2019)
- Compositional Verification of Compiler Optimisations on Relaxed Memory (2018)
- A Denotational Semantics for SPARC TSO (2018)
- A promising semantics for relaxed-memory concurrency (2017)
- Repairing sequential consistency in C/C++11 (2017)
- Simplifying ARM concurrency: multicopy-atomic axiomatic and operational models for ARMv8 (2017)
- Effect-dependent transformations for concurrent programs (2016)
- Validating optimizations of concurrent C/C++ programs (2016)
- Taming release-acquire consistency (2016)
- Explaining Relaxed Memory Models with Program Transformations (2016)
- Formalizing and Checking Thread Refinement for Data-Race-Free Execution Models (2016)
- Weak memory models using event structures (2016)
- The Problem of Programming Language Concurrency Semantics (2015)
- Abstract effects and proof-relevant logical relations (2014)
- The laws of programming unify process calculi (2014)
- Rely-Guarantee-Based Simulation for Compositional Verification of Concurrent Program Transformations (2014)
- Common Compiler Optimisations are Invalid in the C11 Memory Model and what we can do about it (2014)
- Compiler testing via a theory of sound optimisations in the C11/C++11 memory model (2013)
- A Concurrent Logical Relation (2012)
- Brookes Is Relaxed, Almost! (2012)
- A rely-guarantee-based simulation for verifying concurrent program transformations (2012)
- Mathematizing C++ concurrency (2011)
- Understanding POWER multiprocessors (2011)
- A separation logic for refining concurrent objects (2011)
- A Model of Cooperative Threads (2010)
- Verifying Local Transformations on Relaxed Memory Models (2010)
- Relational semantics for effect-based program transformations: higher-order store (2009)
- A Better x86 Memory Model: x86-TSO (2009)
- Correctness of effect-based program transformations (2008)
- Relational semantics for effect-based program transformations with dynamic allocation (2007)
- A semantics for concurrent separation logic (2007)
- Relational Reasoning in a Nominal Semantics for Storage (2005)
- The Java memory model (2005)
- Notions of Computation Determine Monads (2002)
- Monads and effects (2002)
- The rely-guarantee method for verifying shared variable concurrent programs (1997)
- Full Abstraction for a Shared-Variable Parallel Language (1996)
- Notions of computation and monads (1991)
- How to Make a Multiprocessor Computer That Correctly Executes Multiprocess Programs (1979)