Proofs and Intuitions

A blog about mathematics, computing, formal verification, and the ideas behind them

  • The Vermilion Experiment: Implementing a Lean Backend for Verus

    by Ilya Sergey · October 18, 2026 · 27 min read

    In this post, we discuss Vermilion, an experimental Lean backend for the Verus verifier for Rust, bringing interactive proofs and Lean’s mathematical libraries to programs with ordinary Verus specifications.

  • When the Hard Part Stops Being Hard

    by Ilya Sergey · August 14, 2026 · 3 min read

    A few days ago, a paper I co-authored, Tracking Borrows with Regular Expressions, was accepted to OOPSLA’26. It presents a new type system for Move, a Rust-style smart contract language, built on a rather cute idea: using regular expressions to capture heap reachability. I won’t go into the technical details here. What I want to talk about instead is how the paper was made and how the publication culture in programming language research has changed in the past five months.

  • Liveness Proofs in Veil, Part I: The First Step

    by Qiyuan Zhao and Ilya Sergey · June 24, 2026 · 21 min read

    Safety property means “nothing bad happens during the run of a program”; liveness property means “the program eventually does something good”. In this post, we walk through a simple proof of a liveness property in Veil, using a basic consensus protocol as an example.

  • On the Unreasonable Effectiveness of Property-Based Testing for Validating Formal Specifications

    by Yueyang Feng and Ilya Sergey · May 18, 2026 · 23 min read

    In this post, we show that property-based testing (PBT) is surprisingly effective for validating LLM-synthesised specifications of Lean programs: it is a cheap alternative to symbolic proofs, which helped to detect underspecification in 10% of the specs in state-of-the-art benchmarks for verified code generation.

  • Verifying Move Borrow Checker in Lean: an Experiment in AI-Assisted PL Metatheory

    by Ilya Sergey · March 18, 2026 · 32 min read

    I formalised and proved the correctness of Move’s new borrow checker in Lean: 39,000 lines of mechanised metatheory, produced in under a month with the help of an AI coding assistant. This post tells the story of how it went and what it means for the future of PL research.

  • Verifying Distributed Protocols in Veil

    by Ilya Sergey · February 9, 2026 · 32 min read

    In this post, we discuss how to formalise, test, and prove the correctness of a classic distributed protocol by combining model checking, automated deductive verification, and AI-powered invariant inference in Veil, a new auto-active Lean-based verifier for distributed protocols.

  • Multi-Modal Program Verification in Velvet

    by Ilya Sergey · January 21, 2026 · 20 min read

    In this post, we will show how to specify and verify imperative programs in Lean 4 using Velvet—an embedded verifier, which relies on a combination of automated symbolic and AI-assisted theorem proving techniques.

Subscribe

RSS / Atom feed

Authors

Ilya Sergey (7) Qiyuan Zhao (1) Yueyang Feng (1)

Tags

academia (1) ai (5) distributed systems (2) lean (6) liveness (1) model checking (1) move (1) pl (1) programming (1) rust (1) smt (3) specification (1) testing (1) types (1) veil (2) velvet (1) verification (5) verus (1)

© 2026 VERSE Lab. Powered by Jekyll.

Subscribe via RSS