ravencheck
is a tool for symbolic verification of Rust code, using guaranteed-decidable SMT queries for predictable results.
First, make sure you have the CVC5 SMT
solver available. You should be able to run cvc5 --version
in your
dev environment.
Then, you can add ravencheck
as a dependency in your Cargo.toml
file, in three different ways:
Add the following to your Cargo.toml:
[dependencies]
ravencheck = "0.1.2"
This gives you the latest published version (v0.2.0).
Add the following to your Cargo.toml:
[dependencies]
ravencheck = { git = "https://github.com/cuplv/ravencheck" }
This gives you the latest commit to main
.
Alternatively, you can clone the repo and use its path on your filesystem as the dependency:
# Cargo.toml
...
[dependencies]
ravencheck = { path = "path/to/cloned/repo" }
...
This allows you to choose which commit in the repo to use.
You use ravencheck
by adding the #[ravencheck::check_module]
macro
attribute at the top of modules in which you want to use
verification. See examples/sets.rs for an
example.
"Raven" is an acronym for relationally-abstracted verification encoding, the technique that is used to reduce verification conditions to a decidable fragment of first-order logic (specifically, the Extended EPR fragment).