No theorem was wrong; every fix is spec-surface, audit-mechanism, docs, or harness coverage. Changes: LEAN (Claude F1, GPT M4): - acceptIncl: the consumer's inclusion accept (m<n ∧ Root=some r) is now a named object, not just a theorem hypothesis. Root alone accepts out-of-range m; acceptIncl pins the guard. - acceptIncl_complete / acceptIncl_sound: route Thm 1/2 through it. - extractCons_correct_paper: Thm 3 at the paper's exact quantifiers (n₀≤n₁, no separate 0<n₀; n₀=0 discharged since D₀=[]=take 0). SCRIPT (GPT H1/H2, Claude F3): - Phase 3b: fail-closed audit-surface COVERAGE — every named decl under Proofs/ and gen/ must be in CONES or a documented EXCLUDE (sha256, Bytes); anonymous gen instances count-pinned; every CONES key must be queried by AxiomCheck (no pin-but-never-check). Tested: an unclassified theorem now makes the button exit 1. - H2: distinct markers — LEAN GREEN always, ATTESTATION GREEN only when fidelity actually ran; SKIP/absent-pacta no longer emit the strong marker. Attestation gate keys on ATTESTATION GREEN. - Phase 0: orphan-olean guard (every Proofs/*.olean needs a sibling .lean); deleted 6 orphans; untracked all *.olean/.lake from git and gitignored them (root cause of the F3 tarball leak). HARNESS (Claude F1, GPT M3): - added out-of-range families (m≥n, m>n, n₀>n₁, n₀=0); re-pinned counts 230,271 / 230,016 (match the reviewer's independent RFC difftest exactly); narrowed 'exhaustive' wording to the tested domain. DOCS: README stale rows fixed (freeze banner no longer contradicts table); KNOWN-GAPS gap 3 reworded (general Lemma 2 = specializations), +gaps 9 (cost), 10 (pin init), 11 (acceptIncl resolved); STATEMENT-MAP +acceptIncl rows, +Lemma-2-general note, +constant-vs-property clarification for §10(i). Button: EXIT 0, coverage complete, ATTESTATION GREEN, 230,271/230,016. 56 pinned cones over an ENFORCED surface. LTL untouched (12, bcd15f9d). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3.7 KiB
Statement map: paper §6 ↔ Lean corpus
The kernel guarantees every proof below; what a reviewer must vet is the statements — that each Lean theorem says what the paper's item says. This map is the review surface. Paper = "The Lean Transparency Log" (https://ltl.zkdefi.org/paper), §6 and §10 (which scopes the mechanization to items i–v).
| paper item | Lean name | file | cone |
|---|---|---|---|
| §5.3 split point k (RFC 9162) | kbelow + kbelow_pos/lt, le_two_kbelow, kbelow_pow2 (2^j = k < n ≤ 2^{j+1} pins k uniquely) |
Basic | no hash axiom |
| §5.3 MTH | MTH |
Basic | sha256 |
| §5.3 Path | Path |
Completeness | sha256 |
| §5.3 Root (App. B) | Root (Option = rejection) |
Basic | sha256 |
| §5.3 inclusion accept | acceptIncl (= m < n ∧ Root … = some r); acceptIncl_complete, acceptIncl_sound route Thm 1/2 through it |
Basic, Completeness, Extract | sha256 (+choice) |
| Lemma 2 (general abstract form) | not mechanized as one theorem — proved as specializations (see KNOWN-GAPS gap 3); the row below and the Lemma-2 rows are those instances | — | — |
| §5.3 ConsRec | ConsRec (+ machine-checked base-refactor equivalences consRec_base_true_eq/false_eq) |
Basic, Refactor | sha256 |
| Lemma 1 (domain separation) | domsep |
Basic | axiom-free |
| Theorem 1 (inclusion completeness) | incl_complete |
Completeness | sha256 (+choice) |
| Lemma 2, width fact ("65-byte preimages") | Hash = length-32 subtype; hnode_preimage_inj |
gen, Basic | propext |
| Lemma 2, whole-tree instance | extractMTH + extractMTH_correct |
Descent | sha256 (+choice) |
| Lemma 2, ConsRec instance (Thm 3 steps 1–2) | consRecBinding |
Binding3 | sha256 (+choice) |
| Theorem 2 (inclusion soundness, explicit 𝓔) | extractIncl + extractIncl_correct |
Extract | sha256 (+choice) |
| Theorem 3 (consistency soundness, explicit 𝓔′) | extractCons + extractCons_correct; extractCons_correct_paper at the paper's exact quantifiers (n₀=0 discharged) |
Theorem3 | sha256 (+choice) |
| Prop 1(1) (pin monotonicity + prefix) | pinAccept, pinAccept_monotone, pin_prefix_correct |
PinStore | sha256 (+choice) |
| Prop 1(2), Merkle share | fork_distinct (different roots ⇒ different content); transferability = signature layer, out of scope |
PinStore | sha256 |
| non-vacuity guards (anti-pigeonhole) | extractIncl_nonvacuous, extractMTH_nonvacuous, extractCons_nonvacuous, pin_prefix_nonvacuous |
Extract/Descent/Theorem3/PinStore | sha256 |
| definition fidelity vs deployed verifier | fidelity/ harness: MTH==merkle_root, Path==inclusion_proof, verifier agreement 164,479 + 164,224 (paper's exact case set) |
fidelity | (testing) |
Note on "assumption-free" (paper §10(i)): incl_complete's cone lists
LTLAcc.sha256, but the theorem assumes no property of it — it
merely mentions the opaque constant. Constant-dependence is not
property-assumption; the soundness theorems likewise carry sha256
without assuming collision resistance.
Design invariant of every soundness statement: the collision is the output
of a named extractor function and correctness is a claim about that
output. A bare ∃ x y, x ≠ y ∧ sha256 x = sha256 y is provable by
pigeonhole alone (sha256 maps an infinite domain into the finite 32-byte
type), so it carries no cryptographic content; the guards above prove each
extractor's conclusion is false on honest inputs, hence not
choice-dischargeable.
Audit surface (enforced by verification/check.sh, exit 0 = green):
every theorem/def under Proofs/ (52) plus the two load-bearing gen/
instances; excluded by nature: the sanctioned axiom sha256 (it is the
boundary) and abbrev Bytes (alias, no cone content).