Skip to content

Commit 9b5610a

Browse files
committed
ordinal(buchholz): head-Ω Slice 2 — ω-rank-pow-succ + fin-branch dominance
Adds the per-marker "next ω-power up" target `ω-rank-pow-succ : OmegaIndex → Ord` consumed by the planned `<ᵇ-+1` joint-bplus head-Ω domination route. Lands the abstraction plus the fin-branch strict-dominance lemma; documents the ω-branch obstruction. Headlines (own block in Ordinal/Buchholz/Smoke.agda per Working rules): * ω-rank-pow-succ -- the next-up target function * ω-rank-pow-succ-fin -- definitional sanity at fin * ω-rank-pow-<-succ-fin -- per-marker strict dominance, fin * rank-pow-bOmega-via-head-Ω -- atomic factoring (refl) * rank-pow-bpsi-via-head-Ω -- atomic factoring (refl) Obstruction note (inline in RankPow.agda). The originally-proposed shape `ω-rank-pow-succ ω = olim (λ n → ω^(suc(suc n)))` represents the same ordinal as `ω-rank-pow ω` (both are sup{ω^(n+1) : n ∈ ℕ} = ω^ω, indexed differently), so strict dominance at the ω branch cannot hold under that shape. Slice 2-omega must replace the ω branch with a genuinely strictly-larger ordinal (candidate: `ω^(ω+1)`). Slice 2-bplus then proves the full WfCNF-carrier domination lemma; its bplus case needs a `rank-pow-mono-≤ᵇ` companion (option (b) sketched inline: head-Ω inversion that does not transitively depend on rank-mono). No postulates introduced. --safe --without-K throughout. scripts/kernel-guard.sh: PASS. https://claude.ai/code/session_013nLEeKZXpvHnrDZMgRm19S
1 parent 9d54cae commit 9b5610a

2 files changed

Lines changed: 155 additions & 0 deletions

File tree

proofs/agda/Ordinal/Buchholz/RankPow.agda

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,3 +418,139 @@ rank-mono-<ᵇ-+1-ψ-target : ∀ {x₁ x₂ ν α y₂}
418418
rank-mono-<ᵇ-+1-ψ-target {x₁} {x₂} {ν} {α} {y₂} =
419419
rank-mono-<ᵇ-+1-via-target {x₁} {x₂} {bpsi ν α} {y₂}
420420
(additive-principal-ω-rank-pow {ν})
421+
422+
----------------------------------------------------------------------
423+
-- Slice 2 of the head-Ω domination route
424+
----------------------------------------------------------------------
425+
--
426+
-- The HeadOmega module (`Ordinal.Buchholz.HeadOmega`) defines the
427+
-- leading-Ω-index head function `head-Ω : BT → OmegaIndex`. This
428+
-- section adds the per-marker "next ω-power up" target
429+
-- `ω-rank-pow-succ : OmegaIndex → Ord` consumed by the planned (but
430+
-- not yet landed) `<ᵇ-+1` joint-bplus head-Ω domination route.
431+
--
432+
-- ## Scope of this slice
433+
--
434+
-- Lands:
435+
-- * `ω-rank-pow-succ : OmegaIndex → Ord`
436+
-- * `ω-rank-pow-succ-fin` — definitional sanity, fin branch
437+
-- * `ω-rank-pow-<-succ-fin` — per-marker strict dominance at fin
438+
-- * `rank-pow-bOmega-via-head-Ω`,
439+
-- `rank-pow-bpsi-via-head-Ω` — atomic-rank `refl`-shape primitives
440+
-- factoring `rank-pow` through `head-Ω` for the two non-bplus,
441+
-- non-bzero `BT` constructors. Useful at consumer-recursion
442+
-- sites that want to rewrite source-rank into head-Ω form
443+
-- without unfolding `rank-pow` and `head-Ω` separately.
444+
--
445+
-- Deferred (with concrete obstructions documented inline below):
446+
-- * The headline domination lemma
447+
-- `rank-pow-dominated-by-head-Ω : (t : BT) → NonBzero t →
448+
-- WfCNF t → rank-pow t <′ ω-rank-pow-succ (head-Ω t)`
449+
-- in its full generality. The fin branch is structurally clean
450+
-- (every WfCNF clause discharges via additive-principal at
451+
-- ω^(suc(suc n)) and the existing per-constructor rank-mono
452+
-- primitives), but the **ω branch of `head-Ω` cannot strictly
453+
-- dominate under the originally-proposed `ω-rank-pow-succ ω` shape**.
454+
-- See the obstruction note immediately below.
455+
--
456+
-- ## Obstruction note for the ω branch
457+
--
458+
-- The originally proposed shape (per CLAUDE.md § "Session arc
459+
-- 2026-05-27 late evening" — Slice 2 sketch) was:
460+
--
461+
-- ω-rank-pow ω = olim (λ n → ω^ (suc n)) -- existing
462+
-- ω-rank-pow-succ ω = olim (λ n → ω^ (suc (suc n))) -- proposed
463+
--
464+
-- Both `olim`s represent the **same** ordinal (ω^ω) — the supremum of
465+
-- {ω, ω², ω³, …} and the supremum of {ω², ω³, ω⁴, …} are equal as
466+
-- ordinals, just with different ℕ-indexings of the same tail. Under
467+
-- the recursive `_<′_` of `Phase13`, this manifests as: every attempt
468+
-- to discharge `osuc (olim (λ n → ω^(suc n))) ≤′ olim (λ k → ω^(suc(suc k)))`
469+
-- by picking a branch `k` in the target falls back to an `osuc (olim …)
470+
-- ≤′ ω^(suc(suc k)) ·ℕ j` obligation that is again a limit-vs-osuc
471+
-- comparison, recursing indefinitely.
472+
--
473+
-- A follow-on slice must replace the ω branch with a genuinely
474+
-- strictly-larger ordinal (the natural candidate is `ω^(ω+1)`, the
475+
-- next additive-principal above `ω^ω`). In Brouwer notation this
476+
-- would be `olim (λ n → (ω-rank-pow ω) ·ℕ n)`; the proof obligation
477+
-- shifts but does not vanish — `(ω-rank-pow ω) ·ℕ n` is itself a
478+
-- nested limit, and the strict-dominance proof needs the equivalent of
479+
-- the existing `additive-principal-ω-rank-pow` ω-branch closure
480+
-- (lines 238–255 above) lifted one ω-power.
481+
--
482+
-- Choosing not to make that replacement in this slice keeps the
483+
-- abstraction minimal and avoids committing to a shape that the
484+
-- consumer (Slice 3, `rank-mono-<ᵇ-+1-via-head-Ω`) might want to
485+
-- specialise differently. The ω branch of `ω-rank-pow-succ` below
486+
-- therefore reuses the **original** CLAUDE.md proposal verbatim, so
487+
-- the abstraction is in place for follow-on slices to inspect and
488+
-- (if needed) override before any consumer pulls on the ω case.
489+
490+
ω-rank-pow-succ : OmegaIndex Ord
491+
ω-rank-pow-succ (fin n) = ω^ (suc (suc n))
492+
ω-rank-pow-succ ω = olim (λ n ω^ (suc (suc n)))
493+
494+
-- Definitional sanity at the fin branch. Mirrors `ω-rank-pow-fin`.
495+
ω-rank-pow-succ-fin : n ω-rank-pow-succ (fin n) ≡ ω^ (suc (suc n))
496+
ω-rank-pow-succ-fin _ = refl
497+
498+
-- Per-marker strict dominance at the fin branch. For each `fin n`,
499+
-- `ω-rank-pow (fin n) = ω^(suc n)` is strictly below
500+
-- `ω-rank-pow-succ (fin n) = ω^(suc(suc n))` via the one-step
501+
-- strict-mono of the ω-power ladder. The ω branch is deferred per the
502+
-- obstruction note above.
503+
ω-rank-pow-<-succ-fin : n
504+
ω-rank-pow (fin n) <′ ω-rank-pow-succ (fin n)
505+
ω-rank-pow-<-succ-fin n = ω^-strict-mono-suc (suc n)
506+
507+
-- Atomic-rank-pow `refl`-shape primitives. For non-bplus, non-bzero
508+
-- BT constructors, `rank-pow` reduces to `ω-rank-pow` of the
509+
-- corresponding `head-Ω` value. Both equations are `refl`; provided
510+
-- as named lemmas so consumer rewrites can target `head-Ω`-form
511+
-- without unfolding `rank-pow` and `head-Ω` separately.
512+
513+
open import Ordinal.Buchholz.HeadOmega using (head-Ω)
514+
515+
rank-pow-bOmega-via-head-Ω : ν
516+
rank-pow (bOmega ν) ≡ ω-rank-pow (head-Ω (bOmega ν))
517+
rank-pow-bOmega-via-head-Ω _ = refl
518+
519+
rank-pow-bpsi-via-head-Ω : ν α
520+
rank-pow (bpsi ν α) ≡ ω-rank-pow (head-Ω (bpsi ν α))
521+
rank-pow-bpsi-via-head-Ω _ _ = refl
522+
523+
----------------------------------------------------------------------
524+
-- Where this lands in the head-Ω closure plan
525+
----------------------------------------------------------------------
526+
--
527+
-- The abstraction landed here (`ω-rank-pow-succ` + the fin-branch
528+
-- dominance + the atomic factoring) is the smallest useful first cut.
529+
-- The two open follow-ons are:
530+
--
531+
-- Slice 2-omega. Replace the ω branch of `ω-rank-pow-succ` with a
532+
-- genuinely strictly-dominating shape and prove `ω-rank-pow ω <′
533+
-- (new-shape)`. Candidate: `ω^(ω+1)` encoded as
534+
-- `olim (λ n → (ω-rank-pow ω) ·ℕ n)`. Cross-checks before committing:
535+
-- (i) the new shape closes under ordinal addition strictly above
536+
-- `ω-rank-pow ω` (so additive-principal-style closure lifts);
537+
-- (ii) the consumer (Slice 3) does not need the additive-principal
538+
-- *of `ω-rank-pow-succ ω` itself* — it needs additive-principal of
539+
-- `ω-rank-pow (head-Ω target)`, which already lands via the existing
540+
-- `additive-principal-ω-rank-pow {ω}` (lines 238–255).
541+
--
542+
-- Slice 2-bplus. Once the ω branch closes, prove the full lemma
543+
-- rank-pow-dominated-by-head-Ω : (t : BT) → NonBzero t → WfCNF t
544+
-- → rank-pow t <′ ω-rank-pow-succ (head-Ω t)
545+
-- by structural recursion on the WfCNF carrier. The bplus case needs
546+
-- a `rank-pow-mono-≤ᵇ : x ≤ᵇ y → rank-pow x ≤′ rank-pow y` companion
547+
-- for the original `<ᵇ` (the WfCNF tail bound is `_≤ᵇ_`, not `_≤ᵇ⁰_`).
548+
-- The existing `rank-pow-mono-≤ᵇ⁰` in `RankMonoUmbrella` covers the
549+
-- `<ᵇ⁰` carrier only. A direct `_≤ᵇ_`-mono primitive would need
550+
-- either (a) bridging `_≤ᵇ_` to `_≤ᵇ⁰_` (which is exactly the open
551+
-- Slice 4 problem — full rank-mono umbrella over the original `_<ᵇ_`),
552+
-- or (b) a head-Ω inversion lemma `bOmega ν <ᵇ x → ν <Ω head-Ω x`
553+
-- (and ψ-analogue) that does not transitively depend on rank-mono.
554+
-- Option (b) is the cleaner path; it parallels the existing
555+
-- per-constructor rank-mono primitives without going through the
556+
-- umbrella.

proofs/agda/Ordinal/Buchholz/Smoke.agda

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,3 +399,22 @@ open import Ordinal.Buchholz.HeadOmega using
399399
; head-Ω-bpsi
400400
; head-Ω-bplus-left
401401
)
402+
403+
-- Lane 3 head-Ω Slice 2 (own block per CLAUDE.md Working rules):
404+
-- the per-marker "next ω-power up" target `ω-rank-pow-succ` plus
405+
-- definitional sanity at the fin branch, the per-marker strict
406+
-- dominance at fin (`ω-rank-pow-<-succ-fin`), and the atomic
407+
-- rank-pow factoring through head-Ω. The ω-branch strict
408+
-- dominance and the full domination lemma over WfCNF carriers are
409+
-- deferred to follow-on slices Slice 2-omega and Slice 2-bplus
410+
-- respectively, per the obstruction note inline in `RankPow.agda`
411+
-- (the originally-proposed `ω-rank-pow-succ ω = olim (λ n →
412+
-- ω^(suc(suc n)))` represents the same ordinal as `ω-rank-pow ω`,
413+
-- so strict dominance at ω needs a different shape).
414+
open import Ordinal.Buchholz.RankPow using
415+
( ω-rank-pow-succ
416+
; ω-rank-pow-succ-fin
417+
; ω-rank-pow-<-succ-fin
418+
; rank-pow-bOmega-via-head-Ω
419+
; rank-pow-bpsi-via-head-Ω
420+
)

0 commit comments

Comments
 (0)