@@ -73,6 +73,8 @@ open import Ordinal.Brouwer.OmegaPow using
7373 ; ω^_-pos
7474 ; ω^-strict-mono
7575 ; ω^-strict-mono-suc
76+ ; _·ℕ_
77+ ; X≤′oz⊕X
7678 )
7779open import Ordinal.Buchholz.Syntax using
7880 ( BT
@@ -429,31 +431,32 @@ rank-mono-<ᵇ-+1-ψ-target {x₁} {x₂} {ν} {α} {y₂} =
429431-- `ω-rank-pow-succ : OmegaIndex → Ord` consumed by the planned (but
430432-- not yet landed) `<ᵇ-+1` joint-bplus head-Ω domination route.
431433--
432- -- ## Scope of this slice
434+ -- ## Scope of this slice (as updated by Slice 2-omega closure)
433435--
434436-- Lands:
435437-- * `ω-rank-pow-succ : OmegaIndex → Ord`
436438-- * `ω-rank-pow-succ-fin` — definitional sanity, fin branch
437- -- * `ω-rank-pow-<-succ-fin` — per-marker strict dominance at fin
439+ -- * `ω-rank-pow-succ-omega` — definitional sanity, ω branch
440+ -- * `ω-rank-pow-<-succ-fin` — per-marker strict dominance, fin
441+ -- * `ω-rank-pow-<-succ-omega` — per-marker strict dominance, ω
442+ -- * `ω-rank-pow-<-succ` — unified across both branches
438443-- * `rank-pow-bOmega-via-head-Ω`,
439444-- `rank-pow-bpsi-via-head-Ω` — atomic-rank `refl`-shape primitives
440445-- factoring `rank-pow` through `head-Ω` for the two non-bplus,
441446-- non-bzero `BT` constructors. Useful at consumer-recursion
442447-- sites that want to rewrite source-rank into head-Ω form
443448-- without unfolding `rank-pow` and `head-Ω` separately.
444449--
445- -- Deferred (with concrete obstructions documented inline below) :
450+ -- Still deferred :
446451-- * The headline domination lemma
447452-- `rank-pow-dominated-by-head-Ω : (t : BT) → NonBzero t →
448453-- 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.
454+ -- in its full generality. Both per-marker dominances now hold;
455+ -- the structural recursion on the WfCNF carrier (the bplus case
456+ -- in particular) is Slice 2-bplus. See the `TODO(slice-2-bplus)`
457+ -- marker further down.
455458--
456- -- ## Obstruction note for the ω branch
459+ -- ## History note: the original ω- branch obstruction
457460--
458461-- The originally proposed shape (per CLAUDE.md § "Session arc
459462-- 2026-05-27 late evening" — Slice 2 sketch) was:
@@ -470,40 +473,77 @@ rank-mono-<ᵇ-+1-ψ-target {x₁} {x₂} {ν} {α} {y₂} =
470473-- ≤′ ω^(suc(suc k)) ·ℕ j` obligation that is again a limit-vs-osuc
471474-- comparison, recursing indefinitely.
472475--
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 .
476+ -- Slice 2-omega (this slice) replaces the ω branch with the
477+ -- documented candidate `olim (λ n → ω-rank-pow ω ·ℕ n )`, denoting
478+ -- `ω^(ω+1) = ω^ω · ω` — the next additive-principal above `ω^ω`.
479+ -- The strict-dominance proof at the ω branch mirrors
480+ -- `Brouwer/OmegaPow.ω^-strict-mono-suc` (line 204): pick branch
481+ -- index 2 in the target limit, reduce to a `osuc (ω-rank-pow ω) ≤′
482+ -- (oz ⊕ ω-rank-pow ω) ⊕ ω -rank-pow ω` obligation, chain
483+ -- `X≤′oz⊕X` with `⊕-mono-<-right (ω-rank-pow-pos ω)` .
481484--
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.
485+ -- Sanity check (iii) from the original obstruction note — that the
486+ -- leading `oz ⊕` in `(ω-rank-pow ω) ·ℕ 1` is NOT definitionally
487+ -- `ω-rank-pow ω` — was the hazard to verify; the proof goes through
488+ -- via `X≤′oz⊕X` which proves exactly the propositional `X ≤′ oz ⊕ X`
489+ -- the obstruction note flagged as needed. Cross-checks (i) and (ii)
490+ -- from that note still stand: the consumer (Slice 3) uses the existing
491+ -- `additive-principal-ω-rank-pow {head-Ω target}` for additive-principal
492+ -- closure, not any property of `ω-rank-pow-succ ω` itself.
489493
490494ω-rank-pow-succ : OmegaIndex → Ord
491495ω-rank-pow-succ (fin n) = ω^ (suc (suc n))
492- ω-rank-pow-succ ω = olim (λ n → ω^ (suc (suc n)) )
496+ ω-rank-pow-succ ω = olim (λ n → ω-rank-pow ω ·ℕ n )
493497
494498-- Definitional sanity at the fin branch. Mirrors `ω-rank-pow-fin`.
495499ω-rank-pow-succ-fin : ∀ n → ω-rank-pow-succ (fin n) ≡ ω^ (suc (suc n))
496500ω-rank-pow-succ-fin _ = refl
497501
502+ -- Definitional sanity at the ω branch (post Slice 2-omega). Mirrors
503+ -- `ω-rank-pow-succ-fin`. Records the shape change from the
504+ -- originally-proposed `olim (λ n → ω^(suc(suc n)))` to
505+ -- `olim (λ n → ω-rank-pow ω ·ℕ n)`, which denotes `ω^(ω+1)` and is
506+ -- strictly above `ω-rank-pow ω = ω^ω`.
507+ ω-rank-pow-succ-omega : ω-rank-pow-succ ω ≡ olim (λ n → ω-rank-pow ω ·ℕ n)
508+ ω-rank-pow-succ-omega = refl
509+
498510-- Per-marker strict dominance at the fin branch. For each `fin n`,
499511-- `ω-rank-pow (fin n) = ω^(suc n)` is strictly below
500512-- `ω-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.
513+ -- strict-mono of the ω-power ladder.
503514ω-rank-pow-<-succ-fin : ∀ n
504515 → ω-rank-pow (fin n) <′ ω-rank-pow-succ (fin n)
505516ω-rank-pow-<-succ-fin n = ω^-strict-mono-suc (suc n)
506517
518+ -- Per-marker strict dominance at the ω branch. Mirrors the
519+ -- `ω^-strict-mono-suc` proof at line 204 of `Brouwer/OmegaPow.agda`:
520+ -- pick branch index 2 in the target limit; reduce the obligation to
521+ -- `osuc (ω-rank-pow ω) ≤′ (oz ⊕ ω-rank-pow ω) ⊕ ω-rank-pow ω`; chain
522+ -- `X≤′oz⊕X` (the `osuc/osuc` clause of `_≤′_` makes this fill the
523+ -- LHS step) with `⊕-mono-<-right (ω-rank-pow-pos ω)` (after right-unit
524+ -- `α ⊕ oz = α` reduction). Closes Slice 2-omega per the obstruction
525+ -- note above.
526+ ω-rank-pow-<-succ-omega : ω-rank-pow ω <′ ω-rank-pow-succ ω
527+ ω-rank-pow-<-succ-omega = 2 , step
528+ where
529+ step : osuc (ω-rank-pow ω) ≤′ (oz ⊕ ω-rank-pow ω) ⊕ ω-rank-pow ω
530+ step =
531+ ≤′-trans
532+ {osuc (ω-rank-pow ω)}
533+ {osuc (oz ⊕ ω-rank-pow ω)}
534+ {(oz ⊕ ω-rank-pow ω) ⊕ ω-rank-pow ω}
535+ (X≤′oz⊕X {ω-rank-pow ω})
536+ (⊕-mono-<-right {oz ⊕ ω-rank-pow ω} {oz} {ω-rank-pow ω}
537+ (ω-rank-pow-pos ω))
538+
539+ -- Unified strict-dominance lemma across both Ω-marker branches.
540+ -- Consumers wanting the per-branch versions still have them under
541+ -- `-fin` / `-omega`; the unified form is convenient when the branch is
542+ -- abstracted as `μ : OmegaIndex`.
543+ ω-rank-pow-<-succ : ∀ μ → ω-rank-pow μ <′ ω-rank-pow-succ μ
544+ ω-rank-pow-<-succ (fin n) = ω-rank-pow-<-succ-fin n
545+ ω-rank-pow-<-succ ω = ω-rank-pow-<-succ-omega
546+
507547-- Atomic-rank-pow `refl`-shape primitives. For non-bplus, non-bzero
508548-- BT constructors, `rank-pow` reduces to `ω-rank-pow` of the
509549-- corresponding `head-Ω` value. Both equations are `refl`; provided
@@ -524,49 +564,25 @@ rank-pow-bpsi-via-head-Ω _ _ = refl
524564-- Where this lands in the head-Ω closure plan
525565----------------------------------------------------------------------
526566--
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- -- (iii) sanity-check the indexing. The candidate's branches are
542- -- `(ω-rank-pow ω) ·ℕ n = (… (oz ⊕ ω-rank-pow ω) … ⊕ ω-rank-pow ω)`
543- -- — the leading `oz ⊕` is NOT definitionally `ω-rank-pow ω` under
544- -- Brouwer's right-recursing `_⊕_`. As an ordinal denotation the
545- -- supremum is `ω^ω · ω = ω^(ω+1)` and is strictly above `ω^ω`, so
546- -- the lemma *should* go through, but the proof needs the
547- -- propositional `oz ⊕ X ≤′ X` (or a path-algebra equivalent) at the
548- -- right step — this is exactly the same hazard ("same ordinal under
549- -- different ℕ-indexing") that disqualified the original
550- -- `olim (λ n → ω^(suc(suc n)))` shape. Verify with a thin spike
551- -- before committing the body.
567+ -- The abstractions landed here (`ω-rank-pow-succ` + both per-marker
568+ -- dominances + the atomic factoring) close everything Slice 2 promised
569+ -- *except* the full domination lemma over the WfCNF carrier. One
570+ -- follow-on remains.
552571--
553- -- TODO(slice-2-bplus). Once the ω branch closes, prove the full
554- -- lemma
572+ -- TODO(slice-2-bplus). Prove the full lemma
555573-- rank-pow-dominated-by-head-Ω : (t : BT) → NonBzero t → WfCNF t
556574-- → rank-pow t <′ ω-rank-pow-succ (head-Ω t)
557- -- by structural recursion on the WfCNF carrier. The bplus case
558- -- needs a `rank-pow-mono-≤ᵇ : x ≤ᵇ y → rank-pow x ≤′ rank-pow y`
559- -- companion for the original `_<ᵇ_` — landing-site below this
560- -- comment block — because the WfCNF tail bound is `_≤ᵇ_`, not
561- -- `_≤ᵇ⁰_`. The existing `rank-pow-mono-≤ᵇ⁰` in `RankMonoUmbrella`
562- -- covers the `<ᵇ⁰` carrier only. A direct `_≤ᵇ_`-mono primitive
563- -- would need either (a) bridging `_≤ᵇ_` to `_≤ᵇ⁰_` (which is
564- -- exactly the open Slice 4 problem — full rank-mono umbrella over
565- -- the original `_<ᵇ_`), or (b) a head-Ω inversion lemma
566- -- `bOmega ν <ᵇ x → ν <Ω head-Ω x` (and ψ-analogue) that does not
567- -- transitively depend on rank-mono. Option (b) is the cleaner
568- -- path; it parallels the existing per-constructor rank-mono
569- -- primitives without going through the umbrella, and keeps
570- -- `rank-pow-dominated-by-head-Ω` independent of
571- -- `rank-pow-mono-≤ᵇ` so that a future signature change to one
572- -- does not silently break the other.
575+ -- by structural recursion on the WfCNF carrier. Both per-marker
576+ -- dominances now hold (`ω-rank-pow-<-succ`), so the bOmega / bpsi
577+ -- atomic cases discharge directly via the atomic factoring lemmas
578+ -- (`rank-pow-bOmega-via-head-Ω`, `rank-pow-bpsi-via-head-Ω`). The
579+ -- remaining bplus case needs a `rank-pow-mono-≤ᵇ : x ≤ᵇ y → rank-pow
580+ -- x ≤′ rank-pow y` companion for the original `_<ᵇ_` (the WfCNF tail
581+ -- bound is `_≤ᵇ_`, not `_≤ᵇ⁰_`). The existing `rank-pow-mono-≤ᵇ⁰`
582+ -- in `RankMonoUmbrella` covers the `<ᵇ⁰` carrier only. Option (b)
583+ -- of the original two paths — head-Ω inversion that does not
584+ -- transitively depend on rank-mono — landed separately as
585+ -- `Ordinal.Buchholz.HeadOmegaInversion` (the lemmas
586+ -- `head-Ω-inv-bOmega` and `head-Ω-inv-bpsi`). Slice 2-bplus consumes
587+ -- those plus the per-marker dominances above; no further dependency
588+ -- on rank-mono is introduced.
0 commit comments