Skip to content

Commit 11199e1

Browse files
proof(ordinal): doubled-ladder rank rank2 + equal-Ω discharge (Slice 2) (#202)
## What Builds the doubled-ladder rank `rank2 : BT → Ord` on the Slice-1 foundation (#201) and lands the **actual equal-Ω boundary discharge** — the case the single ω-power ladder (rank-pow / rank-adm) could not close. **Key simplification:** the doubled ladder is just the *existing* `ω-rank-pow` / `ω-rank-pow-succ` on a **doubled OmegaIndex**. With `double (fin n) = fin (n + n)`, `double ω = ω`: ``` ω-rank-pow (double (fin n)) = ω^(suc (n+n)) = ω^(2n+1) -- ψ-block ω-rank-pow-succ (double (fin n)) = ω^(suc (suc (n+n))) = ω^(2n+2) -- Ω-block ``` both **definitionally**. So all the Brouwer machinery (additive-principal closure, the room fact `ω-rank-pow-⊕-below-succ`, strict-mono) transfers to the doubled ladder for free by instantiating its index at `double ν`. ## Lands - `double : OmegaIndex → OmegaIndex` - `rank2 : BT → Ord` (`bzero→oz`, `bOmega ν→ω-rank-pow-succ (double ν)`, `bpsi ν α→ω-rank-pow (double ν) ⊕ rank2 α`, `bplus→⊕`) - `rank2-{bzero,bOmega,bpsi,bplus}` definitional sanity - **`rank2-bpsi-below-bOmega`** — the equal-Ω discharge: ```agda rank2 α <′ ω-rank-pow (double ν) → rank2 (bpsi ν α) <′ rank2 (bOmega ν) ``` proved as `ω-rank-pow-⊕-below-succ {double ν}` — covering the fin **and** the limit (`ω`) marker, since that lemma is total over `OmegaIndex`. This is precisely the boundary `rank-pow` (collapses ψ_ν/Ω_ν) and `rank-adm` (ranks ψ *above* Ω) could not discharge. ## Honest scope Slice 2 lands the rank + the equal-Ω discharge under a `rank2`-level admissibility hypothesis. Follow-on slices: the `WfAdm` bridge supplying that hypothesis; the cross-index `<ᵇ-Ωψ` discharge (consumes Slice-1's `Ω-block-below-next-ψ` + its ω-marker analogue); the remaining per-constructor rank-mono; the `wf-<′` transport. ## Verification - `rank2`, `rank2-bpsi-below-bOmega` pinned in `Ordinal/Buchholz/Smoke.agda`. - `agda proofs/agda/Smoke.agda` and `agda proofs/agda/All.agda` both **exit 0** under `--safe --without-K`; zero postulates, no escape pragmas, no funext. 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 f7a965f commit 11199e1

2 files changed

Lines changed: 116 additions & 2 deletions

File tree

proofs/agda/Ordinal/Buchholz/RankDoubledLadder.agda

Lines changed: 113 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,15 @@ module Ordinal.Buchholz.RankDoubledLadder where
7676

7777
open import Data.Nat using (ℕ; suc; _+_; _<_; _≤_; s≤s)
7878
open import Data.Nat.Properties using (+-suc; +-mono-≤)
79-
open import Relation.Binary.PropositionalEquality using (_≡_; subst; cong)
79+
open import Relation.Binary.PropositionalEquality using (_≡_; refl; subst; cong)
8080

81-
open import Ordinal.Brouwer using (Ord; osuc)
81+
open import Ordinal.Brouwer using (Ord; osuc; oz; olim)
8282
open import Ordinal.Brouwer.Phase13 using
8383
( _≤′_
8484
; _<′_
8585
; ≤′-trans
8686
; ≤′-self-osuc
87+
; f-in-lim′
8788
)
8889
open import Ordinal.Brouwer.Arithmetic using (_⊕_)
8990
open import Ordinal.Brouwer.OmegaPow using
@@ -92,6 +93,10 @@ open import Ordinal.Brouwer.OmegaPow using
9293
; ω^-strict-mono-suc
9394
; additive-principal
9495
)
96+
open import Ordinal.OmegaMarkers using (OmegaIndex; fin; ω; _<Ω_; fin<fin; fin<ω)
97+
open import Ordinal.Buchholz.Syntax using (BT; bzero; bOmega; bpsi; bplus)
98+
open import Ordinal.Buchholz.RankPow using (ω-rank-pow; ω-rank-pow-succ)
99+
open import Ordinal.Buchholz.RankPowDomination using (ω-rank-pow-⊕-below-succ)
95100

96101
----------------------------------------------------------------------
97102
-- Local strict transitivity (Phase13 exports only ≤′-trans)
@@ -160,3 +165,109 @@ open import Ordinal.Brouwer.OmegaPow using
160165
-- 2m+2 < 2n+1
161166
Ωexp-m<ψexp-n : Ωexp m < ψexp n
162167
Ωexp-m<ψexp-n = s≤s Ωexp-m≤n+n
168+
169+
----------------------------------------------------------------------
170+
-- Slice 2 — the doubled-ladder rank `rank2 : BT → Ord`
171+
----------------------------------------------------------------------
172+
173+
-- The doubled ladder is just the EXISTING `ω-rank-pow` /
174+
-- `ω-rank-pow-succ` on a DOUBLED OmegaIndex. Doubling the fin index
175+
-- by `n ↦ n + n` lands the ψ-block on `ω-rank-pow (fin (n+n)) =
176+
-- ω^(suc (n+n)) = ω^(2n+1) = ω^(ψexp n)` and the Ω-block on
177+
-- `ω-rank-pow-succ (fin (n+n)) = ω^(2n+2) = ω^(Ωexp n)`, both
178+
-- DEFINITIONALLY (no transport). So the whole `Ordinal.Brouwer`
179+
-- machinery — additive-principal closure, the room fact
180+
-- `RankPowDomination.ω-rank-pow-⊕-below-succ` (which is ∀ OmegaIndex,
181+
-- so it covers the limit `ω` marker too), strict-mono — transfers to
182+
-- the doubled ladder for free, by instantiating its index at
183+
-- `double ν`.
184+
185+
double : OmegaIndex OmegaIndex
186+
double (fin n) = fin (n + n)
187+
double ω = ω
188+
189+
-- `rank2 : BT → Ord` — ψ_ν(α) into the 2ν+1 block (offset by the
190+
-- α-rank), Ω_ν at the 2ν+2 block, bplus by ordinal sum, bzero at oz.
191+
rank2 : BT Ord
192+
rank2 bzero = oz
193+
rank2 (bOmega ν) = ω-rank-pow-succ (double ν)
194+
rank2 (bpsi ν α) = ω-rank-pow (double ν) ⊕ rank2 α
195+
rank2 (bplus x y) = rank2 x ⊕ rank2 y
196+
197+
----------------------------------------------------------------------
198+
-- Definitional sanity
199+
----------------------------------------------------------------------
200+
201+
rank2-bzero : rank2 bzero ≡ oz
202+
rank2-bzero = refl
203+
204+
rank2-bOmega : ν rank2 (bOmega ν) ≡ ω-rank-pow-succ (double ν)
205+
rank2-bOmega _ = refl
206+
207+
rank2-bpsi : ν α rank2 (bpsi ν α) ≡ ω-rank-pow (double ν) ⊕ rank2 α
208+
rank2-bpsi _ _ = refl
209+
210+
rank2-bplus : x y rank2 (bplus x y) ≡ rank2 x ⊕ rank2 y
211+
rank2-bplus _ _ = refl
212+
213+
----------------------------------------------------------------------
214+
-- Headline: the equal-Ω boundary discharge at `rank2`
215+
----------------------------------------------------------------------
216+
217+
-- The payoff of the doubled ladder. At the SAME leading marker ν, an
218+
-- admissibility-bounded ψ_ν(α) ranks strictly below Ω_ν:
219+
--
220+
-- rank2 (bpsi ν α) = ω-rank-pow (double ν) ⊕ rank2 α
221+
-- <′ ω-rank-pow-succ (double ν) = rank2 (bOmega ν)
222+
--
223+
-- given `rank2 α <′ ω-rank-pow (double ν)` (the rank2-level
224+
-- admissibility bound — the WfAdm bridge that supplies it from
225+
-- `WfAdm`'s `rank-pow α <′ ω-rank-pow ν` field is the follow-on).
226+
--
227+
-- This is EXACTLY `RankPowDomination.ω-rank-pow-⊕-below-succ`
228+
-- instantiated at the doubled index `double ν` — covering both the
229+
-- fin AND the limit (`ω`) marker, since that lemma is total over
230+
-- OmegaIndex. This is the case the single-ladder rank-pow/rank-adm
231+
-- could not discharge (rank-pow collapses ψ_ν/Ω_ν; rank-adm ranks
232+
-- ψ ABOVE Ω); the doubled ladder closes it directly.
233+
rank2-bpsi-below-bOmega : {ν α}
234+
rank2 α <′ ω-rank-pow (double ν)
235+
rank2 (bpsi ν α) <′ rank2 (bOmega ν)
236+
rank2-bpsi-below-bOmega {ν} {α} adm =
237+
ω-rank-pow-⊕-below-succ {double ν} {rank2 α} adm
238+
239+
----------------------------------------------------------------------
240+
-- Cross-index gap at the doubled scale (the `<ᵇ-Ωψ` arithmetic)
241+
----------------------------------------------------------------------
242+
243+
-- The doubled ladder's STRICT cross-index gap, lifted to the
244+
-- `double`-of-OmegaIndex form and total over the marker (fin AND ω):
245+
--
246+
-- ν <Ω μ → rank2 (bOmega ν) <′ ω-rank-pow (double μ)
247+
-- = ω-rank-pow-succ (double ν) <′ ω-rank-pow (double μ)
248+
--
249+
-- i.e. Ω_ν's rank-block (2·idx ν + 2) lands strictly below μ's
250+
-- ψ-block (2·idx μ + 1) whenever ν <Ω μ. This is the fact that the
251+
-- single ω-power ladder could NOT provide (there, `ω-rank-pow-succ
252+
-- μ ≤′ ω-rank-pow ν` was only NON-strict at the boundary
253+
-- ν = suc μ); the doubling buys the strict inequality, here for
254+
-- both the fin markers (via the Slice-1 fact `Ω-block-below-next-ψ`,
255+
-- definitionally aligned through `double (fin n) = fin (n+n)`) and
256+
-- the limit marker `ω` (via one-step strict-mono into the limit's
257+
-- (2a+3)-th approximant).
258+
--
259+
-- This is the arithmetic the cross-index `<ᵇ-Ωψ` constructor's
260+
-- `rank2`-mono will consume (with `⊕`-left-weakening to absorb the
261+
-- target's ψ-argument), and the bOmega case of the WfAdm→rank2
262+
-- scale-transfer bridge.
263+
double-cross-gap : {ν μ}
264+
ν <Ω μ
265+
ω-rank-pow-succ (double ν) <′ ω-rank-pow (double μ)
266+
double-cross-gap {fin a} {fin b} (fin<fin a<b) = Ω-block-below-next-ψ a<b
267+
double-cross-gap {fin a} {ω} fin<ω =
268+
≤′-trans
269+
{osuc (ω^ (suc (suc (a + a))))}
270+
{ω^ (suc (suc (suc (a + a))))}
271+
{olim (λ n ω^ (suc n))}
272+
(ω^-strict-mono-suc (suc (suc (a + a))))
273+
(f-in-lim′ (λ n ω^ (suc n)) (suc (suc (a + a))))

proofs/agda/Ordinal/Buchholz/Smoke.agda

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,9 @@ open import Ordinal.Buchholz.RankPowDomination using
469469
open import Ordinal.Buchholz.RankDoubledLadder using
470470
( ψ-block-below-Ω-block
471471
; Ω-block-below-next-ψ
472+
; rank2
473+
; rank2-bpsi-below-bOmega
474+
; double-cross-gap
472475
)
473476

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

0 commit comments

Comments
 (0)