v0.8.2: Compositional Verification Trifecta
Elicitation v0.8.2: Compositional Verification Trifecta
We're excited to announce Elicitation v0.8.2, marking a major milestone in accessible formal verification for Rust.
🎯 What's New
Three Verifiers, One Derive
For the first time, users can derive formal verification proofs across three major verification tools from a single source:
- Kani (CBMC-based bounded model checking)
- Verus (SMT-based executable specifications)
- Creusot (Rust to Why3 deductive verification)
Simply derive Elicit on your types:
#[derive(Elicit)]
struct MyType {
validated_field: NonEmptyString,
count: BoundedU32<1, 100>,
}Auto-Generated Verification Harnesses
New trait methods generate complete verification harnesses for your custom types:
kani_proof()- Generates Kani test harnesses with property checksverus_proof()- Generates Verus specifications with pre/post conditionscreusot_proof()- Generates Creusot contracts with invariants
No manual proof writing required. The proofs compose automatically from verified primitives.
🏗️ Compositional Verification
Build formally verified systems from the ground up:
- Foundation: All Rust std lib types verified (integers, strings, collections, etc.)
- Third-party crates: Popular types like
Uuid,Url,Regexverified - Your types: Derive
Elicitto inherit verification guarantees - Complex systems: Compose verified types into state machines and protocols
🎓 Real-World Applications
This enables formal verification for:
- Privacy: Prove data handling guarantees
- Security: Verify cryptographic protocols and access control
- Safety: Critical systems requiring certification (aerospace, medical, automotive)
Present formally verified proofs to regulators, auditors, and stakeholders with confidence.
📦 What's Included
elicitation- Core derive macro and traitselicitation_kani- Kani verification support (49 proofs verified)elicitation_verus- Verus verification support (49 proofs verified)elicitation_creusot- Creusot verification supportelicitation_rand- Property-based testing integration
🚀 Getting Started
[dependencies]
elicitation = "0.8.2"
[dev-dependencies]
elicitation_kani = "0.8.2"use elicitation::Elicit;
#[derive(Elicit)]
struct UserCredentials {
username: NonEmptyString,
password_hash: Bytes<32>, // Fixed-size verified
}
// Generate verification proofs
#[cfg(kani)]
#[kani::proof]
fn verify_credentials() {
UserCredentials::kani_proof();
}Run verification:
cargo kani📚 Documentation
🙏 Credits
Special thanks to the teams behind Kani, Verus, and Creusot for building these incredible verification tools.
🔮 What's Next
- Expanded third-party crate coverage
- Method-level verification (beyond type-level)
- Interactive proof refinement
- Performance optimizations
Note: This is a foundational release. While the verification infrastructure is production-ready, we recommend thorough testing for safety-critical applications.
Try it today and experience compositional formal verification in Rust!