https://github.com/viperproject/program-proofs-prusti
Examples and exercises from the book Program Proofs translated to Prusti
https://github.com/viperproject/program-proofs-prusti
Last synced: 11 days ago
JSON representation
Examples and exercises from the book Program Proofs translated to Prusti
- Host: GitHub
- URL: https://github.com/viperproject/program-proofs-prusti
- Owner: viperproject
- Created: 2024-05-29T12:31:53.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2024-05-29T13:52:15.000Z (about 1 year ago)
- Last Synced: 2025-01-19T15:23:19.542Z (5 months ago)
- Language: Rust
- Size: 35.2 KB
- Stars: 1
- Watchers: 10
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-rust-formalized-reasoning - program-proofs-prusti - proofs.com/) - examples and exercises from the book Program Proofs by K. Rustan M. Leino. (Books code / Libraries)
README
# `program-proofs-prusti`
Examples and exercises from the book [*Program Proofs*](https://program-proofs.com/) by K. Rustan M. Leino translated to Rust and verified with [Prusti](https://prusti.ethz.ch/), a deductive verifier for Rust programs developed at ETH Zurich.
## Repository structure
Each chapter of the book that we have translated can be found in its own crate at the root of this repository.
Each crate can be verified, as a whole, using [`cargo prusti`](https://viperproject.github.io/prusti-dev/user-guide/basic.html#command-line) from the command line or using the [Prusti Assistant](https://viperproject.github.io/prusti-dev/user-guide/basic.html#prusti-assistant) extension for VS Code.
Within each crate, there are two main subdirectories of interest:
- `(chapter)/src/examples` - contains translated *examples*, i.e. various snippets of code from the given chapter;
- `(chapter)/src/exercises` - contains translated *exercises*, i.e. (possible) solutions to the exercises from the given chapter.Files in these subdirectories follow the naming scheme `example_(section)_(subsection).rs` or `exercise_(section)_(subsection).rs`. The remaining files in each crate serve to configure Prusti, configure Cargo, and to tie together the example and exercise files.
## Current status
| | Chapter | Notes |
| ----------:| ------- | ----- |
| **PART 0** | **Learning the Ropes** | |
| Chapter 1 | [Basics](chapter1) | |
| Chapter 2 | [Making it Formal](chapter2) | |
| Chapter 3 | [Recursion and Termination](chapter3) | Termination checking is not yet supported in Prusti |
| Chapter 4 | [Inductive Datatypes](chapter4) | |
| Chapter 5 | [Lemmas and Proofs](chapter5) | Ghost code is not yet supported in Prusti |
| **PART 1** | **Functional Programs** | |
| Chapter 6 | ~~Lists~~ | (Skipped) |
| Chapter 7 | ~~Unary Numbers~~ | (Skipped) |
| Chapter 8 | [Sorting](chapter8) | |
| Chapter 9 | [Modules](chapter9) | |
| Chapter 10 | ~~Data-Structure Invariants~~ | (Skipped) |
| **PART 2** | **Imperative Programs** | |
| Chapter 11 | ~~Loops~~ | (Skipped) |
| Chapter 12 | ~~Recursive Specifications, Iterative Programs~~ | (Skipped) |
| Chapter 13 | ~~Arrays and Searching~~ | (Skipped) |
| Chapter 14 | [Modifying Arrays](chapter14) | |
| Chapter 15 | ~~In-situ Sorting~~ | (Skipped) | |
| Chapter 16 | [Objects](chapter16) | |
| Chapter 17 | [Mutable Data Structures](chapter17) | |## References
The translations found in this repository were developed as part of Patrick Muntwiler's BSc thesis.
- Muntwiler, Patrick. ["Evaluating and Documenting a Rust Verifier."](https://ethz.ch/content/dam/ethz/special-interest/infk/chair-program-method/pm/documents/Education/Theses/Patrick_Muntwiler_BS_Thesis.pdf) (2023).