You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
## What & why
The **sixth backend** — Lean4 — plus a soundness-honesty fix it exposed.
## Lean4 backend
`lean <file>` elaboration. The subtlety Lean forces us to be honest
about: a green exit does **not** mean proven — `sorry` is only a
*warning* and still exits 0. So the verdict is parsed from output, not
the bare exit code:
- exit non-zero → **Error**
- exit 0 + `sorry` in output → **Admitted** (a hole rode along)
- exit 0 clean → **Unknown** — elaborated, but arghda refuses to claim
`Proven` without a `#print axioms` audit (it could still use
`native_decide`/`sorryAx`). Exactly the plan's "honest Unknown when the
audit is absent".
Dotted modules reuse `graph::module_name_of`; `.lean` `module_to_path`;
import parser for top-level `import Mod` (`open` is a namespace
directive, **not** an edge — deliberately ignored); `Main.lean` root
discovery. `LeanEscapeHatch` (sorry/admit/native_decide/unsafe), named
`escape-hatch` to reuse the amber cap. Wired via `--backend lean4`.
Ground-truthed against Lean 4.13.0.
## Honesty fix exposed by M6 (all backends)
`check`'s verdict was collapsing to proven-eligible/rejected — which
mislabelled a *clean, correct* Lean file as `rejected`, and an SMT `sat`
as `rejected`. It now reports the real verdict word (**proven-eligible /
refuted / unknown / admitted / postulated / rejected**), and the human
line drops the assistant-centric ok/FAILED.
## Verified (ran, not inferred)
- `cargo test` → **119 passing, 0 failed** (+5 lean unit, +4 lean-escape
unit, +2 lean integration).
- clippy -D warnings, fmt, SPDX clean.
- **Dogfooded real lean:** clean proof → `unknown`, `sorry` →
`admitted`; re-dogfooded `z3 sat` → `refuted`, `z3 unsat` →
`proven-eligible`, `agda` → `proven-eligible`. `arghda doctor` → 6
backends runnable.
## Honest scope
M6 = ~85%. Follow-on 15%: lake-env/`LEAN_PATH` for project-wide
multi-file resolution, and the per-declaration `#print axioms` audit to
promote `Unknown` → `Proven`.
## Milestone status
Six backends across both interaction models. Next: M11 (studio JSON
freeze + Groove manifest — the last open v0.1 milestone), M7 (Echidna
seam).
---
_Generated by [Claude
Code](https://claude.ai/code/session_012MpYSh6Wy8YMBH2E3qVyT7)_
Co-authored-by: Claude <noreply@anthropic.com>
"Flying-Logic epic M11: studio JSON freeze (reason/0.1) + Groove /.well-known/groove manifest (the one open v0.1 milestone; `arghda doctor` output feeds the manifest).",
168
189
"Flying-Logic epic M7: Echidna dispatch seam (feature-gated client, same Outcome).",
0 commit comments