A research prototype tool for modular formal verification of C, Rust, and Java programs using separation logic.
VeriFast is a research prototype tool for modular formal verification of C, Rust, and Java programs. It uses separation logic annotations to prove correctness properties such as memory safety, thread safety, and termination, enabling developers to build highly reliable software.
Researchers and developers working on safety-critical systems, concurrent algorithms, or language implementations who need rigorous proofs of program correctness.
It offers a unified verification framework for multiple languages with predictable performance, support for rich specifications, and the ability to handle complex concurrency patterns through separation logic.
Research prototype tool for modular formal verification of C, Rust and Java programs
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Allows incremental proofs and specification reuse across codebases, as emphasized in its philosophy, enabling scalable verification of large systems.
Uses minimal search and no significant SMT solver overhead, resulting in low and predictable verification times, a key feature highlighted in the README.
Verifies C, Rust, and Java programs within a unified tool, demonstrated by examples like Linux driver proofs and Java Card verifications.
Handles multithreaded programs to prove thread safety and termination, with proofs for complex algorithms like cohort locks and MCAS.
Explicitly described as a research prototype in the README, meaning it may lack production-ready stability, comprehensive support, and regular updates compared to commercial tools.
Requires deep understanding of separation logic and formal verification concepts, making it inaccessible without significant prior expertise or training.
Parts of the documentation, such as the Rust reference, are noted as under construction, which can hinder onboarding and effective use.
Compiling from source requires specific steps and dependencies per OS, and even binary usage involves handling attributes like quarantine on macOS, adding friction.