Reference. Grove: A Separation-Logic Library for Verifying Distributed Systems
Grove is a concurrent separation logic library for verifying distributed systems. Grove is the first to handle time-based leases, including their interaction with reconfiguration, crash recovery, thread-level concurrency, and unreliable networks. This paper uses Grove to verify several distributed system components written in Go, including vKV, a realistic distributed multi-threaded key-value store. vKV supports reconfiguration, primary/backup replication, and crash recovery, and uses leases to execute read-only requests on any replica. vKV achieves high performance (67–73% of Redis on a single core), scales with more cores and more backup replicas (achieving about 2× the throughput when going from 1 to 3 servers), and can safely execute reads while reconfiguring.
Cite
Cited by (3)
Verifying Isolation Levels of Database Implementations for Free Using Separation Logic mathiasen-2026-verifying
Modern databases are highly concurrent and provide transactions as a mean of grouping several database operations into atomically applied units. Database vendors and software engineers use isolation levels to describe the consistency guarantees of transactions. The popular isolation levels give weak guarantees, with intricate semantics, to optimize performance of applications. The problem of assuring that database implementations actually implement the isolation level guarantees that application developers build their systems upon has received a great deal of attention from the testing community. But until now, there exists no method for formally verifying that a database implementation actually implements the isolation level that database vendors says it provides. In this paper, we present a method for verifying that a database implements an isolation level: we derive isolation levels directly, as formalized in transactional consistency models by the database community, from the structure of separation logic specifications. By doing so, we consider all program executions that a database and arbitrary clients of the database could produce. The result is a so-called free theorem meaning that any database implementation, whose operations are verified against a specific set of separation logic specifications, actually implements its isolation level. As all proofs in this paper are mechanized in the Rocq proof assistant and build upon a detailed semantic model of program execution, we believe this contribution raises the bar for the achievable robustness of databases.
Reasoning about Weak Isolation Levels in Separation Logic alnormathiasen-2025-reasoning
Consistency guarantees among concurrently executing transactions in local- and distributed systems, commonly referred to as isolation levels, have been formalized in a number of models. Thus far, no model can reason about executable implementations of databases or local transaction libraries providing weak isolation levels. Weak isolation levels are characterized by being highly concurrent and, unlike their stronger counter part serializability, they are not equivalent to the consistency guarantees provided by a transaction library implemented using a global lock. Industrial-strength databases almost exclusively implement weak isolation levels as their default level. This calls for formalism as numerous bugs violating isolation have been detected in these databases. In this paper, we formalize three weak isolation levels in separation logic, namely read uncommitted, read committed, and snapshot isolation. We define modular separation logic specifications that are independent of the underlying transaction library implementation. Historically, isolation levels have been specified using examples of executions between concurrent transactions that are not allowed to occur, and we demonstrate that our specifications correctly prohibit such examples. To show that our specifications are realizable, we formally verify that an executable implementation of a key-value database running the multi-version concurrency control algorithm from the original snapshot isolation paper satisfies our specification of snapshot isolation. Moreover, we prove implications between the specifications—snapshot isolation implies read committed and read committed implies read uncommitted—and thus the verification effort of the database serves as proof that all of our specifications are realizable. All results are mechanized in the Rocq proof assistant on top of the Iris separation logic framework.
Verus: A Practical Foundation for Systems Verification lattuada-2024-verus
Cites 48 works (8 here)
With notes (8)
Verifying Reliable Network Components in a Distributed Separation Logic with Dependent Separation Protocols gondelman-2023-verifying
We present a foundationally verified implementation of a reliable communication library for asynchronous client-server communication, and a stack of formally verified components on top thereof. Our library is implemented in an OCaml-like language on top of UDP and features characteristic traits of existing protocols, such as a simple handshaking protocol, bidirectional channels, and retransmission/acknowledgement mechanisms. We verify the library in the Aneris distributed separation logic using a novel proof pattern—dubbed the session escrow pattern—based on the existing escrow proof pattern and the so-called dependent separation protocols, which hitherto have only been used in a non-distributed concurrent setting. We demonstrate how our specification of the reliable communication library simplifies formal reasoning about applications, such as a remote procedure call library, which we in turn use to verify a lazily replicated key-value store with leader-followers and clients thereof. Our development is highly modular—each component is verified relative to specifications of the components it uses (not the implementation). All our results are formalized in the Coq proof assistant.
Armada: low-effort verification of high-performance concurrent programs lorch-2020-armada
Ivy: A Multi-modal Verification Tool for Distributed Algorithms mcmillanIvyMultimodalVerification2020
Ivy is a multi-modal verification tool for correct design and implementation of distributed protocols and algorithms, supporting modular specification, implementation and proof. Ivy supports proving safety and liveness properties of parameterized and infinite-state systems via three modes: deductive verification using an SMT solver, abstraction and model checking, and manual proofs using natural deduction. It supports light-weight formal methods via compositional specification-based testing and bounded model checking. Ivy can extract executable distributed programs by translation to efficient C++ code. It is designed to support decidable automated reasoning, to improve proof stability and to provide transparency in the case of proof failures. For this purpose, it presents concrete finite counterexamples, automatically audits proofs for decidability of verification conditions, and provides modular hiding of theories.
I4: Incremental inference of inductive invariants for verification of distributed protocols maI4IncrementalInference2019
Designing and implementing distributed systems correctly is a very challenging task. Recently, formal verification has been successfully used to prove the correctness of distributed systems. At the heart of formal verification lies a computerchecked proof with an inductive invariant. Finding this inductive invariant, however, is the most difficult part of the proof. Alas, current proof techniques require inductive invariants to be found manually—and painstakingly—by the developer. In this paper, we present a new approach, Incremental Inference of Inductive Invariants (I4), to automatically generate inductive invariants for distributed protocols. The essence of our idea is simple: the inductive invariant of a finite instance of the protocol can be used to infer a general inductive invariant for the infinite distributed protocol. In I4, we create a finite instance of the protocol; use a model checking tool to automatically derive the inductive invariant for this finite instance; and generalize this invariant to an inductive invariant for the infinite protocol. Our experiments show that I4 can prove the correctness of several distributed protocols like Chord, 2PC and Transaction Chains with little to no human effort.
Iris from the ground up: A modular foundation for higher-order concurrent separation logic jung_etal_iris_ground_up_2018
Iris is a framework for higher-order concurrent separation logic, which has been implemented in the Coq proof assistant and deployed very effectively in a wide variety of verification projects. Iris was designed with the express goal of simplifying and consolidating the foundations of modern separation logics, but it has evolved over time, and the design and semantic foundations of Iris itself have yet to be fully written down and explained together properly in one place. Here, we attempt to fill this gap, presenting a reasonably complete picture of the latest version of Iris (version 3.1), from first principles and in one coherent narrative.
Interactive proofs in higher-order concurrent separation logic krebbers-2017-interactive
IronFleet: proving practical distributed systems correct hawblitzel-2015-ironfleet
Iris: Monoids and Invariants as an Orthogonal Basis for Concurrent Reasoning jung-2015-iris
External (40)
- The Coq Proof Assistant, version 8.17.1 (2023)
- Verifying vMVCC, a high-performance transaction library using multi-version concurrency control (2023)
- Sharding the state machine: Automated modular reasoning for complex concurrent systems (2023)
- Grove: a separation-logic library for verifying distributed systems (self-citation: SOSP version cites the extended version and vice versa) (2023)
- Adore: atomic distributed objects with certified reconfiguration (2022)
- Modular verification of distributed systems with Grove (2022)
- Amazon DynamoDB: A scalable, predictably performant, and fully managed NoSQL database service (2022)
- Distributed causal memory: modular specification and verification in higher-order distributed separation logic (2021)
- FoundationDB: A Distributed Unbundled Transactional Key Value Store (2021)
- GoJournal: a verified, concurrent, crash-safe journaling system (2021)
- Aneris: A Mechanised Logic for Modular Reasoning about Distributed Systems (2020)
- Verifying concurrent, crash-safe systems with Perennial (2019)
- The future is ours: prophecy variables in separation logic (2019)
- ByMC: Byzantine Model Checker (2018)
- Verifying concurrent software using movers in CSPEC (2018)
- Paxos made EPR: decidable reasoning about distributed protocols (2017)
- Programming and proving with distributed protocols (2017)
- Help! (2015)
- Using Crash Hoare logic for certifying the FSCQ file system (2015)
- No compromises (2015)
- Verdi: a framework for implementing and formally verifying distributed systems (2015)
- In search of an understandable consensus algorithm (2014)
- A Self-Configurable Geo-Replicated Cloud Storage System (2014)
- Apache Kafka replication (https://cwiki.apache.org/confluence/display/kafka/kafka+replication) (2013)
- Spanner: Google's globally-distributed database (2012)
- Expressive modular fine-grained concurrency specification (2011)
- Megastore: Providing Scalable, Highly Available Storage for Interactive Services (2011)
- Benchmarking cloud serving systems with YCSB (2010)
- The Role of Auxiliary Variables in the Formal Development of Concurrent Programs (2010)
- Resources, concurrency, and local reasoning (2007)
- Bigtable: a distributed storage system for structured data (2006)
- The Chubby lock service for loosely-coupled distributed systems (2006)
- Chain replication for supporting high throughput and availability (2004)
- Boxwood: abstractions as the foundation for storage infrastructure (2004)
- The Google file system (2003)
- Specifying Systems: The TLA+ Language and Tools for Hardware and Software Engineers (2002)
- Hoare Logic and Auxiliary Variables (1999)
- The temporal logic of actions (1994)
- Leases: an efficient fault-tolerant mechanism for distributed file cache consistency (1989)
- The existence of refinement mappings (1988)