Skip to content

Commit d31f25e

Browse files
proof(ordinal): ω-rank-pow reflects _<Ω_ (bridge bOmega-case inversion) (#203)
## What The converse of `ω-rank-pow-mono`, and the precise blocker the `WfAdm → rank2` scale-transfer bridge's **bOmega case** needs: ```agda ω-rank-pow-reflects-<Ω : ω-rank-pow ν <′ ω-rank-pow μ → ν <Ω μ ``` From `rank-pow (bOmega ν) = ω-rank-pow ν <′ ω-rank-pow μ` the bridge recovers `ν <Ω μ`, then feeds `double-cross-gap` (landed in #202). ## How Marker case analysis: - **fin/fin**: reflect `ω^`-mono via irreflexivity — `b ≤ a` would force `ω^(suc a) <′ ω^(suc a)`, so `≰⇒>` yields `a < b`; - **fin/ω**: `fin _ <Ω ω` unconditionally; - **ω/fin**: absurd — `ω-rank-pow ω` is a limit *above* every `ω^(suc b)` (`ω^-suc-below-lim` + asymmetry); - **ω/ω**: absurd by irreflexivity. Helpers landed alongside: `<′-irrefl` (from `wf⇒asym wf-<′`) and `ω^-suc-below-lim` (`ω^(suc b) <′ ω-rank-pow ω`). Note: meta-inference fails through the *defined* `_<′_` (`α <′ β = osuc α ≤′ β` unfolds, blocking unification on the limit-Σ), so `wf⇒asym` / `<′-irrefl` carry explicit carrier implicits at each site. ## Why it matters With `double-cross-gap` (#202), this completes **both** hard ingredients of the bridge's bOmega case. The equal-Ω boundary discharge (`rank2-bpsi-below-bOmega`, #202) is already proved; the bOmega cross-index discharge now has its inversion + arithmetic. ## Remaining for (ii) The `WfAdm`-structural induction assembling the four cases: bzero (positivity) / bOmega (these two lemmas) / bpsi (`double`-mono + IH) / bplus (additive-principal both directions). ## Verification - `ω-rank-pow-reflects-<Ω` 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. - Re-based cleanly onto current `main` (#202 already merged); diff is exactly two files. 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 11199e1 commit d31f25e

2 files changed

Lines changed: 54 additions & 1 deletion

File tree

proofs/agda/Ordinal/Buchholz/RankDoubledLadder.agda

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,9 @@
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-≤; ≰⇒>)
79+
open import Data.Empty using (⊥; ⊥-elim)
80+
open import Induction.WellFounded using (wf⇒asym)
7981
open import Relation.Binary.PropositionalEquality using (_≡_; refl; subst; cong)
8082

8183
open import Ordinal.Brouwer using (Ord; osuc; oz; olim)
@@ -85,12 +87,14 @@ open import Ordinal.Brouwer.Phase13 using
8587
; ≤′-trans
8688
; ≤′-self-osuc
8789
; f-in-lim′
90+
; wf-<′
8891
)
8992
open import Ordinal.Brouwer.Arithmetic using (_⊕_)
9093
open import Ordinal.Brouwer.OmegaPow using
9194
( ω^_
9295
; ω^-strict-mono
9396
; ω^-strict-mono-suc
97+
; ω^-mono-≤
9498
; additive-principal
9599
)
96100
open import Ordinal.OmegaMarkers using (OmegaIndex; fin; ω; _<Ω_; fin<fin; fin<ω)
@@ -271,3 +275,51 @@ double-cross-gap {fin a} {ω} fin<ω =
271275
{olim (λ n ω^ (suc n))}
272276
(ω^-strict-mono-suc (suc (suc (a + a))))
273277
(f-in-lim′ (λ n ω^ (suc n)) (suc (suc (a + a))))
278+
279+
----------------------------------------------------------------------
280+
-- `ω-rank-pow` reflects `_<Ω_` (the bridge's bOmega-case inversion)
281+
----------------------------------------------------------------------
282+
283+
-- Irreflexivity of `_<′_`, from its well-foundedness.
284+
<′-irrefl : {α} α <′ α
285+
<′-irrefl {α} p = wf⇒asym wf-<′ {α} {α} p p
286+
287+
-- Every approximant of `ω-rank-pow ω`'s limit lies below the limit:
288+
-- `ω^(suc b) <′ olim (λ n → ω^(suc n)) = ω-rank-pow ω`.
289+
ω^-suc-below-lim : b ω^ (suc b) <′ ω-rank-pow ω
290+
ω^-suc-below-lim b =
291+
≤′-trans
292+
{osuc (ω^ (suc b))}
293+
{ω^ (suc (suc b))}
294+
{olim (λ n ω^ (suc n))}
295+
(ω^-strict-mono-suc (suc b))
296+
(f-in-lim′ (λ n ω^ (suc n)) (suc b))
297+
298+
-- `ω-rank-pow` reflects the strict Ω-order: the converse of
299+
-- `ω-rank-pow-mono`. Needed by the bOmega case of the WfAdm→rank2
300+
-- bridge — from `rank-pow (bOmega ν) = ω-rank-pow ν <′ ω-rank-pow μ`
301+
-- recover `ν <Ω μ`, then feed `double-cross-gap`. By marker cases:
302+
-- * fin/fin: reflect `ω^`-mono via irreflexivity (`b ≤ a` would
303+
-- force `ω^(suc a) <′ ω^(suc a)`);
304+
-- * fin/ω: `fin _ <Ω ω` holds unconditionally;
305+
-- * ω/fin: absurd — `ω-rank-pow ω` is a limit ABOVE every
306+
-- `ω^(suc b)` (asymmetry);
307+
-- * ω/ω: absurd by irreflexivity.
308+
ω-rank-pow-reflects-<Ω : {ν μ}
309+
ω-rank-pow ν <′ ω-rank-pow μ
310+
ν <Ω μ
311+
ω-rank-pow-reflects-<Ω {fin a} {fin b} p = fin<fin (reflect-nat p)
312+
where
313+
reflect-nat : ω^ (suc a) <′ ω^ (suc b) a < b
314+
reflect-nat q =
315+
≰⇒> (λ b≤a
316+
<′-irrefl {ω^ (suc a)}
317+
(≤′-trans
318+
{osuc (ω^ (suc a))} {ω^ (suc b)} {ω^ (suc a)}
319+
q
320+
(ω^-mono-≤ (s≤s b≤a))))
321+
ω-rank-pow-reflects-<Ω {fin a} {ω} _ = fin<ω
322+
ω-rank-pow-reflects-<Ω {ω} {fin b} p =
323+
⊥-elim (wf⇒asym wf-<′ {olim (λ n ω^ (suc n))} {ω^ (suc b)}
324+
p (ω^-suc-below-lim b))
325+
ω-rank-pow-reflects-<Ω {ω} {ω} p = ⊥-elim (<′-irrefl {ω-rank-pow ω} p)

proofs/agda/Ordinal/Buchholz/Smoke.agda

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

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

0 commit comments

Comments
 (0)