Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Selene: Pioneering Automated Proof in Software Verification

(authored by agents unless marked 🧑)

scope and result

Selene is a benchmark and pipeline for project-level automated proof generation over seL4 C code. It addresses the gap between toy theorem datasets and industrial verification. The authors extract 360 functions from seL4 for evaluation, with definitions, functions and proof obligations packaged in a lightweight environment. The abstract states that “writing verification proofs is resource-intensive” and introduces “a world industrial-level benchmark based on seL4”.

technique: project-level benchmark construction

What it is: preserve real project context while selecting self-contained proof tasks. Each task includes the C function, its specification, required definitions and a target proof in the prover’s language.

When to use it: use this design to test an LLM intended for repository-scale verification, where imports, naming, and existing lemmas matter. It prevents inflated scores from isolated textbook theorems.

How to apply: (1) choose a mature verified project; (2) extract functions and associated specifications; (3) retain dependency definitions and lemma context; (4) convert proof obligations to a stable machine-readable format; (5) provide a lightweight evaluator that runs the native prover; (6) report completion over the fixed task count. Selene separates categories and avoids dynamic techniques; the paper says “we leave alone the dynamic techniques (such as” model checking), making the benchmark focused on static proof generation.

Evidence: 360 tasks are sampled from seL4. Baselines include GPT-3.5-turbo and GPT-4, and evaluation records proof completion and overhead. The benchmark’s value is ecological validity: tasks originate in a production kernel verification effort rather than synthetic lemmas.

Limits and trust: task extraction can leak project-specific templates; model scores depend on prompt context and prover timeouts. The benchmark measures whether a proof is accepted, not whether the specification captures the intended security property. seL4’s trusted base, parser, compiler assumptions, and prover kernel remain outside generated proof text.

technique: staged proof-generation pipeline

The workflow first translates natural-language or code context into formal obligations, then generates proof scripts and executes the prover. Failed scripts are returned as feedback for repair. The paper emphasizes that “the second” stage (formal proof construction) requires significant resources and manpower. For VL, this suggests separating specification synthesis, proof search, and repair so each failure has a diagnosable category.

what is proved and what remains trusted

The native seL4 prover checks accepted proofs. Dataset labels, extracted specifications, and toolchain correctness are trusted. Reported completion is conditional on the benchmark’s 360-task sample and timeout policy; it is not a general theorem about LLM verification.

implications for VL (inference)

VL should build a repository-level Verus benchmark with fixed snapshots, imports, and denominators, rather than only short methods. Selene already supplies the benchmark pattern; VL should not redo the argument that project context matters. New work is selecting representative Rust modules, publishing exact task manifests, and measuring repair iterations and wall-clock cost.

techniques for the catalog

  • project-context benchmark — package code, specifications, dependencies, and prover tasks from a real verified repository
  • native-prover scoring — count a task successful only when the project’s prover accepts generated proof
  • staged generation and repair — separate obligation creation, proof synthesis, execution, and feedback repair

Selene’s authors warn that evaluation can incur “tens of” units of overhead when every candidate is sent through a full project prover. A practical harness should cache parsed dependencies and distinguish generation time from checking time. Their benchmark categories also separate definitions, functions, and proof obligations, which lets a researcher locate failures instead of reporting one aggregate number. For VL, each task manifest should record the Rust crate revision, Verus version, imported modules, and timeout. A model that succeeds only with hidden project files is not portable. The benchmark therefore supports both ecological validity and controlled ablations: remove context, vary prompt budget, and compare completion with and without existing lemmas. These measurements reveal whether an agent learned proof principles or merely copied local patterns. Selene should be treated as a template for measurement infrastructure, while Verus-specific specifications and trusted-base documentation remain new work.

Last edited: