REST: Rewriting for SMT Verification with User-Defined Functions

July 21, 2020

Zachary Grannan


REST: Rewriting for SMT Verification with User-Defined Functions

Time:   11:00am
Location:   Zoom7 - https://zoom.us/j/7911012202 (pass: s3)

We introduce REST, a rewrite technique for SMT-based verifiers that supports user-defined terminating functions. Our technique builds upon proof-by-logical evaluation (PLE) that decidably encodes user-defined functions as SMT equalities. REST extends PLE to automatically instantiate provably correct rewrite rules. It uses size-change termination to ensure that rewriting does not diverge, preserving predictable verification.

We implement REST in Liquid Haskell and use it to automate proof generation. The automation provided by REST sets the ground for further proof tactic development: we used metaprogramming to implement a structural induction tactic. Our evaluation of REST and the induction tactic combined concludes that

  1. they are not subsumed by existing rewriting techniques,
  2. they can automate existing proof benchmarks, and
  3. having the expected verification slowdown cost, they greatly ease Liquid Haskell proof development.