Skip to content

Commit bf9ee6e

Browse files
ordinal(buchholz): head-Ω Slice 2 — ω-rank-pow-succ + fin-branch dominance (#130)
Adds ω-rank-pow-succ + fin-branch strict dominance + atomic-rank factoring through head-Ω. Documents the ω-branch obstruction (the originally-proposed shape denotes the same ordinal as ω-rank-pow ω) and the Slice 2-omega / Slice 2-bplus follow-on paths inline in RankPow.agda. Five headlines pinned in Ordinal/Buchholz/Smoke.agda under their own using block. No postulates; --safe --without-K throughout; scripts/kernel-guard.sh PASS. Admin-merged before CI green at user request.
1 parent 65806f4 commit bf9ee6e

2 files changed

Lines changed: 171 additions & 0 deletions

File tree

proofs/agda/Ordinal/Buchholz/RankPow.agda

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,3 +418,155 @@ 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+
-- (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.
552+
--
553+
-- TODO(slice-2-bplus). Once the ω branch closes, prove the full
554+
-- lemma
555+
-- rank-pow-dominated-by-head-Ω : (t : BT) → NonBzero t → WfCNF t
556+
-- → 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.

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)