mirror of
https://github.com/saymrwulf/dalek-ed25519-verified.git
synced 2026-09-03 20:13:48 +00:00
Phase 2b asks the kernel whether any AXIOM is declared under Proofs/. Phase 3
pins the cones of the named certificates. Between them sat every other
declaration in the corpus — around three thousand of them — and a helper lemma
quietly acquiring a hash oracle in its cone moved nothing either phase looked
at.
Phase 2c closes that. Ported from ltl-accumulator-verified, where a nine-attack
self-test proved a source-regex enumerator evadable by attributed, private,
indented and `instance` declarations and by a nested-namespace basename
collision. Reading the compiled environment sees what the kernel saw; no name
shape hides. Every constant contributes module, name, kind and full axiom cone,
and the observed set must equal inventory-allowlist.txt exactly in BOTH
directions, with a count trailer so a truncated run cannot pass as an empty
diff.
FOUR THINGS THIS BUILD GOT WRONG, each caught by a check rather than by review:
- The number of inventory drivers is a per-repo FACT, not an assumption.
dalek and anza cannot import their corpus as one environment (Proofs.Basic
and Proofs.ConstSpecs both declare CurveFieldProofs.zero_spec); risc0 and
betrusted have no Proofs.Basic at all. Determined by compiling a probe.
check.sh now DISCOVERS its drivers from the filesystem instead of naming
two, and the generator refuses to split out a module the repo lacks.
- The split let one real declaration hide behind another's entry. Keyed on
name alone, the two zero_specs produced byte-identical records, so 3022
declarations were covered by 3021 allowlist entries. Caught by the count
trailer. Every record now carries its originating module.
- The gate's success line said "single sanctioned axiom", inherited from the
accumulator's policy. This corpus permits NONE. A success message
describing a different rule is how an assertion stops meaning anything.
- selftest-axgate.sh lifted Phase 2b with a range ending at "Phase 3", so
inserting Phase 2c between them made it swallow the new phase and die on
variables only check.sh defines — surfacing as the BASELINE case failing,
a self-test blaming a gate for its own extraction bug. Both self-tests now
stop at the next phase marker whatever it is called, and refuse to run if
they capture more than one phase. The guard is the fix; the range was the
symptom.
WHAT THIS IS NOT, recorded in TRUSTED-BASE.md at the same length as the claim:
- No independent cone walker. The accumulator cross-checks collectAxioms
against a hand-written walker. Ported here it was wrong in BOTH directions
on mathlib's inductive shapes: EdPoint gave [] against the kernel's three
axioms, and once extended, ProjPoint gave three against the kernel's none.
Two implementations disagreeing both ways are a second wrong answer, not a
check. These cones rest on collectAxioms alone.
- Thirteen Proofs/Scalar* modules are inventoried by nothing — the
second-button seam, still open. Phase 2c names every uncovered module on
every run so the omission is visible rather than inferred.
selftest-inventory.sh exercises the shipping gate with six cases, each
asserting a specific diagnostic, including the one that matters: a cone
widened by one oracle while name, module and kind stay put. Negative-tested by
disabling the gate's diff, which turns two cases red including one for the
wrong reason, correctly reported as such.
Verified green: 20 runs across the four repositories (four buttons, four
harness, four inventory, four axgate, four binding self-tests), zero red. The
four check-scalar.sh greens from the preceding sweep stand: that script neither
reads the pin file nor changed.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
70 lines
3 KiB
Text
70 lines
3 KiB
Text
/- ──────────────────────────────────────────────────────────────────────────
|
|
Proofs/Inventory.lean — environment-derived declaration inventory (main chain).
|
|
|
|
Audit INFRASTRUCTURE, not corpus: excluded from check.sh's compile manifest
|
|
and from its own inventory (its constants live in modules the corpus list
|
|
below does not name). It proves nothing and is imported by nothing.
|
|
|
|
Covers every module check.sh compiles except any listed as needing a
|
|
separate driver (see Proofs/InventoryBasic.lean if present). Whether
|
|
a split is needed was determined by compiling a probe, per repo.
|
|
────────────────────────────────────────────────────────────────────────── -/
|
|
import Proofs.InventoryCore
|
|
import Proofs.Denote
|
|
import Proofs.P25519
|
|
import Proofs.ReduceSpec
|
|
import Proofs.SubNegSpec
|
|
import Proofs.ConstSpecs
|
|
import Proofs.AddSpec
|
|
import Proofs.MulSpec
|
|
import Proofs.SquareSpec
|
|
import Proofs.Square2Spec
|
|
import Proofs.Field
|
|
import Proofs.InvertSpec
|
|
import Proofs.FieldMain
|
|
import Proofs.FeQ
|
|
import Proofs.EdCurve
|
|
import Proofs.EdDenote
|
|
import Proofs.EdDouble
|
|
import Proofs.EdAddProjNiels
|
|
import Proofs.EdAddAffNiels
|
|
import Proofs.EdConvert
|
|
import Proofs.EdMain
|
|
import Proofs.DsmTableSpec
|
|
import Proofs.DsmStepSpec
|
|
import Proofs.DsmLoopSpec
|
|
import Proofs.DsmNafLoadSpec
|
|
import Proofs.DsmNafMath
|
|
import Proofs.DsmNafLoopSpec
|
|
import Proofs.DsmNafSpec
|
|
import Proofs.DsmMulSpec
|
|
import Proofs.ToBytesMath
|
|
import Proofs.ToBytesSpec
|
|
import Proofs.CompressSpec
|
|
import Proofs.ScalarPackSpec
|
|
import Proofs.SigApexSpec
|
|
import Proofs.PointLiftSpec
|
|
import Proofs.PointEqSpec
|
|
import Proofs.DecompressSpec
|
|
import Proofs.FromBytesSpec
|
|
import Proofs.DecompressMain
|
|
open Lean Ed25519Inventory
|
|
|
|
/-- Exactly the modules this driver covers. check.sh verifies, in BOTH
|
|
directions, that the union of the two drivers' lists is its PROOFS
|
|
manifest minus the audit infrastructure. -/
|
|
def corpus : Array Name :=
|
|
#[`Proofs.Denote, `Proofs.P25519, `Proofs.ReduceSpec, `Proofs.SubNegSpec,
|
|
`Proofs.ConstSpecs, `Proofs.AddSpec, `Proofs.MulSpec,
|
|
`Proofs.SquareSpec, `Proofs.Square2Spec, `Proofs.Field,
|
|
`Proofs.InvertSpec, `Proofs.FieldMain, `Proofs.FeQ, `Proofs.EdCurve,
|
|
`Proofs.EdDenote, `Proofs.EdDouble, `Proofs.EdAddProjNiels,
|
|
`Proofs.EdAddAffNiels, `Proofs.EdConvert, `Proofs.EdMain,
|
|
`Proofs.DsmTableSpec, `Proofs.DsmStepSpec, `Proofs.DsmLoopSpec,
|
|
`Proofs.DsmNafLoadSpec, `Proofs.DsmNafMath, `Proofs.DsmNafLoopSpec,
|
|
`Proofs.DsmNafSpec, `Proofs.DsmMulSpec, `Proofs.ToBytesMath,
|
|
`Proofs.ToBytesSpec, `Proofs.CompressSpec, `Proofs.ScalarPackSpec,
|
|
`Proofs.SigApexSpec, `Proofs.PointLiftSpec, `Proofs.PointEqSpec,
|
|
`Proofs.DecompressSpec, `Proofs.FromBytesSpec, `Proofs.DecompressMain]
|
|
|
|
#eval show MetaM Unit from emitInventory corpus
|