Reference. IronFleet: proving practical distributed systems correct
Cite
Cited by (17)
Code-Specify-Test-Debug-Prove: Flexibly Integrating Separation Logic Specification into Conventional Workflows aamer-2026-code
We seek to enable more flexible use of rich specifications in a variety of ways that smoothly extend conventional software development practice. We show how a single specification language, based on separation logic to capture the subtle ownership disciplines of systems code, can be used for runtime assertion checking, for property-based testing, and for formal machine-checked proof—and how each of these complements and supports the others. We demonstrate all this on a challenging example: a component of a production hypervisor, running both stand-alone at user level and in situ in the hypervisor.
TäKōFormal: Enabling Robust Software for Programmable Memory Hierarchies srinivasan-2026-takoformal
Cazamariposas: Automated Instability Debugging in SMT-Based Program Verification zhou-2025-cazamariposas
Program verification languages such as Dafny and F often rely heavily on Satisfiability Modulo Theories (SMT) solvers for proof automation. However, SMT-based verification suffers from instability, where semantically irrelevant changes in the source program can cause spurious proof failures. While existing mitigation techniques emphasize preemptive measures, we propose a complementary approach that focuses on diagnosing and repairing specific instances of instability-induced failures. Our key technique is a novel differential analysis to pinpoint problematic quantified formulas in an unstable query. We implement this technique in Cazamariposas, a tool that automatically identifies such quantified formulas and suggests fixes. We evaluate Cazamariposas on multiple large-scale systems verification projects written in three different program verification languages. Our results demonstrate Cazamariposas’ effectiveness as an instability debugger. In the majority of cases, Cazamariposas successfully isolates the issue to a single problematic quantifier, while providing a stabilizing fix.
Verus: A Practical Foundation for Systems Verification lattuada-2024-verus
Formally verified asymptotic consensus in robust networks tekriwal-2024-formally
Distributed architectures are used to improve performance and reliability of various systems. Examples include drone swarms and load-balancing servers. An important capability of a distributed architecture is the ability to reach consensus among all its nodes. Several consensus algorithms have been proposed, and many of these algorithms come with intricate proofs of correctness, that are not mechanically checked. In the controls community, algorithms often achieve consensus asymptotically , e.g., for problems such as the design of human control systems, or the analysis of natural systems like bird flocking. This is in contrast to exact consensus algorithm such as Paxos, which have received much more recent attention in the formal methods community. This paper presents the first formal proof of an asymptotic consensus algorithm, and addresses various challenges in its formalization. Using the Coq proof assistant, we verify the correctness of a widely used consensus algorithm in the distributed controls community, the Weighted-Mean Subsequence Reduced (W-MSR) algorithm . We formalize the necessary and sufficient conditions required to achieve resilient asymptotic consensus under the assumed attacker model. During the formalization, we clarify several imprecisions in the paper proof, including an imprecision on quantifiers in the main theorem.
Galápagos: Developing Verified Low Level Cryptography on Heterogeneous Hardwares zhou-2023-galapagos
Grove: A Separation-Logic Library for Verifying Distributed Systems sharmaGroveSeparationLogicLibrary2023
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.
Performal: Formal Verification of Latency Properties for Distributed Systems zhang-2023-performal
Understanding and debugging the performance of distributed systems is a notoriously hard task, but a critical one. Traditional techniques like logging, tracing, and benchmarking represent a best-effort way to find performance bugs, but they either require a full deployment to be effective or can only find bugs after they manifest. Even with such techniques in place, real deployments often exhibit performance bugs that cause unwanted behavior. In this paper, we present Performal, a novel methodology that leverages the recent advances in formal verification to provide rigorous latency guarantees for real, complex distributed systems. The task is not an easy one: it requires carefully decoupling the formal proofs from the execution environment, formally defining latency properties, and proving them on real, distributed implementations. We used Performal to prove rigorous upper bounds for the latency of three applications: a distributed lock, ZooKeeper and a MultiPaxos-based State Machine Replication system. Our experimental evaluation shows that these bounds are a good proxy for the behavior of the deployed system and can be used to identify performance bugs in real-world systems.
Regularity and Quantification: A New Approach to Verify Distributed Protocols goelRegularityQuantificationNew
Proving that an unbounded distributed protocol satisfies a given safety property amounts to finding a quantified inductive invariant that implies the property for all possible instance sizes of the protocol. Existing methods for solving this problem can be described as search procedures for an invariant whose quantification prefix fits a particular template. We propose an alternative constructive approach that does not prescribe, a priori, a specific quantifier prefix. Instead, the required prefix is automatically inferred without any enumerative search by carefully analyzing the spatial and temporal regularity of the protocol. The key insight underlying this approach is that structural regularity and quantification are closely related concepts that express protocol invariance under different re-arrangements of its components and its unbounded evolution over time. We extended the finite-domain IC3/PDR algorithm to use these regularities and boost clause learning to automatically derive the required quantified inductive invariant by exploiting the connection between structural regularities and quantification. We also describe a procedure to automatically find a minimal finite size, the cutoff, that yields a quantified invariant proving safety for any size. Our approach is implemented in IC3PO, a new verifier for distributed protocols that significantly outperforms the state-of-the-art, scales orders of magnitude faster, and robustly derives compact inductive invariants fully automatically.
Sift: Using Refinement-guided Automation to Verify Complex Distributed Systems maSiftUsingRefinementguided
Distributed systems are hard to design and implement correctly. Recent work has tried to use formal verification techniques to provide rigorous correctness guarantees. These works present a hard choice, though. One must either opt for the power of refinement-based approaches like IronFleet and Verdi, at the cost of large amounts of manual effort; or choose the more automated approach of I4, IC3PO, SWISS and DistAI which give up the ability to prove refinement and the power and scalability that come with it.
On Symmetry and Quantification: A New Approach to Verify Distributed Protocols goelSymmetryQuantificationNew2021
Proving that an unbounded distributed protocol satisfies a given safety property amounts to finding a quantified inductive invariant that implies the property for all possible instance sizes of the protocol. Existing methods for solving this problem can be described as search procedures for an invariant whose quantification prefix fits a particular template. We propose an alternative constructive approach that does not prescribe, a priori, a specific quantifier prefix. Instead, the required prefix is automatically inferred without any search by carefully analyzing the structural symmetries of the protocol. The key insight underlying this approach is that symmetry and quantification are closely related concepts that express protocol invariance under different re-arrangements of its components. We propose symmetric incremental induction, an extension of the finite-domain IC3/PDR algorithm, that automatically derives the required quantified inductive invariant by exploiting the connection between symmetry and quantification. While various attempts have been made to exploit symmetry in verification applications, to our knowledge, this is the first demonstration of a direct link between symmetry and quantification in the context of clause learning during incremental induction. We also describe a procedure to automatically find a minimal finite size, the cutoff, that yields a quantified invariant proving safety for any size. Our approach is implemented in IC3PO, a new verifier for distributed protocols that significantly outperforms the state-of-the-art, scales orders of magnitude faster, and robustly derives compact inductive invariants fully automatically.
DistAI: Data-Driven Automated Invariant Learning for Distributed Protocols yaoDistAIDataDrivenAutomated
Distributed systems are notoriously hard to implement correctly due to non-determinism. Finding the inductive invariant of the distributed protocol is a critical step in verifying the correctness of distributed systems, but takes a long time to do even for simple protocols. We present DistAI, a data-driven automated system for learning inductive invariants for distributed protocols. DistAI generates data by simulating the distributed protocol at different instance sizes and recording states as samples. Based on the observation that invariants are often concise in practice, DistAI starts with small invariant formulas and enumerates all strongest possible invariants that hold for all samples. It then feeds those invariants and the desired safety properties to an SMT solver to check if the conjunction of the invariants and the safety properties is inductive. Starting with small invariant formulas and strongest possible invariants avoids large SMT queries, improving SMT solver performance. Because DistAI starts with the strongest possible invariants, if the SMT solver fails, DistAI does not need to discard failed invariants, but knows to monotonically weaken them and try again with the solver, repeating the process until it eventually succeeds. We prove that DistAI is guaranteed to find the ∃-free inductive invariant that proves the desired safety properties in finite time, if one exists. Our evaluation shows that DistAI successfully verifies 13 common distributed protocols automatically and outperforms alternative methods both in the number of protocols it verifies and the speed at which it does so, in some cases by more than two orders of magnitude.
Brief Announcement: On the Significance of Consecutive Ballots in Paxos goldweber-2020-brief
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.
Towards Automatic Inference of Inductive Invariants ma-2019-towards
Deductive Verification in Decidable Fragments with Ivy mcmillanDeductiveVerificationDecidable2018
This paper surveys the work to date on Ivy, a language and a tool for the formal specification and verification of distributed systems. Ivy supports deductive verification using automated provers, model checking, automated testing, manual theorem proving and generation of executable code. In order to achieve greater verification productivity, a key design goal for Ivy is to allow the engineer to apply automated provers in the realm in which their performance is relatively predictable, stable and transparent. In particular Ivy focuses on the use of decidable fragments of first-order logic. We consider the rationale or Ivy’s design, the various capabilities of the tool, as well as case studies and applications.
Ivy: Safety verification by interactive generalization padonIvySafetyVerification
Despite several decades of research, the problem of formal verification of infinite-state systems has resisted effective automation. We describe a system — Ivy — for interactively verifying safety of infinite-state systems. Ivy’s key principle is that whenever verification fails, Ivy graphically displays a concrete counterexample to induction. The user then interactively guides generalization from this counterexample. This process continues until an inductive invariant is found. Ivy searches for universally quantified invariants, and uses a restricted modeling language. This ensures that all verification conditions can be checked algorithmically. All user interactions are performed using graphical models, easing the user’s task. We describe our initial experience with verifying several distributed protocols.
Cites 69 works (0 here)
External (69)
- Deep Specifications and Certified Abstraction Layers (2015)
- How Amazon web services uses formal methods (2015)
- Verdi: a framework for implementing and formally verifying distributed systems (2015)
- UW CSE News: UW CSE's Verdi team completes first full formal verification of Raft consensus protocol (2015)
- How to make Chord correct (using a stable base) (2015)
- Comprehensive formal verification of an OS microkernel (2014)
- Developing Correctly Replicated Databases Using Formal Tools (2014)
- Ironclad apps: End-to-end security via automated full-system verification (2014)
- Consensus: Bridging theory and practice (PhD thesis, Stanford) (2014)
- In search of an understandable consensus algorithm (2014)
- Simple testing can prevent most critical failures: An analysis of production failures in distributed data-intensive systems (2014)
- Verifying security invariants in ExpressOS (2013)
- There is more consensus in Egalitarian parliaments (2013)
- Efficient Verification of Distributed Protocols Using Stateful Model Checking (2013)
- A proof of correctness of Egalitarian Paxos (Tech. Rep. CMU-PDL-13-111) (2013)
- Using lightweight modeling to understand chord (2012)
- Interfacing with proof assistants for domain specific programming using EventML (2012)
- Timing Analysis of a Protected Operating System Kernel (2011)
- Efficient model checking of fault-tolerant distributed protocols (2011)
- Practical software model checking via dynamic interface reduction (2011)
- Zab: High-performance broadcast for primary-backup systems (2011)
- Byzantizing Paxos by refinement (2011)
- Memoir: Practical State Continuity for Protected Modules (2011)
- Dafny: An automatic program verifier for functional correctness (2010)
- The next 700 separation logics (2010)
- ZooKeeper: Wait-free coordination for Internet-scale systems (2010)
- Dissecting Zab (Tech. Rep. YL-2010-007) (2010)
- Model checking the Pastry routing protocol (2010)
- A calculus of atomic actions (2009)
- The PlusCal Algorithm Language (2009)
- Verifying distributed systems: The operational approach (2009)
- Model checking a Paxos implementation (web page) (2009)
- MODIST: Transparent model checking of unmodified distributed systems (2009)
- Z3: An efficient SMT solver (2008)
- Finding and reproducing heisenbugs in concurrent programs (2008)
- Gadara: Dynamic deadlock avoidance for multithreaded programs (2008)
- The Farsite project: a retrospective (2007)
- Mace: Language support for building distributed systems (2007)
- The Chubby lock service for loosely-coupled distributed systems (2006)
- Distributed directory service in the Farsite file system (2006)
- The SMART way to migrate replicated stateful services (2006)
- Runtime analysis of atomicity for multithreaded programs (2006)
- Simplify: A theorem prover for program checking (2005)
- Correctness of Paxos with replica-set-specific views (Tech. Rep. MSR-TR-2004-45) (2004)
- An annotated specification of the consensus protocol of Paxos using superposition in PVS (2004)
- First-order verification of cryptographic protocols (2003)
- Checking Cache-Coherence Protocols with TLA+ (2003)
- Formal verification of communication protocols in distributed systems (2003)
- Practical byzantine fault tolerance and proactive recovery (2002)
- Specifying Systems: The TLA+ Language and Tools for Hardware and Software Engineers (2002)
- CMC: A pragmatic approach to model checking real code (2002)
- Using formal specifications to monitor and guide simulation: Verifying the cache coherence engine of the Alpha 21364 microprocessor (2002)
- Automatic support for verification of secure transactions in distributed environment using symbolic model checking (2001)
- Chord: A scalable peer-to-peer lookup service for Internet applications (2001)
- Chord: A scalable peer-to-peer lookup service for Internet applications (Tech. Rep. MIT/LCS/TR-819) (2001)
- Using I/O automata for developing distributed systems (2000)
- A correctness proof for a practical Byzantine-fault-tolerant replication algorithm (Tech. Rep. MIT/LCS/TM-590) (1999)
- Reduction in TLA (1998)
- The part-time parliament (1998)
- Revisiting the Paxos algorithm (1997)
- The temporal logic of actions (1994)
- The existence of refinement mappings (1991)
- A theorem on atomicity in distributed algorithms (Tech. Rep. SRC-28) (1988)
- Implementing Mathematics with the Nuprl Proof Development System (1986)
- Impossibility of distributed consensus with one faulty process (1985)
- Reduction: A method of proving properties of parallel programs (1975)
- An axiomatic basis for computer programming (1969)
- Papers on Time and Tense (1968)
- Assigning meanings to programs (1967)