name: dafny-verifier
description: "Use Dafny verification language for constructing verified programs with proofs."
version: "1.0.0"
tags: [verification, dafny, proofs, popl]
difficulty: intermediate
languages: [dafny]
dependencies: [hoare-logic-verifier, smt-solver-interface]
Dafny Verifier
Dafny is a verification-aware programming language that supports writing specifications, programs, and proofs together. It compiles to verified code in multiple languages (C#, Java, Go, JavaScript).
When to Use This Skill
- Writing verified programs
- Learning formal verification
- Proving algorithm correctness
- Teaching program proofs
- Developing certified software
What This Skill Does
- Specification Writing: Define pre/post conditions and invariants
- Verification: Automatically verify programs against specs
- Lemma Proving: Write and prove helper lemmas
- Termination: Prove program termination
- Code Extraction: Generate verified code
Key Concepts
| Concept |
Description |
| Method |
Executable code with specifications |
| Function |
Mathematical function (pure, no side effects) |
| Lemma |
Proof that can be called like a function |
| Invariant |
Property that holds at loop header |
| Ensures |
Postcondition specification |
| Requires |
Precondition specification |
Tips
- Start with strong specifications, weaken if needed
- Use lemmas to break complex proofs
- Write loop invariants before the body
- Use
calc statements for calculation proofs
- The
old() function refers to pre-state
Common Use Cases
- Verified algorithms
- Certified libraries
- Teaching formal methods
- Security-critical code
- Protocol verification
Related Skills
hoare-logic-verifier - Theory behind Dafny
coq-proof-assistant - More expressive proof assistant
smt-solver-interface - Z3 powers Dafny
separation-logician - For heap reasoning
Canonical References
| Reference |
Why It Matters |
| Leino, "Dafny: An Automatic Program Verifier for Functional Correctness" (LPAR 2010) |
Original Dafny paper |
| Leino, "Program Proofs" (MIT Press, 2023) |
Comprehensive Dafny book |
| Dafny documentation (dafny.org) |
Official reference |
Tradeoffs and Limitations
Approach Tradeoffs
| Approach |
Pros |
Cons |
| Dafny |
Automatic, usable |
Limited expressiveness |
| Coq |
Very expressive |
Manual proofs |
| F* |
More features |
Steeper learning |
When NOT to Use This Skill
- When proofs are not needed
- For low-level systems code (use Verus)
- When performance is critical
Limitations
- Heap reasoning can be tricky
- Some proofs need explicit lemmas
- Not as expressive as Coq
Assessment Criteria
A high-quality implementation should have:
| Criterion |
What to Look For |
| Verification |
All proofs check |
| Readability |
Clear specifications |
| Modularity |
Good lemma structure |
| Termination |
All loops/functions terminate |
Quality Indicators
✅ Good: All specs verified, clear invariants, modular lemmas
⚠️ Warning: Some specs need manual hints
❌ Bad: Unverified code, missing invariants
Research Tools & Artifacts
Verification tools:
| Tool |
Language |
What to Learn |
| Verus |
Rust |
Verified Rust |
| F* |
F* |
Verification |
Research Frontiers
1. Automation
- Goal: More automatic proofs
Implementation Pitfalls
| Pitfall |
Real Consequence |
Solution |
| Failed proofs |
Verification fails |
Add lemmas |