HN Debrief

We have proof automation now

  • AI
  • Programming
  • Security
  • Developer Tools
  • Open Source

The post argues that formal verification just crossed an important practicality threshold. The example is a Lean implementation of parts of a Zstandard decoder, where the hard part was no longer hand-writing every proof but getting an LLM to generate proof scripts that Lean could check. The claim is not that theorem provers suddenly solve software correctness on their own. It is that proof engineering, which used to make this work painfully expensive, may be cheap enough now to use outside a few elite projects. That matters because the verifier is still exact. If the model emits nonsense, Lean rejects it.

If you build critical software, this points to a near-term use case for proving narrow, high-value properties like memory safety, no secret leakage, or codec round-trips instead of waiting for full-program correctness. The bottleneck is moving from proof-writing to spec design, so teams that invest in precise contracts and machine-checkable invariants now will be positioned to use these tools well.

Discussion mood

Cautiously excited. People largely agreed that LLMs make proof work materially easier and could expand where formal methods are practical, but the enthusiasm was tempered by repeated warnings that specification quality, abstraction choices, and long-term maintenance remain the real choke points.

Key insights

  1. 01

    Security properties are the low-hanging fruit

    Security-focused verification looks much more deployable than trying to prove whole-program semantic correctness. Assertions like no arbitrary code execution, no network access after a point, or no exfiltration of secrets are easy for humans to understand and valuable even when the rest of the system is messy. That reframes formal methods from proving every business rule to carving out machine-checked safety envelopes around the worst failure modes.

    Start with a short list of forbidden behaviors that would be catastrophic in your system and express those as machine-checkable contracts. You can get meaningful risk reduction without first formalizing every product requirement.

      Attribution:
    • nilkn #1
    • kolinko #1
    • jerf #1
  2. 02

    Keep the verified core small

    The strongest practical pattern was not “make the whole codebase dependently typed.” It was to verify a compact trusted core whose guarantees extend outward. That can be a microkernel like seL4, a borrow checker, a parser, a compiler pass, or a cryptographic primitive. Trying to mix every invariant directly into every type and function makes maintenance brittle. Layering proofs around stable boundaries scales better.

    Look for narrow components whose correctness can dominate the safety of a much larger system. Verifying one choke point often buys more than spreading proof obligations evenly across the codebase.

      Attribution:
    • el_pollo_diablo #1
    • less_less #1
    • armchairhacker #1
  3. 03

    Verified assembly is older than the hype

    The article’s speculation about proving optimized assembly drew reminders that this is not a new research direction. People pointed to Fiat Crypto, CryptOpt, Dafny’s lineage, CakeML, and earlier “safe to the last instruction” work as evidence that the idea is proven in serious settings already. What feels new is the prospect that LLMs can slash the human labor needed to connect these pieces, not the underlying concept.

    If you are evaluating this area, do not treat it as greenfield. There is mature prior art in compilers, crypto, and low-level systems that you can build on instead of inventing a new stack.

      Attribution:
    • pjmlp #1
    • keithwinstein #1
    • logicchains #1
  4. 04

    Specs become the main programming interface

    Several comments converged on the idea that theorem-prover workflows turn software development into specification writing plus synthesis. In that model, types, contracts, and theorems are not side artifacts. They become the primary interface between human intent and generated code. That is why some people see languages with rich type systems or contract layers as better near-term bets than plain code generation. They give models a narrower lane and a stronger verifier.

    Invest in richer interface definitions now, even if you are not doing full formal verification yet. Better types and contracts already improve agent behavior and they create the runway for stronger proof-backed automation later.

      Attribution:
    • gz09 #1
    • HelloNurse #1
    • nextaccountic #1
  5. 05

    Choosing abstractions is still the hard part

    People with hands-on theorem prover experience stressed that the bottleneck is not just discharging proof obligations. It is deciding how to represent the problem so the proof is tractable and actually useful. LLMs can brute-force local proof search, but they still need humans to choose the right decomposition, libraries, and statement of the theorem. Code that ignores Mathlib or overfits a toy formalization may look productive while missing the point of formalization entirely.

    Judge these systems by how much help they provide with modeling and decomposition, not just by whether they can finish a proof once you hand them the right theorem. The expensive mistakes happen at the problem-framing stage.

      Attribution:
    • Jhsto #1
    • rtpg #1
    • madhu_ghalame #1
  6. 06

    Practitioners are already using it as a bug finder

    Beyond theory, a few builders reported using models to write TLA and Lean artifacts that exposed real bugs, including data-loss issues and long-standing state machine failures. That is notable because it lowers the bar for adoption. Teams do not need a finished verified product to get value. They can use these tools to formalize subsystems just enough to flush out hidden assumptions and broken transitions.

    Treat lightweight formalization as a debugging technique, not only as a certification exercise. Modeling one operator, protocol, or codec can pay for itself before you ever ship a proof-backed implementation.

      Attribution:
    • empath75 #1
    • henryrobbins00 #1
    • dmix #1

Against the grain

  1. 01

    Adoption may stall despite better tooling

    Cheaper proofs do not automatically create organizational demand for them. For most companies, testing plus model-assisted bug finding may already satisfy the liability and reliability bar they actually optimize for. If users tolerate ordinary breakage and security work is judged as “good enough,” then proof automation may stay confined to niches even if it becomes technically impressive.

    Do not assume technical feasibility will drive immediate mainstream adoption. The deciding factor may be whether your market, regulators, or customers reward stronger guarantees enough to justify process change.

      Attribution:
    • mike_hearn #1
    • colechristensen #1
  2. 02

    Wrong specs remain a first-order failure mode

    Skeptics pushed back with concrete examples where an LLM implemented a feature backwards, wrapped it in passing tests, and would have passed a proof against the same mistaken intent. That argument does not reject formal verification. It rejects the fantasy that verification alone fixes product understanding. In messy real systems, the ambiguity usually lives above the code.

    Use proofs to lock down well-understood properties, not to replace product and systems thinking. When the requirement itself is fuzzy, verification will mostly harden the wrong decision.

      Attribution:
    • andai #1
    • david-gpu #1
    • vessenes #1

In plain english

CakeML
A research language and compiler project that includes a formally verified compiler stack.
CryptOpt
A system for automatically exploring and verifying optimized low-level implementations of cryptographic routines.
Dafny
A programming language and verifier designed for writing specifications and proving program correctness.
exfiltration
Unauthorized removal or leakage of sensitive data from a system.
Fiat Crypto
A project for generating cryptographic arithmetic code together with proofs that it is correct.
formal verification
Using mathematics and machine checking to prove that software or hardware satisfies a precise specification.
Lean
A proof assistant and programming language used to write mathematical proofs and programs that a small trusted kernel can mechanically check.
LiquidHaskell
An extension to Haskell that adds refinement types, which let programmers express and check richer logical properties.
Mathlib
A large community-maintained Lean library of formalized mathematics and supporting proof infrastructure.
microkernel
A minimal operating system kernel that keeps most services outside the kernel to reduce the trusted core.
proof engineering
The practical work of structuring definitions, lemmas, and tactics so that a proof assistant can verify a result.
seL4
A high-assurance microkernel famous for machine-checked proofs of important correctness and security properties.
Sledgehammer
An Isabelle/HOL tool that uses external automated provers and lemma selection to help find proofs automatically.
TLA
Temporal Logic of Actions, a formal specification language often used to model and check concurrent or distributed systems.
Verus
A verification tool and language layer for proving properties of Rust-like programs.
Zstandard
A widely used lossless data compression format and algorithm, often shortened to zstd.

Reference links

Verified compilers and low-level verification

Tools and languages for proof-backed programming

  • Verus
    Mentioned as a promising verification tool for the Rust ecosystem.
  • Subrust
    Suggested as a possible higher-level target language for a formally verified compiler effort.
  • Idris 2
    Linked in response to a question about the current state of Idris.
  • Bundled vs unbundled in Lean
    Used to discuss style tradeoffs in how dependent types and invariants are represented.

Benchmarks and practitioner projects

Background talks and logic references