Skip to content

Commit ab73eb2

Browse files
proof(ordinal): WfAdm→rank2 scale-transfer bridge (Gate 1 equal-Ω closure) (#204)
## What Lands `rank2-bounded` in `Ordinal/Buchholz/RankDoubledLadder.agda` — the final arithmetic piece of Gate 1's **equal-Ω boundary** closure on the doubled ladder: ```agda rank2-bounded : ∀ {t μ} → WfAdm t → rank-pow t <′ ω-rank-pow μ → rank2 t <′ ω-rank-pow (double μ) ``` It transfers a single-ladder admissibility bound (`rank-pow`) to the doubled ladder (`rank2`) by induction on the `WfAdm` witness. ## Why a bridge (not a plain map) The naive `rank-pow t → rank2 t` transfer is **false**: `rank-pow (bpsi ν _) = ω-rank-pow ν` collapses the ψ-argument `α` that `rank2 (bpsi ν α) = ω-rank-pow (double ν) ⊕ rank2 α` keeps. The `WfAdm` `wf-adm-bpsi` field `rank-pow α <′ ω-rank-pow ν` supplies exactly the per-ψ admissibility bound the `bpsi` case recurses on. ## Cases - **bzero** — `ω-rank-pow-pos`. - **bOmega** — reflect the bound to `ν <Ω μ` (`ω-rank-pow-reflects-<Ω`, landed in #203), then `double-cross-gap`. - **bpsi** — head `ω-rank-pow (double ν)` below target via `double-mono-<Ω` + `ω-rank-pow-mono`; tail `rank2 α` below by IH-on-α + `<′-trans`; recombine by additive principality. - **bplus** — split the hypothesis through `⊕-left-≤-sum` / `⊕-right-≤-sum`, recurse on each summand, recombine by additive principality. Local helpers introduced: `≤′-<′-trans`, `⊕-right-≤-sum` (Phase13 ships only the left form), `double-mono-<Ω`. ## Verification - `agda -i proofs/agda proofs/agda/All.agda` exits 0 under `--safe --without-K`. - `Smoke.agda` exits 0; `rank2-bounded` pinned in the Buchholz Smoke. - Zero postulates / escape pragmas in the new code. https://claude.ai/code/session_017t53M7W7ubmXpwymveLcCE --- _Generated by [Claude Code](https://claude.ai/code/session_017t53M7W7ubmXpwymveLcCE)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent d31f25e commit ab73eb2

2 files changed

Lines changed: 99 additions & 2 deletions

File tree

proofs/agda/Ordinal/Buchholz/RankDoubledLadder.agda

Lines changed: 98 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
module Ordinal.Buchholz.RankDoubledLadder where
7676

7777
open import Data.Nat using (ℕ; suc; _+_; _<_; _≤_; s≤s)
78-
open import Data.Nat.Properties using (+-suc; +-mono-≤; ≰⇒>)
78+
open import Data.Nat.Properties using (+-suc; +-mono-≤; +-mono-<; ≰⇒>)
7979
open import Data.Empty using (⊥; ⊥-elim)
8080
open import Induction.WellFounded using (wf⇒asym)
8181
open import Relation.Binary.PropositionalEquality using (_≡_; refl; subst; cong)
@@ -85,7 +85,10 @@ open import Ordinal.Brouwer.Phase13 using
8585
( _≤′_
8686
; _<′_
8787
; ≤′-trans
88+
; ≤′-zero
8889
; ≤′-self-osuc
90+
; ⊕-left-≤-sum
91+
; ⊕-mono-≤-left
8992
; f-in-lim′
9093
; wf-<′
9194
)
@@ -95,12 +98,27 @@ open import Ordinal.Brouwer.OmegaPow using
9598
; ω^-strict-mono
9699
; ω^-strict-mono-suc
97100
; ω^-mono-≤
101+
; X≤′oz⊕X
98102
; additive-principal
99103
)
100104
open import Ordinal.OmegaMarkers using (OmegaIndex; fin; ω; _<Ω_; fin<fin; fin<ω)
101105
open import Ordinal.Buchholz.Syntax using (BT; bzero; bOmega; bpsi; bplus)
102-
open import Ordinal.Buchholz.RankPow using (ω-rank-pow; ω-rank-pow-succ)
106+
open import Ordinal.Buchholz.RankPow using
107+
( ω-rank-pow
108+
; ω-rank-pow-succ
109+
; rank-pow
110+
; ω-rank-pow-pos
111+
; ω-rank-pow-mono
112+
; additive-principal-ω-rank-pow
113+
)
103114
open import Ordinal.Buchholz.RankPowDomination using (ω-rank-pow-⊕-below-succ)
115+
open import Ordinal.Buchholz.WellFormedAdmissible using
116+
( WfAdm
117+
; wf-adm-bzero
118+
; wf-adm-bomega
119+
; wf-adm-bpsi
120+
; wf-adm-bplus
121+
)
104122

105123
----------------------------------------------------------------------
106124
-- Local strict transitivity (Phase13 exports only ≤′-trans)
@@ -323,3 +341,81 @@ double-cross-gap {fin a} {ω} fin<ω =
323341
⊥-elim (wf⇒asym wf-<′ {olim (λ n ω^ (suc n))} {ω^ (suc b)}
324342
p (ω^-suc-below-lim b))
325343
ω-rank-pow-reflects-<Ω {ω} {ω} p = ⊥-elim (<′-irrefl {ω-rank-pow ω} p)
344+
345+
----------------------------------------------------------------------
346+
-- The WfAdm → rank2 scale-transfer bridge (Gate 1 equal-Ω closure)
347+
----------------------------------------------------------------------
348+
349+
-- Mixed transitivity `≤′ ⨾ <′`. `α <′ β` is `osuc α ≤′ β`, and
350+
-- `osuc α ≤′ osuc β` reduces definitionally to `α ≤′ β`, so the
351+
-- `≤′`-step plugs straight into `≤′-trans` at the successor.
352+
≤′-<′-trans : {α β γ} α ≤′ β β <′ γ α <′ γ
353+
≤′-<′-trans {α} {β} {γ} p q = ≤′-trans {osuc α} {osuc β} {γ} p q
354+
355+
-- Right addend ≤ sum: `β ≤′ α ⊕ β`. (Phase13 ships only the LEFT
356+
-- form `⊕-left-≤-sum`; the right form factors through the left-unit
357+
-- bound `X≤′oz⊕X` + left-monotonicity `oz ≤′ α`.)
358+
⊕-right-≤-sum : {α} β β ≤′ α ⊕ β
359+
⊕-right-≤-sum {α} β =
360+
≤′-trans {β} {oz ⊕ β} {α ⊕ β}
361+
(X≤′oz⊕X {β})
362+
(⊕-mono-≤-left {oz} {α} {β} (≤′-zero {α}))
363+
364+
-- `double` preserves the strict marker order. Only the two
365+
-- inhabited `_<Ω_` shapes arise (nothing is above `ω`); doubling a
366+
-- fin index doubles the witness gap via `+-mono-<`.
367+
double-mono-<Ω : {ν μ} ν <Ω μ double ν <Ω double μ
368+
double-mono-<Ω {fin a} {fin b} (fin<fin a<b) = fin<fin (+-mono-< a<b a<b)
369+
double-mono-<Ω {fin a} {ω} fin<ω = fin<ω
370+
371+
-- THE BRIDGE. Transfer an admissibility bound from the single
372+
-- ladder (`rank-pow t <′ ω-rank-pow μ`) to the doubled ladder
373+
-- (`rank2 t <′ ω-rank-pow (double μ)`), by induction on the
374+
-- admissibility witness `WfAdm t`.
375+
--
376+
-- The naive map `rank-pow t → rank2 t` is NOT a transfer (rank-pow
377+
-- collapses the ψ-argument α that rank2 keeps); the WfAdm witness
378+
-- supplies exactly the per-ψ admissibility field
379+
-- `rank-pow α <′ ω-rank-pow ν` that lets the bpsi case recurse on α.
380+
--
381+
-- Cases:
382+
-- * bzero — `oz <′ ω-rank-pow (double μ)` is `ω-rank-pow-pos`.
383+
-- * bOmega — reflect the bound to `ν <Ω μ`, then `double-cross-gap`.
384+
-- * bpsi — head `ω-rank-pow (double ν)` below target via reflect +
385+
-- `double-mono-<Ω` + `ω-rank-pow-mono`; tail `rank2 α`
386+
-- below by IH-on-α (at index ν, from the WfAdm field) +
387+
-- `<′-trans` up to `double μ`; recombine by additive
388+
-- principality.
389+
-- * bplus — split the hypothesis through `⊕-left-≤-sum` /
390+
-- `⊕-right-≤-sum`, recurse on each summand, recombine
391+
-- by additive principality.
392+
rank2-bounded : {t μ}
393+
WfAdm t
394+
rank-pow t <′ ω-rank-pow μ
395+
rank2 t <′ ω-rank-pow (double μ)
396+
rank2-bounded {bzero} {μ} wf-adm-bzero _ =
397+
ω-rank-pow-pos (double μ)
398+
rank2-bounded {bOmega ν} {μ} (wf-adm-bomega _) h =
399+
double-cross-gap (ω-rank-pow-reflects-<Ω {ν} {μ} h)
400+
rank2-bounded {bpsi ν α} {μ} (wf-adm-bpsi _ wfα admα) h =
401+
additive-principal-ω-rank-pow {double μ}
402+
head<
403+
tail<
404+
where
405+
ν<μ : ν <Ω μ
406+
ν<μ = ω-rank-pow-reflects-<Ω h
407+
408+
head< : ω-rank-pow (double ν) <′ ω-rank-pow (double μ)
409+
head< = ω-rank-pow-mono (double-mono-<Ω ν<μ)
410+
411+
tail< : rank2 α <′ ω-rank-pow (double μ)
412+
tail< = <′-trans {rank2 α} {ω-rank-pow (double ν)} {ω-rank-pow (double μ)}
413+
(rank2-bounded {α} {ν} wfα admα) head<
414+
rank2-bounded {bplus x y} {μ} (wf-adm-bplus wfx wfy _ _) h =
415+
additive-principal-ω-rank-pow {double μ}
416+
(rank2-bounded {x} {μ} wfx
417+
(≤′-<′-trans {rank-pow x} {rank-pow x ⊕ rank-pow y} {ω-rank-pow μ}
418+
(⊕-left-≤-sum {rank-pow x} (rank-pow y)) h))
419+
(rank2-bounded {y} {μ} wfy
420+
(≤′-<′-trans {rank-pow y} {rank-pow x ⊕ rank-pow y} {ω-rank-pow μ}
421+
(⊕-right-≤-sum {rank-pow x} (rank-pow y)) h))

proofs/agda/Ordinal/Buchholz/Smoke.agda

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,7 @@ open import Ordinal.Buchholz.RankDoubledLadder using
473473
; rank2-bpsi-below-bOmega
474474
; double-cross-gap
475475
; ω-rank-pow-reflects-<Ω
476+
; rank2-bounded
476477
)
477478

478479
-- Slice 3 prerequisites (own block per CLAUDE.md Working rules):

0 commit comments

Comments
 (0)