A 0.2B ByT5 policy that reads a Lean 4 goal state and emits a per-problem
aesop configuration — search budget, rule-set options, and extra tactic and
lemma rules. This repository is a self-contained inference bundle: checkpoint
plus a standalone infer.py (no training-repo dependencies), forward-equivalent
to the training policy.
Every number above — both splits and all ablation rows — is verified per
problem by two independent backends (the Kimina server, and one
lake env lean per proof), with #print axioms as the arbiter: a counted
proof compiles, contains no sorry, and depends on no axioms beyond
propext, Classical.choice, Quot.sound. Policy rows are additionally
checked through both input paths (dataset goal_state, and live goal states
via the satp tactic) with identical solved sets.
The 92 solved test proofs are published in two forms — the policy-emitted
configuration verbatim, and a distilled minimal tactic script — at
LeanSATP proofs/minif2f_test_v2
(branch v2, pinned at b9ed73e); every file compiles on stock Mathlib
v4.26 with import Mathlib alone. The folder ships
distill_v2_trythis.py, the exact script that generates and re-verifies
the minimal view from the configs (aesop? trace + lake env lean +
#print axioms per file).
Premise corpus = LeanDojo Benchmark-4 v10; embeddings come from the frozen
retriever → verifier-version independent. ByT5 base auto-downloads on
first run.
1 → remove the heartbeat cap (diagnostic; reported numbers use the default)
SATP_LEAN_TIMEOUT
300
server-side Lean timeout (s); HTTP timeout = +60
Verification is sequential (one POST per problem, retried with backoff).
Header-less statements get the training header prepended.
Reproduce
reproduce.py re-runs the miniF2F test split end-to-end over the same
greedy decode and compares against 92/244, with either verifier:
bash
1KIMINA_URL=http://localhost:8000 python reproduce.py kimina
2SATP_LAKE_DIR=/path/to/lean-v4.26-project python reproduce.py lake # no server
lake runs one lake env lean per problem (300 s timeout) inside any Lean
v4.26 project with Mathlib built; writes reproduce_<backend>.jsonl
({name, success, tactic, code} per problem). Reference: kimina 92/244
exact (twice, bit-identical — greedy decode is deterministic); all 92 replay
92/92 under lake env lean.
Lean-only path
LeanSATP
(branch v2, pinned at b9ed73e; its README carries the DSP-pipeline
integration numbers and environment pins) runs the same policy as a Lean
tactic: take a dataset row's formal_statement,
add import LeanSATP, and close the proof with satp (satp? also prints the
emitted configuration). Lean handles the rest — elaboration, live goal state →
policy, aesop execution. Same 92/244 solved set.