Commit f50a1ef
proof(architecture): RankMonoUnion umbrella over source-rule extensions
Realises the architectural recommendation from PR #167's closing
note: the future bplus-chain rank-mono umbrella shipped as a
UNION OF SOURCE-RULE EXTENSIONS rather than a single enriched
rank function. Zero new proof obligations; purely structural
composition via Sum + `[_,_]` mediator. `--safe --without-K`,
no postulates, no funext.
## The architectural design realised
PR #167's closing observation:
> The future bplus-chain rank-mono umbrella may want to be designed
> as a UNION OF SOURCE-RULE EXTENSIONS (Path-3 style for cleanly-
> decomposable cases) rather than a single enriched rank function
> (rank-lex-jb style for cross-head cases).
This PR mechanises that recommendation as `Ordinal.Buchholz.
RankMonoUnion`.
## What the union umbrella ships
`_<ᵇᵘ_ : BT → BT → Set` — the disjoint sum of `_<ᵇ¹_` (Slice 3
extension, `RankMonoUmbrellaSlice3`) and `_<ᵇ⁺²_` (Path-3
extension, `RankMonoSameLeft`). Either extension's witness is
accepted.
`rank-pow-mono-<ᵇᵘ : ∀ {x y} → x <ᵇᵘ y → rank-pow x <′ rank-pow y`
— the COPRODUCT MEDIATOR of `rank-pow-mono-<ᵇ¹` and
`rank-pow-mono-<ᵇ⁺²` via `[_,_]`. ONE LINE. No new proof
obligation: the union's discharge is purely structural.
Convenience embeddings: `<ᵇᵘ-from-<ᵇ¹`, `<ᵇᵘ-from-<ᵇ⁺²`,
`<ᵇᵘ-from-<ᵇ⁰` (transitive via `<ᵇ¹`),
`<ᵇᵘ-from-<ᵇ⁰-via-<ᵇ⁺²` (symmetric via `<ᵇ⁺²`).
## Why this architectural shape (three observations)
1. Different sub-cases of `<ᵇ-+1`-style joint-bplus close at
DIFFERENT rank-relation levels. Strict-head case
(`<ᵇ¹-+1-+`) closes via head-Ω inversion +
`ω-rank-pow-succ`. Same-left case (`<ᵇ⁺²-same-left`)
closes via `rank-pow-bplus-right-mono` on the tail.
Cross-head rank-equal case (`bpsi ν α` vs `bOmega ν`)
closes at the LEX-RANK level via `rank-lex-jb`. Each
sub-case prefers a DIFFERENT rank-mono machinery.
2. A single enriched rank function (rank-lex-jb) handles
multiple sub-cases via a uniform second-component
discriminator, but the consumer-side first-eq derivation
is structurally simpler when the source rule itself
carries the enrichment (Path-3 verdict, PR #167).
3. UNION OF EXTENSIONS SCALES: every new sub-case added to
the bplus-chain rank-mono programme can ship as a new
extension `_<ᵇⁿ_` with its own `rank-pow-mono-<ᵇⁿ`, then
be unioned in mechanically via Sum + `[_,_]`. No
interference between extensions; closure is local to
each extension's structural recursion.
## Extension recipe (in module preamble for future contributors)
To add a new source-rule extension `_<ᵇⁿ_` with
`rank-pow-mono-<ᵇⁿ`:
1. Define relation + rank-pow-mono in its own module
(use `RankMonoSameLeft` as the canonical template).
2. Re-export through `Ordinal/Buchholz/Smoke.agda` with
its own `using` block.
3. Update this module to extend `_<ᵇᵘ_` with the new
disjunct and extend `rank-pow-mono-<ᵇᵘ` with the new
case via `[_,_]`. Both edits mechanical; no new proof
obligations.
Per-extension proof work + structural composition is the
architectural payoff, vs proof obligations multiplying as the
rank function gains discriminators.
## What this module does NOT do
- Does NOT wrap with WfCNF endpoints (à la
`RankMonoUmbrellaSlice4._<ᵇ⁻ⁿ_`). Consumers needing WfCNF
compose with the predicates separately or extend with a
WfCNF-bundled variant.
- Does NOT include `rank-lex-jb` discharge — the cross-head
rank-equal case discharges at LEX-RANK level, not rank-pow
level, so it lives in a different rank-relation. The union
here is over `rank-pow <′` discharges only.
- Does NOT prove well-foundedness of the union — orthogonal
to rank-mono; would need a single Brouwer-rank embedding.
`rank-pow` provides the seed.
## Local verification
- `agda -i proofs/agda proofs/agda/Ordinal/Buchholz/RankMonoUnion.agda` — clean.
- `agda -i proofs/agda proofs/agda/Ordinal/Buchholz/Smoke.agda` — clean, exit 0.
- `agda -i proofs/agda proofs/agda/Smoke.agda` — clean, exit 0.
- `agda -i proofs/agda proofs/agda/All.agda` — clean, exit 0.
- `bash tools/check-guardrails.sh proofs/agda` — **162 modules** pass.
- `sh scripts/kernel-guard.sh` — PASS.
Six new names pinned in `Ordinal/Buchholz/Smoke.agda` under a
new `RankMonoUnion` `using` block. Module wired into
`proofs/agda/All.agda` between `RankMonoSameLeft` and
`RecursiveSurfaceOrder`.
## Slice 3+4 Route A arc summary (4 PRs total)
After this PR the Slice 3+4 Route A session arc is closed:
* PR #165 — (b) `<lex-first` primitive + bpsi sub-case discharge.
* PR #166 — (c) trichotomy data type + first-eq derivation.
* PR #167 — Path-3 prototype (same-left source-rule extension).
* THIS PR — RankMonoUnion (architectural realisation).
The full bplus-chain rank-mono umbrella over all 13 `_<ᵇ_`
constructors is still gated on (i) tail-rank-equality discharge
for the bpsi-source-at-equal-head case AND (ii) the cross-head
rank-equal case via rank-lex-jb's structural research; neither
is closed by THIS PR. The architecture, however, is now in
place for those closures to plug in mechanically as they land.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent 390cebb commit f50a1ef
3 files changed
Lines changed: 180 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
150 | 150 | | |
151 | 151 | | |
152 | 152 | | |
| 153 | + | |
153 | 154 | | |
154 | 155 | | |
155 | 156 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
585 | 585 | | |
586 | 586 | | |
587 | 587 | | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
0 commit comments