1. Verus overview
  2. Getting started
  3. Getting started
    1. ... on the command line
    2. ... with VSCode
  4. Tutorial: Fundamentals
  5. Using Verus within Rust
  6. Basic specifications
    1. assert, requires, ensures, ghost code
    2. Expressions and operators for specifications
    3. Integers and arithmetic
    4. Equality
  7. Specification code, proof code, executable code
    1. spec functions
    2. proof functions, proof blocks, assert-by
    3. spec functions vs. proof functions, recommends
    4. Ghost code vs. exec code
    5. const declarations
    6. Putting it all together
  8. Recursion and loops
    1. Recursive spec functions, decreases, fuel
    2. Recursive exec and proof functions, proofs by induction
      1. Lightweight termination checking
    3. Loops and invariants
      1. Loops with break
      2. For Loops
      3. Iterators
    4. Lexicographic decreases clauses and mutual recursion
  9. Datatypes: struct and enum
    1. Struct
    2. Enum
  10. Libraries
    1. Specification libraries: Seq, Set, ISet, Map, IMap
    2. Executable libraries: Vec
  11. Spec closures
  12. Quantifiers
    1. forall and triggers
    2. Multiple variables, multiple triggers, matching loops
    3. exists and choose
    4. Proofs about forall and exists
    5. Example: binary search
    6. Ambient (broadcast) lemmas
  13. Tutorial: Proof Development
  14. Developing proofs
    1. Using assert and assume
    2. Devising loop invariants
    3. Proving absence of overflow
  15. SMT solving, automation, and where automation fails
    1. What's decidable, what's undecidable, what's fast, what's slow
    2. Integers and nonlinear arithmetic
    3. Bit vectors and bitwise operations
    4. forall and exists: writing and using triggers, inline functions
    5. Recursive functions
    6. Extensional equality
    7. Libraries: incomplete axioms for Seq, Set, Map
  16. Managing proof performance and why it's critical
    1. Measuring verification performance
    2. Quantifier profiling
    3. Modules, hiding, opaque, reveal
    4. Hiding local proofs with assert (...) by { ... }
    5. Structured proofs by calculation
    6. Proof by computation
    7. Spinning off separate SMT queries
    8. Breaking proofs into smaller pieces
  17. Using LLM assistants
    1. Using LLMs to develop proofs
    2. Using LLMs to develop specifications
  18. Checklist: what to do when proofs go wrong
  19. Tutorial: Verification and Rust
  20. Mutation, references, and borrowing
    1. Mutable references
    2. Assertions about mutable references
  21. Traits
  22. Iterator Specifications
    1. Finite Iterators
    2. Infinite Iterators
  23. Higher-order executable functions
    1. Passing functions as values
    2. Closures
  24. Ghost and tracked variables
  25. Strings
  26. Macros
  27. Unsafe code & complex ownership
    1. Cells / interior mutability
    2. Pointers
    3. Concurrency
  28. Logical atomicity
    1. Atomic specifications
    2. Invoking the linearization point
    3. Calling a logically atomic function
  29. Verifying a container library: Binary Search Tree
    1. First draft
    2. Encapsulating well-formedness with type invariants
    3. Making it generic
    4. Implementing Clone
    5. Mutable references in a container
    6. Full source for the examples
  30. Interacting with unverified code
    1. Calling unverified code from verified code
    2. Calling verified code from unverified code
  31. Understanding the guarantees of a verified program
    1. Assumptions and trusted components
    2. Memory safety is conditional on verification
    3. Calling verified code from unverified code
  32. Installation, configuration, and tooling
  33. Installation and setup
    1. IDE Support
    2. Installing and configuring Singular
  34. Project setup and development
    1. Using Verus via Cargo
    2. Documentation with Rustdoc
    3. Ghost Erasure
  35. Reference
  36. Supported and unsupported Rust features
  37. Verus syntax by example
  38. Modes
    1. Function modes
    2. Variable modes
  39. Contributed Extensions
    1. Automatic spec to exec functions
    2. Spec and proof attributes for exec functions
      1. Automatic exec to spec functions
  40. Specification language
    1. Type Interpretations
    2. Spec expressions
      1. Operator Precedence
      2. Rust subset
      3. Arithmetic
      4. Bit operators
      5. Coercion with as
      6. Spec equality (==)
      7. Extensional equality (=~=, =~~=)
      8. Prefix and/or (&&& and |||)
      9. Chained operators
      10. Implication (==>, <==, and <==>)
      11. Quantifiers (forall, exists)
      12. Such that (choose)
      13. Trigger annotations
      14. The view function @
      15. Spec index operator []
      16. The has operator
      17. The is operator
      18. The matches operator
      19. decreases_to!
  41. Proofs
    1. Proof statements
      1. assert
      2. assume
      3. assert ... by
      4. assert forall ... by
      5. assert ... by(...)
      6. reveal, reveal_with_fuel, hide
      7. reveal_strlit
    2. Prover modes
      1. "default" mode
      2. bit_vector
      3. nonlinear
      4. integer_ring
      5. compute/compute_only
  42. Function specifications
    1. Function Signatures
      1. Exec fn signature
      2. Proof fn signature
      3. Spec fn signature
    2. Signature clauses
      1. requires / ensures
      2. returns
      3. opens_invariants
      4. no_unwind
      5. recommends
    3. Traits and signature inheritance
    4. Specifications on FnOnce
  43. External trait specifications
  44. Loop specifications
    1. invariant
    2. invariant_except_break / ensures
  45. Recursion and termination
    1. decreases ... when ... via ...
    2. Datatype ordering
    3. Cyclic definitions
  46. Type invariants
  47. Attribute list
  48. Directives
    1. assume_specification
    2. global
  49. Misc. Rust features
    1. Statics
    2. Unions
    3. Pointers and cells
  50. Command line
    1. --record
  51. Planned future work