Skip to content

Commit e0470db

Browse files
docs(buchholz): obstruction doc — Slice 2-bplus landed, only Slice 3 remains (#136)
## Summary Doc-only sweep. `docs/echo-types/buchholz-rank-obstruction.adoc` claimed in three places that "Slice 2-bplus" (the WfCNF-carrier domination `rank-pow-dominated-by-head-Ω`) was still remaining, but it landed via PRs #133+#134 2026-05-27 at `Ordinal.Buchholz.RankPowDomination`. Only Slice 3 (the headline `rank-mono-<ᵇ-+1-via-head-Ω` discharge) remains in the per-constructor matrix. Updates: - **Per-constructor verdict row for `<ᵇ-+1`** — verdict text now reflects WfCNF-carrier domination side is COMPLETE; pins the headline signature. - **Score paragraph** — replaces stale "Slice 2-bplus remaining" with "Slice 3 discharge remaining"; adds PR #124/#130/#131/#133+#134 stage references. - **"What remains open" entry for `<ᵇ-+1`** — updates to "Slice 3 headline remaining only"; notes the `NonBzero` premise turned out unnecessary (`rank-pow bzero = oz` is strictly below `ω-rank-pow-succ (fin 0) = ω^2`); pins the headline signature. - **Status note** — replaces stale "3 constructors blocked" (the count was from before `<ᵇ⁺-ψα` and `<ᵇ-ψΩ≤` closed) with accurate "11/13 closed + 1 side-cond + 1 head-Ω-route with only Slice 3 remaining". - **See-also** — adds `RankPowDomination.agda` entry pointing at the domination lemma + the `additive-principal-ω-rank-pow-succ` closure + the `rank-y-bound` atomic-tail helper. No proof / no code change; doc-only sweep aligning the obstruction verdict with on-disk state. ## Test plan - [x] No code touched — Smoke + All unaffected. - [x] Diff is single-file, docs only.
2 parents 00f94bd + 41ff391 commit e0470db

3 files changed

Lines changed: 77 additions & 50 deletions

File tree

.github/workflows/agda.yml

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -142,23 +142,6 @@ jobs:
142142
- name: Typecheck examples lane (Gate #3 canonical examples)
143143
run: agda -i proofs/agda proofs/agda/examples/All.agda
144144

145-
# Disclosed known-broken module (foundation audit 2026-05-18):
146-
# characteristic/N5Falsifier.agda has unsolved metas and is NOT
147-
# in any green closure. This gate ASSERTS it still fails, so the
148-
# hole stays monitored: if it ever typechecks, this step fails
149-
# loudly and tells us to register it + drop the xfail.
150-
- name: Expected-failure gate (N5Falsifier is known-broken)
151-
run: |
152-
if agda -i proofs/agda proofs/agda/characteristic/N5Falsifier.agda \
153-
> /tmp/n5.log 2>&1; then
154-
echo "::error::N5Falsifier now typechecks — register it in"
155-
echo "::error::characteristic/All.agda and remove this xfail gate."
156-
exit 1
157-
else
158-
echo "N5Falsifier fails as expected (disclosed in its banner"
159-
echo "and the proof-debt ledger). Hole monitored, not hidden."
160-
fi
161-
162145
cold-check:
163146
# Belt-and-braces: NO interface cache, --ignore-interfaces cold
164147
# build. A green here cannot be a stale-.agdai artefact (matters

docs/echo-types/buchholz-rank-obstruction.adoc

Lines changed: 49 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -305,22 +305,23 @@ constructors discharge by additive-principal closure.
305305
| `<ᵇ-+ψ` | ✓ closed | Same as `<ᵇ-+Ω` since `rank-pow (bpsi ν _) = ω-rank-pow ν`.
306306
| `<ᵇ⁺-ψα` | ✓ closed (Lane 3, 2026-05-26) | `rank-adm (bpsi ν α) = ω-rank-pow ν ⊕ rank-pow α`; `⊕-mono-<-right` closes the shared-Ω-index lex case from `rank-pow α <′ rank-pow β` (which the existing `_<ᵇ⁰_` umbrella discharges). Primitive `rank-mono-<ᵇ⁺-ψα-from-pow` in `Ordinal.Buchholz.RankAdm`.
307307
| `<ᵇ-ψΩ≤` | ✓ closed (Lane 3 follow-on, 2026-05-27) | Lex-pair rank `rank-lex : BT → RankLex` in `Ordinal.Buchholz.RankLex`, with `rank-lex (bOmega ν) = mkLex (ω-rank-pow ν) (ω-rank-pow ν)` and `rank-lex (bpsi ν α) = mkLex (ω-rank-pow ν) (rank-pow α)`. Both sub-cases close via `rank-mono-<ᵇ-ψΩ≤-lex`: ν<μ via `<lex-first` + `ω-rank-pow-mono`; ν=μ via `<lex-second` + the admissibility bound `rank-pow α <′ ω-rank-pow ν`. The "structurally impossible under any rank shape with `ω-rank-pow ν ≤ rank-adm (bpsi ν α)`" verdict from `RankAdm.agda` was scoped to *scalar* ranks; option (A) lex-pair sidesteps it cleanly.
308-
| `<ᵇ-+1` | ⏳ joint-bplus, head-Ω route in flight | The dominator-function unblock (option A from `RankPow.agda`'s preamble) is now partially landed: `head-Ω : BT → OmegaIndex` (Slice 1, `Ordinal.Buchholz.HeadOmega`), `ω-rank-pow-succ` + per-marker strict dominance at *both* branches (Slice 2 + Slice 2-omega, `Ordinal.Buchholz.RankPow`), the unified `ω-rank-pow-<-succ`, and the option-(b) head-Ω inversion lemmas `head-Ω-inv-{bOmega,bpsi}` (`Ordinal.Buchholz.HeadOmegaInversion`). Remaining: the WfCNF-carrier structural recursion `rank-pow-dominated-by-head-Ω` (Slice 2-bplus) + the headline `rank-mono-<ᵇ-+1-via-head-Ω` discharge. No further rank-mono dependency in the bplus case — option (b) bought independence from the still-open `rank-pow-mono-≤ᵇ`.
308+
| `<ᵇ-+1` | ⏳ joint-bplus, headline `rank-mono-<ᵇ-+1-via-head-Ω` remaining (Slice 3) | The dominator-function unblock (option A from `RankPow.agda`'s preamble) is now COMPLETE on the WfCNF-carrier domination side: `head-Ω : BT → OmegaIndex` (Slice 1, `Ordinal.Buchholz.HeadOmega`), `ω-rank-pow-succ` + per-marker strict dominance at *both* branches (Slice 2 + Slice 2-omega, `Ordinal.Buchholz.RankPow`), the unified `ω-rank-pow-<-succ`, the option-(b) head-Ω inversion lemmas `head-Ω-inv-{bOmega,bpsi}` (`Ordinal.Buchholz.HeadOmegaInversion`), AND the WfCNF-carrier structural recursion `rank-pow-dominated-by-head-Ω : ∀ {t} → WfCNF t → rank-pow t <′ ω-rank-pow-succ (head-Ω t)` (Slice 2-bplus, `Ordinal.Buchholz.RankPowDomination` — landed via PRs #133+#134 2026-05-27). Remaining: the headline `rank-mono-<ᵇ-+1-via-head-Ω` discharge (Slice 3), consuming the domination lemma plus a head-Ω lower-bound + strict-jump bridge. No further rank-mono dependency anywhere in the chain — option (b) bought independence from the still-open `rank-pow-mono-≤ᵇ`.
309309
| `<ᵇ-0-+` | ✓ closed* | `rank-pow bzero = oz`, and `rank-pow (bplus x y) ≥′ oz` strictly when *either* `x` or `y` is non-`bzero` and the term is WfCNF. The degenerate `bplus bzero bzero` is excluded by WfCNF (atomic-right ≤ left forces both `bzero` and then the sum reduces to a `bzero`-shaped equivalent that doesn't pattern-match as a `bplus` under CNF normalisation — covered as a side-condition).
310310
|===
311311

312312
*Score: 11/13 constructors closed (9 under the original `rank-pow`
313313
umbrella + 1 under the `rank-adm` slice + 1 under the `rank-lex`
314-
slice); 1 in flight under the head-Ω route with abstraction +
315-
per-marker dominances + inversion lemmas landed (`<ᵇ-+1` joint-bplus,
316-
Slice 2-bplus remaining); 1 closed conditionally with documented side
317-
condition. The Lane-3 active-push slice on 2026-05-26 closed `<ᵇ⁺-ψα`
318-
(rank-adm) and re-classified `<ᵇ-ψΩ≤` to "encoding mismatch"; the
319-
Lane-3 follow-on slice on 2026-05-27 closed `<ᵇ-ψΩ≤` via option (A)
320-
(lex pair); the head-Ω route landed in stages across 2026-05-27 (Slice 1,
321-
session-night PR #130 closing Slice 2, PR #131 closing Slice 2-omega +
322-
option (b) inversion). Only `<ᵇ-+1` joint-bplus remains in the
323-
per-constructor matrix.*
314+
slice); 1 in flight under the head-Ω route with the WfCNF-carrier
315+
domination lemma `rank-pow-dominated-by-head-Ω` landed (the headline
316+
`rank-mono-<ᵇ-+1-via-head-Ω` Slice 3 discharge remaining); 1 closed
317+
conditionally with documented side condition. The Lane-3 active-push
318+
slice on 2026-05-26 closed `<ᵇ⁺-ψα` (rank-adm) and re-classified
319+
`<ᵇ-ψΩ≤` to "encoding mismatch"; the Lane-3 follow-on slice on
320+
2026-05-27 closed `<ᵇ-ψΩ≤` via option (A) (lex pair); the head-Ω
321+
route landed in stages across 2026-05-27 (Slice 1 PR #124, Slice 2
322+
PR #130, Slice 2-omega + option (b) inversion PR #131, Slice 2-bplus
323+
domination PRs #133+#134). Only the headline `rank-mono-<ᵇ-+1-via-head-Ω`
324+
discharge (Slice 3) remains in the per-constructor matrix.*
324325

325326
=== What remains open
326327

@@ -335,22 +336,29 @@ per-constructor matrix.*
335336
case ν=μ no longer needs the additive-principal closure; the
336337
admissibility bound `rank-pow α <′ ω-rank-pow ν` discharges it
337338
directly on the second component of the lex pair.
338-
* *`<ᵇ-+1` joint-bplus* — *Slice 2-bplus remaining only.* The
339+
* *`<ᵇ-+1` joint-bplus* — *Slice 3 headline remaining only.* The
339340
head-Ω route's prerequisite slices are all landed: `head-Ω`
340341
(Slice 1), `ω-rank-pow-succ` + per-marker strict dominance at
341-
both branches (Slice 2 + Slice 2-omega), and the option-(b)
342-
head-Ω inversion lemmas (preserving the dependency-graph
343-
invariant that the eventual `rank-pow-dominated-by-head-Ω`
344-
doesn't depend on the still-open `rank-pow-mono-≤ᵇ`).
345-
Slice 2-bplus proves the WfCNF-carrier structural recursion
346-
`rank-pow-dominated-by-head-Ω : (t : BT) → NonBzero t → WfCNF t
347-
→ rank-pow t <′ ω-rank-pow-succ (head-Ω t)` and the headline
348-
`rank-mono-<ᵇ-+1-via-head-Ω`. The `Slice 2-omega` historical
349-
hazard (the originally-proposed `ω-rank-pow-succ ω` shape
350-
`olim (λ n → ω^(suc(suc n)))` is equi-ordinal with `ω-rank-pow ω`,
351-
so doesn't strictly dominate) is resolved by the revised shape
352-
`olim (λ n → ω-rank-pow ω ·ℕ n)` (denoting `ω^(ω+1)`) — see
353-
`RankPow.agda`'s "History note" comment block for the full record.
342+
both branches (Slice 2 + Slice 2-omega), the option-(b) head-Ω
343+
inversion lemmas (preserving the dependency-graph invariant
344+
that `rank-pow-dominated-by-head-Ω` doesn't depend on the
345+
still-open `rank-pow-mono-≤ᵇ`), AND the WfCNF-carrier structural
346+
recursion `rank-pow-dominated-by-head-Ω : ∀ {t} → WfCNF t →
347+
rank-pow t <′ ω-rank-pow-succ (head-Ω t)` itself
348+
(`Ordinal.Buchholz.RankPowDomination`, Slice 2-bplus, PRs
349+
#133+#134 2026-05-27 — the `NonBzero` premise turned out
350+
unnecessary: `rank-pow bzero = oz` is strictly below
351+
`ω-rank-pow-succ (fin 0) = ω^2` via `ω^_-pos 2`). Slice 3
352+
consumes the domination lemma plus a head-Ω lower-bound
353+
+ strict-jump bridge to derive the headline
354+
`rank-mono-<ᵇ-+1-via-head-Ω : ∀ {x₁ x₂ y₁ y₂} → WfCNF (bplus x₁ x₂)
355+
→ WfCNF (bplus y₁ y₂) → x₁ <ᵇ y₁ → rank-pow (bplus x₁ x₂) <′
356+
rank-pow (bplus y₁ y₂)`. The `Slice 2-omega` historical hazard
357+
(the originally-proposed `ω-rank-pow-succ ω` shape `olim (λ n
358+
→ ω^(suc(suc n)))` is equi-ordinal with `ω-rank-pow ω`, so doesn't
359+
strictly dominate) is resolved by the revised shape `olim (λ n →
360+
ω-rank-pow ω ·ℕ n)` (denoting `ω^(ω+1)`) — see `RankPow.agda`'s
361+
"History note" comment block for the full record.
354362
* *Mutual recursion for `rank-pow-mono-<ᵇ⁻`*. The case-specific
355363
primitives above are individually proven, but the umbrella theorem
356364
`x <ᵇ⁻ y → rank-pow x <′ rank-pow y` needs a mutual `<ᵇ` / `≤ᵇ`
@@ -365,11 +373,17 @@ per-constructor matrix.*
365373
The "rank-embedding route is closed" framing from this document's
366374
introduction is *narrowed*: it remains true for the unrestricted
367375
`_<ᵇ_`, but the WfCNF restriction `_<ᵇ⁻_` together with the limit-
368-
shaped rank-pow discharges 9 of the 13 constructor cases. The
369-
remaining 3 constructors have well-understood structural blockers
370-
(ψ-admissibility for two; joint-bplus structural-rank for one)
371-
rather than the fundamental obstruction the original counterexample
372-
exhibited.
376+
shaped rank-pow discharges 11 of the 13 constructor cases (9 under
377+
the original `rank-pow` umbrella + `<ᵇ⁺-ψα` via `rank-adm` + `<ᵇ-ψΩ≤`
378+
via `rank-lex`) plus 1 under documented side-condition (`<ᵇ-0-+`).
379+
The remaining `<ᵇ-+1` joint-bplus case has its head-Ω domination
380+
prerequisites all landed (Slice 1 + Slice 2 + Slice 2-omega + option-(b)
381+
inversion + Slice 2-bplus); only the headline Slice 3 discharge
382+
`rank-mono-<ᵇ-+1-via-head-Ω` remains. The original "fundamental
383+
obstruction" verdict was scoped to unrestricted `_<ᵇ_` with scalar
384+
rank — the per-case closures all sidestep it via either WfCNF
385+
restriction (rank-pow + admissibility), lex-pair refinement
386+
(rank-lex), or head-Ω domination (the next slice).
373387

374388
== See also
375389

@@ -383,6 +397,11 @@ exhibited.
383397
* `proofs/agda/Ordinal/Buchholz/RankPow.agda` — Slice 2 + Slice 2-omega;
384398
`ω-rank-pow-succ` + per-marker strict dominance at both branches +
385399
the unified `ω-rank-pow-<-succ`.
400+
* `proofs/agda/Ordinal/Buchholz/RankPowDomination.agda` — Slice 2-bplus;
401+
the WfCNF-carrier structural recursion `rank-pow-dominated-by-head-Ω`
402+
+ the `additive-principal-ω-rank-pow-succ` closure + the `rank-y-bound`
403+
atomic-tail helper. Consumed by the (still open) Slice 3 headline
404+
`rank-mono-<ᵇ-+1-via-head-Ω`.
386405
* `proofs/agda/Ordinal/Buchholz/Order.agda` — the K-free core; the
387406
13 constructors that pin the syntactic order.
388407
* `proofs/agda/Ordinal/Buchholz/WellFounded.agda` — the direct

docs/echo-types/echo-kernel-note.adoc

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,14 @@ kernel** — the boundary is real and lives outside this core.
6464
| `EchoCharacteristic`, `EchoChoreo`, `EchoDecidable`,
6565
`EchoFiberBridge`, `EchoFiberCount`, `EchoFiberTriangulation`,
6666
`EchoIndexed`, `EchoRelational`, `EchoTruncation`,
67-
`EchoJanusBridge`, `EchoTropical`, `EchoSeparating`
67+
`EchoJanusBridge`, `EchoTropical`, `EchoSeparating`,
68+
`EchoTotalCompletion`
6869
| One hop off the kernel. `EchoJanusBridge`/`EchoTropical` are
6970
*Directions* (see MAP). `EchoFiberTriangulation` is the external
7071
stdlib triangulation hardening item. `EchoSeparating` carries
71-
retracted prose framing (below).
72+
retracted prose framing (below). `EchoTotalCompletion` is the
73+
`A ↔ Σ Echo` encode/decode pair anchoring the F5 canonical-
74+
identity cohort (Tier 2 below).
7275

7376
| *Derived — Tier 2* +
7477
(depend on Tier-1 `Echo*`)
@@ -81,7 +84,14 @@ kernel** — the boundary is real and lives outside this core.
8184
`EchoExampleAbsInt`, `EchoExampleParser`, `EchoExampleProvenance`,
8285
`EchoExampleSignAnalysis`, `EchoExampleTruncation`,
8386
`EchoSearchExample`, `EchoThermodynamicsArbitrary`,
84-
`EchoThermoCollapseImpossible`, `EchoAbstractionBarrier`
87+
`EchoThermoCollapseImpossible`, `EchoAbstractionBarrier`,
88+
`EchoOrthogonalFactorizationSystem`, `EchoImageFactorization`,
89+
`EchoNoSectionGeneric`, `EchoLossTaxonomy`, `EchoResidueTaxonomy`,
90+
`EchoDecorationStructure`, `EchoObservationalEquivalence`,
91+
`EchoOFSUnivF5`, `EchoOFSUnivF5Diag`, `EchoOFSUnivF5Iso`,
92+
`EchoCanonicalIdentitySuite`, `EchoDifferential`, `EchoEntropy`,
93+
`EchoLLEncoding`, `EchoProbabilisticSupport`, `EchoProvenance`,
94+
`EchoSecurity`
8595
| Multi-hop. `EchoThermodynamics` reaches the kernel via
8696
`EchoFiberCount` (no direct `Echo` import);
8797
`EchoThermodynamicsFinite` is its Bishop-finite transport layer.
@@ -93,6 +103,21 @@ kernel** — the boundary is real and lives outside this core.
93103
`EchoLinear`, landed 2026-05-26 via PR #119. `EchoExample*` are
94104
derived domain
95105
applications.
106+
*F5 canonical-identity / OFS cohort* (added via Slice-2b+ doc
107+
sweep): `EchoOrthogonalFactorizationSystem` is the
108+
(encode-mono / decode-epi) factorisation keystone;
109+
`EchoImageFactorization` carries the image side;
110+
`EchoOFSUnivF5`/`Diag`/`Iso` are the F5 universal-property work
111+
routing composition through totality;
112+
`EchoCanonicalIdentitySuite` re-exports the cohort as a single
113+
entry point; `EchoNoSectionGeneric` / `EchoLossTaxonomy` /
114+
`EchoResidueTaxonomy` / `EchoDecorationStructure` /
115+
`EchoObservationalEquivalence` are the no-section / loss /
116+
residue / decoration / observational classifications.
117+
*Application/extension modules* (also added via the same sweep):
118+
`EchoEntropy`, `EchoLLEncoding`, `EchoProvenance`, `EchoSecurity`,
119+
`EchoProbabilisticSupport`, `EchoDifferential` are derived domain
120+
applications mapped under their own headings in MAP.adoc.
96121

97122
| *Earn-back gate modules* +
98123
(derived / scoped; not kernel)

0 commit comments

Comments
 (0)