Reference. Verus: A Practical Foundation for Systems Verification
Cite
Cited by (1)
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.
Cites 84 works (13 here)
With notes (13)
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.
Verus: Verifying Rust Programs using Linear Ghost Types lattuada-2023-verus
The Rust programming language provides a powerful type system that checks linearity and borrowing, allowing code to safely manipulate memory without garbage collection and making Rust ideal for developing low-level, high-assurance systems. For such systems, formal verification can be useful to prove functional correctness properties beyond type safety. This paper presents Verus, an SMT-based tool for formally verifying Rust programs. With Verus, programmers express proofs and specifications using the Rust language, allowing proofs to take advantage of Rust’s linear types and borrow checking. We show how this allows proofs to manipulate linearly typed permissions that let Rust code safely manipulate memory, pointers, and concurrent resources. Verus organizes proofs and specifications using a novel mode system that distinguishes specifications, which are not checked for linearity and borrowing, from executable code and proofs, which are checked for linearity and borrowing. We formalize Verus’ linearity, borrowing, and modes in a small lambda calculus, for which we prove type safety and termination of specifications and proofs. We demonstrate Verus on a series of examples, including pointer-manipulating code (an xor-based doubly linked list), code with interior mutability, and concurrent code.
Armada: Automated Verification of Concurrent Code with Sound Semantic Extensibility lorch-2022-armada
Safely writing high-performance concurrent programs is notoriously difficult. To aid developers, we introduce Armada, a language and tool designed to formally verify such programs with relatively little effort. Via a C-like language and a small-step, state-machine-based semantics, Armadagives developers the flexibility to choose arbitrary memory layout and synchronization primitives so that they are never constrained in their pursuit of performance. To reduce developer effort, Armadaleverages SMT-powered automation and a library of powerful reasoning techniques, including rely-guarantee, TSO elimination, reduction, and pointer analysis. All of these techniques are proven sound, and Armadacan be soundly extended with additional strategies over time. Using Armada, we verify five concurrent case studies and show that we can achieve performance equivalent to that of unverified code.
Finding Invariants of Distributed Systems: It’s a Small (Enough) World After All hanceFindingInvariantsDistributed
Today’s distributed systems are increasingly complex, leading to subtle bugs that are difficult to detect with standard testing methods. Formal verification can provably rule out such bugs, but historically it has been excessively labor intensive. For distributed systems, recent work shows that, given a correct inductive invariant, nearly all other proof work can be automated; however, the construction of such invariants is still a difficult manual task. In this paper, we demonstrate a new methodology for automating the construction of inductive invariants, given as input a (formal) description of the distributed system and a desired safety condition. Our system performs an exhaustive search within a given space of candidate invariants in order to find and verify inductive invariants which suffice to prove the safety condition. Central to our ability to search efficiently is our algorithm’s ability to learn from counterexamples whenever a candidate fails to be invariant, allowing us to check the remaining candidates more efficiently. We hypothesize that many distributed systems, even complex ones, may have concise invariants that make this approach practical, and in support of this, we show that our system is able to identify and verify inductive invariants for the Paxos protocol, which proved too complex for previous work.
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.
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.
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.
IronFleet: proving practical distributed systems correct hawblitzel-2015-ironfleet
CakeML: A verified implementation of ML kumar_cakeml_2014
We have developed and mechanically verified an ML system called CakeML, which supports a substantial subset of Standard ML. CakeML is implemented as an interactive read-eval-print loop (REPL) in x86-64 machine code. Our correctness theorem ensures that this REPL implementation prints only those results permitted by the semantics of CakeML. Our verification effort touches on a breadth of topics including lexing, parsing, type checking, incremental and dynamic compilation, garbage collection, arbitraryprecision arithmetic, and compiler bootstrapping.
Formal verification of a realistic compiler leroy_formal_2009
This paper reports on the development and formal verification (proof of semantic preservation) of CompCert, a compiler from Clight (a large subset of the C programming language) to PowerPC assembly code, using the Coq proof assistant both for programming the compiler and for proving its correctness. Such a verified compiler is useful in the context of critical software and its formal verification: the verification of the compiler guarantees that the safety properties proved on the source code hold for the executable compiled code as well.
External (71)
- Verus SOSP artifact (2024)
- Anvil: Verifying liveness of cluster management controllers (2024)
- VeriSMo: A verified security module for confidential VMs (2024)
- Atmosphere: Towards Practical Verified Kernels in Rust (2023)
- Leveraging large language models for automated proof synthesis in Rust (2023)
- Bryan Parno. IronSync OSDI 2023 artifact. https://github.com/secure-foundations/ironsync-osdi (2023)
- https://github.com/daanx/mimalloc-bench (2023)
- Sharding the state machine: Automated modular reasoning for complex concurrent systems (2023)
- Mariposa: Measuring SMT instability in automated program verification (2023)
- Armada code repository (2023)
- Spoq: Scaling machine-checkable systems verification in Coq (2023)
- Linear types for large-scale systems verification (2022)
- Aeneas: Rust verification by functional translation (2022)
- DuoAI: Fast, automated inference of inductive invariants for verifying distributed protocols (2022)
- Linux 6.1: Rust to hit mainline kernel (2022)
- Sustainability with Rust (2022)
- Announcing KataOS and Sparrow (2022)
- Creusot: A foundry for the deductive verification of Rust programs (2022)
- Inferring Invariants with Quantifier Alternations: Taming the Search Space Explosion (2021)
- Modular specification and verification of closures in Rust (2021)
- RUDRA: Finding memory safety bugs in Rust at the ecosystem scale (2021)
- NrOS: Effective replication and sharing in an operating system (2021)
- EverCrypt: A Fast, Verified, Cross-Platform Cryptographic Provider (2020)
- A Security Model and Fully Verified Implementation for the IETF QUIC Record Layer (2020)
- Specification and verification in the field: Applying formal methods to BPF just-in-time compilers in the Linux kernel (2020)
- HACL×N: Verified generic SIMD crypto (for all your favorite platforms) (2020)
- Storage systems are distributed systems (so verify them that way!) (2020)
- Verifying concurrent, crash-safe systems with Perennial (2019)
- Scaling symbolic evaluation for automated verification of systems code with Serval (2019)
- Formally Verified Cryptographic Web Applications in WebAssembly (2019)
- Meta-F*: Proof automation with SMT, tactics, and metaprograms (2019)
- Modularity for decidability of deductive verification with applications to distributed systems (2018)
- Reducing liveness to safety in first-order logic (2018)
- The Rust Programming Language (2018)
- Paxos made EPR: decidable reasoning about distributed protocols (2017)
- Certified Verification of Algebraic Properties on Low-Level Mathematical Constructs in Cryptographic Programs (2017)
- RustBelt: securing the foundations of the rust programming language (2017)
- Hyperkernel: Push-button verification of an OS kernel (2017)
- Komodo: Using verification to disentangle secure-enclave hardware from software (2017)
- Vale: Verifying high-performance cryptographic assembly code (2017)
- Verified low-level programming embedded in F* (2017)
- Implementing and proving the TLS 1.3 record layer (2017)
- NOVA-Fortis: A fault-tolerant non-volatile main memory file system (2017)
- Push-button verification of file systems via crash refinement (2016)
- Dependent types and multi-monadic effects in F* (2016)
- CertiKOS: An extensible architecture for building certified concurrent OS kernels (2016)
- Cogent: Verifying high-assurance file system implementations (2016)
- Using Crash Hoare logic for certifying the FSCQ file system (2015)
- Verdi: a framework for implementing and formally verifying distributed systems (2015)
- Viper: A Verification Infrastructure for Permission-Based Reasoning (2015)
- The Lean theorem prover (2015)
- The rust language (2014)
- Comprehensive formal verification of an OS microkernel (2014)
- Ironclad apps: End-to-end security via automated full-system verification (2014)
- VCC: A Practical System for Verifying Concurrent C (2009)
- Programming with triggers (2009)
- seL4: formal verification of an OS kernel (2009)
- Deciding Effectively Propositional Logic Using DPLL and Substitution Sets (2008)
- Resources, concurrency, and local reasoning (2007)
- Specifying Systems: The TLA+ Languange and Tools for Hardware and Software Engineers (2002)
- A Proof Assistant for Higher-Order Logic (2002)
- Proof by computation in the Coq system (2002)
- Linear types can change the world! (1990)
- An axiomatic basis for computer programming (1969)
- Assigning meanings to programs (1967)
- 10.5555/645683.664578
- 10.5555/1939141.1939161
- 10.5555/1792734.1792766
- The Coq Proof Assistant
- Intel Optane persistent memory
- Direct Access for files (Linux kernel documentation)