Proof-Carrying Evolution: Black-Box Search, White-Box Flight
Organizations: Massachusetts Institute of Technology. · Universidad Politécnica de Madrid.
Abstract
We study whether a language model can help design controllers whose behavior can be formally checked. In proof-carrying evolution (PCE), a search proposes controllers together with their certificates. Their mathematical forms are fixed; a proposer chooses their numerical parameters together. Certificate checks guide selection, and only a certified candidate can be returned. The deployed artifact is a control law and its certificate; the language model is used only during design. We compare four language models with classical search and synthesis on docking under a speed limit, pursuit of a maneuvering target, and attitude control on SO(3), using paired runs and shared proposal allowances. Certificates are checked in exact rational arithmetic during search on the linear problems. On SO(3), the search uses floating-point checks, followed by exact re-verification of every reported champion. The best run of each method also receives Lean 4 proofs of its stated control properties. On the linear problems, the strongest models beat the standard classical baselines on every run, but a classical optimizer that chooses certificates for the same objective closes most of that lead. Among the cited pursuit champions, the ranking does not survive a change from Euler to zero-order-hold dynamics. On SO(3), no model detectably outperforms CMA-ES when mixed with classical mutation. When models write every proposal, one tested model improves on CMA-ES and the other performs worse than its mixed variant. All search medians remain below the hand-tuned law. In a docking control with the objective and mutation operator held fixed, retaining certified candidates yields new certified designs in every run; removing this rule yields none.
Figures & tables
| Problem | Parameters searched | Check during the search | Check afterwards |
|---|---|---|---|
| Docking | gain and certificate factor | exact: stability, the speed-limit envelope and the docking bound | Lean proof for the best run of each arm |
| Pursuit | gain and certificate factor | exact: robust decrease and the capture radius | exact re-certification of each champion; Lean proof for the best run of each arm |
| SO(3) | fifteen diagonal gains of the controller and the certificate | floating point: regional decrease, by a linear program | exact re-check of each champion and of the positivity of ; Lean proof for the best run of each arm and for the hand-tuned law |
| Docking | Pursuit | SO(3) attitude | |
| Objective | bound (min.) | radius (min.) | angle (max.) |
| Paired seeds | 20 | 20 | 20 |
| Population generations | |||
| Proposal allowance per run | 534 | 534 | 120 |
| Model proposals | a batch of eight every third generation | ||
| Share written by the model | about 1 in 8 | about 1 in 8 | about 1 in 5 |
| median | |||||||
|---|---|---|---|---|---|---|---|
| Control | A | B | A | B | A / B / T | (Holm ) | |
| interface | Astra (coding agent) | Astra | 20 | 38 | 38.5 | 11 / 6 / 3 | |
| interface | Astra (text-only) | Astra | 20 | 38.5 | 38.5 | 6 / 5 / 9 | |
| interface | Opus (CLI) | Opus | 20 | 66.5 | 68.5 | 11 / 8 / 1 | ( ) |
| reasoning effort | Fable (effort low) | Fable (effort high) | 20 | 49.5 | 39 | 2 / 17 / 1 | |
| reasoning effort | gpt-oss | gpt-oss (effort high) | 20 | 95 | 95.5 | 10 / 9 / 1 | |
| unequal thrusters | tighter speed limit | wider initial set | ||||
|---|---|---|---|---|---|---|
| Arm | cert. | median | cert. | median | cert. | median |
| Gaussian mutation | 10/10 | 370.5 | 8/10 | 430.0 | 10/10 | 454.0 |
| CMA-ES | 10/10 | 675.5 | 8/10 | 1005.5 | 10/10 | 610.0 |
| alternating SDP synthesis (full allowance) | 8/10 † | 51.0 | 10/10 | 64.0 | 10/10 | 62.0 |
| Astra | 4/4 | 38.0 | – | – | – | – |
| Fable (effort high) | 8/8 | 38.0 | – | – | – | – |
| vs. PD grid | |||||||
| Arm | Cert. | Median | Best | First batch | med. | W / L / T | Holm |
| Gaussian mutation | 20/20 | 0.04140 | 0.03671 | – | 0 / 20 / 0 | ||
| CMA-ES | 20/20 | 0.04446 | 0.03696 | – | 0 / 20 / 0 | ||
| PD grid search † | 20/20 | 0.03388 | 0.03388 | – | reference | ||
| Astra | 20/20 | 0.02857 | 0.02857 | 0.02857 | 20 / 0 / 0 | ||
| Sol | 20/20 | 0.02960 | 0.02857 | 0.04444 | 20 / 0 / 0 | ||
| Arm | (24 gen.) | (48 gen.) | (96 gen.) |
|---|---|---|---|
| Gaussian mutation | 0.04039 | 0.03861 | 0.03850 |
| CMA-ES | 0.04577 | 0.03418 | 0.02943 |
| PD grid search | 0.03388 | 0.03879 | 0.03563 |
| gpt-oss | 0.03946 | 0.03739 | 0.03703 |
Appendix figures & tables8 assets
Supplementary material from the paper’s appendix.
Appendix
| Statement class | Checked by |
|---|---|
| Per-candidate control theorems: stability, safety envelope, safe_forever , docking within ; the strategy-quantified pursuit bound and trajectory-level capture; the nine-cell saturated decrease and its trajectory chain; the SO(3) step and regional decrease; template- or LLM-authored alike | Lean 4 kernel ; footprint by an independent Lean.collectAxioms driver, a subset of [propext, Classical.choice, Quot.sound] |
| In-loop admissibility on the linear problems; step counts ; certificate completions; the stage rescoring of Table ; the re-verification of every SO(3) champion and the positive definiteness of its | Exact rational arithmetic (Python Fraction ) |
| Campaign medians, paired differences, bootstrap intervals, Wilcoxon and Holm | Float statistics , recomputed from the run summaries before every release |
| Fitness, the SO(3) in-loop scoring, trajectories, attack results, session-log audits | Float simulation and forensics (unverified) |
| Population or statistic | Value |
| Seeded population: cross-term ratio | 2.5 |
| Gaussian champions: cross-term ratio | 2.9 |
| Synthesis champions: cross-term ratio | 4.5 |
| gpt-oss champions: cross-term ratio | 3.5 |
| Opus champions: cross-term ratio | 3.6 |
| Astra champions: cross-term ratio | 6.3 |
| optimizer | implementation | per model call | stops at |
|---|---|---|---|
| GOA GEPA | GEPA 0.1.4 (PyPI), gepa engine | one reflection: reads a candidate and its feedback, writes one revision | 250 reflections or 560 evaluations |
| GOA Meta-Harness | GEPA GitHub commit 48f1f65d , meta_harness engine | one agent session: reads all earlier candidates, may run code, writes up to 10 | 60 sessions or 560 evaluations |
| GOA Omni | same commit, optimize_best_of then optimize_sequential | as the engine running (GEPA, Meta-Harness, AutoResearch) | , then evaluations; unused allowances are not passed on |
| prime-agent | prime-agent 0.9.7, autonomous mode | one agent turn in a persistent Python kernel, often submitting tens of genomes by script | 560 evaluations, or a time or spending limit |
| simulated peak | certified-set peak | ||||||
|---|---|---|---|---|---|---|---|
| Problem | Arm | median | max | median | max | ||
| docking | Gaussian mutation | 0.021 | 0.028 | 0/20 | 0.030 | 0.040 | 0/20 |
| docking | CMA-ES | 0.014 | 0.023 | 0/20 | 0.025 | 0.035 | 0/20 |
| docking | alternating SDP synthesis (full allowance) | 0.137 | 0.158 | 0/20 | 0.213 | 0.219 | 20/20 |
| docking | Astra | 0.026 | 0.048 | 0/20 | 0.061 | 0.094 | 0/20 |
| docking | Sol | 0.027 | 0.170 | 0/20 | 0.063 | 0.223 | 2/20 |
| Design | Exact check | Lean theorems | Trajectory | Model step | Noise, rounding | Thrust limit | Zero-order hold |
|---|---|---|---|---|---|---|---|
| docking: Clohessy–Wiltshire, Euler step at s | |||||||
| Gaussian mutation | in loop | 19 | Lean | Lean | Lean | Lean | exact |
| CMA-ES | in loop | 19 | Lean | Lean | Lean | Lean | exact |
| alternating SDP synthesis | in loop | 19 | Lean | Lean | Lean | Lean | exact |
| Astra | in loop | 19 | Lean | Lean | Lean | Lean | exact |
| Sol | in loop | 19 | Lean | Lean | Lean | Lean | exact |
Formal Verification
Formal verification uses mathematical models and machine-checked proofs to establish whether software and systems satisfy precise specifications.
See all 354 papers