Reduction for Structured Concurrent Programs
Namratha Gangamreddypalli, Constantin Enea, Shaz Qadeer
TL;DR
The paper addresses scalable verification of structured concurrent programs by combining Lipton-style movers with a parallel-to-sequential reduction that supports atomic sections containing recursive procedures. It introduces RedPL and a refinement-based soundness theorem showing that well-typed, atomic-free programs can be reduced via par-reduce to an intermediate form and then via seq-reduce to a final form, with a refinement chain $\mathcal{P}_s \preccurlyeq \mathcal{P}_i \preccurlyeq \mathcal{P}_r$; mover types $\{\mathbf{B},\mathbf{R},\mathbf{L},\mathbf{N},\top\}$ and weak preconditions $\text{wlp}$ underpin correctness. The approach leverages abstractions such as $read_f$ (right mover) and $read_s$ (left mover) to over-approximate action effects, enabling reductions that avoid prophecy variables in linearizability proofs and support structured code with procedures. Implemented as an extension to Civl, the framework is validated on challenging case studies (e.g., a concurrent snapshot, ABD register, FLASH cache coherence, and 2PC), demonstrating scalable proofs and broader applicability to real-world concurrent and distributed protocols.
Abstract
Commutativity reasoning based on Lipton's movers is a powerful technique for verification of concurrent programs. The idea is to define a program transformation that preserves a subset of the initial set of interleavings, which is sound modulo reorderings of commutative actions. Scaling commutativity reasoning to routinely-used features in software systems, such as procedures and parallel composition, remains a significant challenge. In this work, we introduce a novel reduction technique for structured concurrent programs that unifies two key advances. First, we present a reduction strategy that soundly replaces parallel composition with sequential composition. Second, we generalize Lipton's reduction to support atomic sections containing (potentially recursive) procedure calls. Crucially, these two foundational strategies can be composed arbitrarily, greatly expanding the scope and flexibility of reduction-based reasoning. We implemented this technique in Civl and demonstrated its effectiveness on a number of challenging case studies, including a snapshot object, a fault-tolerant and linearizable register, the FLASH cache coherence protocol, and a non-trivial variant of Two-Phase Commit.
