Reference. Place Capability Graphs: A General-Purpose Model of Rust’s Ownership and Borrowing Guarantees
Rust’s novel type system has proved an attractive target for verification and program analysis tools, due to the rich guarantees it provides for controlling aliasing and mutability. However, fully understanding, extracting and exploiting these guarantees is subtle and challenging: existing models for Rust’s type checking either support a smaller idealised language disconnected from real-world Rust code, or come with severe limitations in terms of precise modelling of Rust borrows, composite types storing them, function signatures and loops. In this paper, we present Place Capability Graphs : a novel model of Rust’s type-checking results, which lifts these limitations, and which can be directly calculated from the Rust compiler’s own programmatic representations and analyses. We demonstrate that our model supports over 97% of Rust functions in the most popular public crates, and show its suitability as a general-purpose basis for verification and program analysis tools by developing promising new prototype versions of the existing Flowistry and Prusti tools.
Cite
Cites 39 works (2 here)
With notes (2)
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.
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.
External (37)
- Tree Borrows (2025)
- Place Expressions and Value Expressions (The Rust Reference) (2025)
- Personal Communication (Prusti Developers) (2025)
- Place Capability Graphs: A General-Purpose Model of Rust's Ownership and Borrowing Guarantees (extended version) (2025)
- The rust-analyzer Project (2025)
- Sound Borrow-Checking for Rust via Symbolic Semantics (2024)
- A Grounded Conceptual Model for Ownership Types in Rust (2023)
- Creusot: A Foundry for the Deductive Verification of Rust Programs (2022)
- Aeneas: Rust verification by functional translation (2022)
- RustHornBelt: a semantic foundation for functional verification of Rust programs with unsafe code (2022)
- Returning mutable references (Verus discussion) (2022)
- Flux: Liquid Types for Rust (2022)
- Rudra: Finding Memory Safety Bugs in Rust at the Ecosystem Scale (2021)
- Modular information flow through ownership (2021)
- A Lightweight Formalism for Reference Lifetimes and Borrowing in Rust (2021)
- Leveraging rust types for modular specification and verification (2019)
- Stacked borrows: an aliasing model for Rust (2019)
- The Polonius Reference Implementation for the Rust Borrow-Checker (2019)
- Oxide: The Essence of Rust (2019)
- K-Rust: An Executable Formal Semantics for Rust (2018)
- KRust: A Formal Executable Semantics of Rust (2018)
- Rust Distilled: An Expressive Tower of Languages (2018)
- RustBelt: securing the foundations of the rust programming language (2017)
- Reference Capabilities for Concurrency Control (2016)
- Deny Capabilities for Safe, Fast Actors (2015)
- Patina: A Formalization of the Rust Programming Language (2015)
- Æminium: A Permission-Based Concurrent-by-Default Programming Language Approach (2014)
- Uniqueness and reference immutability for safe parallelism (2012)
- Capabilities for Uniqueness and Borrowing (2010)
- Ownership transfer in universe types (2007)
- External Uniqueness Is Unique Enough (2003)
- Modular Specification and Verification of Object-Oriented Programs (2002)
- Alias burying: Unique variables without destructive reads (2001)
- Ownership types for flexible alias protection (1998)
- 10.5281/zenodo.16597989
- 10.1007/978-3-662-49122-5_2
- 10.1109/icse-seip55303.2022.9794041