Skip to content

Commit efb7923

Browse files
committed
proof(ordinal): general head-Ω monotonicity head-Ω-mono (Gate 1 building block)
Adds the general leading-Ω monotonicity lemma over the whole `_<ᵇ_` relation: head-Ω-mono : x <ᵇ y → head-Ω x ≤Ω head-Ω y proved by structural recursion on the `_<ᵇ_` derivation (all 11 constructors). This generalises the two atomic inversions in this module — `head-Ω-inv-bOmega` (bOmega source, strict) and `head-Ω-inv-bpsi` (bpsi source, ≤) — to an arbitrary source shape, including `bzero` (via the `fin 0`-minimum helper `fin0-min`) and left-nested `bplus` chains (via the IH on `<ᵇ-{Ω+,ψ+,+Ω,+ψ,+1}`). Why it matters (Gate 1 scoping): the joint-bplus `<ᵇ-+1` rank-mono closure runs through CNF dominance — `rank-pow (bplus x₁ x₂) <′ ω-rank-pow-succ (head-Ω x₁)` (the landed `rank-pow-dominated-by-head-Ω`) composed with a leading-Ω bound on the target. `head-Ω-mono` supplies that bound for the general (incl. chain-headed) source, which the atomic inversions could not. The non-strict `≤Ω` is exactly right: the `<ᵇ-ψΩ≤` boundary (`bpsi ν α <ᵇ bOmega ν`) leaves the leading Ω-marker fixed, and that equal-Ω boundary is the residual the rank-adm discrimination must still cover. - `head-Ω-mono` pinned in `Ordinal/Buchholz/Smoke.agda`. - `Smoke.agda` + `All.agda` exit 0 under `--safe --without-K`; zero postulates, no escape pragmas, no funext. https://claude.ai/code/session_017t53M7W7ubmXpwymveLcCE
1 parent 30018b6 commit efb7923

2 files changed

Lines changed: 58 additions & 0 deletions

File tree

proofs/agda/Ordinal/Buchholz/HeadOmegaInversion.agda

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,15 @@ module Ordinal.Buchholz.HeadOmegaInversion where
6363

6464
open import Ordinal.OmegaMarkers using
6565
( OmegaIndex
66+
; fin
67+
; ω
6668
; _<Ω_
6769
; _≤Ω_
70+
; fin≤fin
71+
; fin≤ω
6872
; <Ω→≤Ω
6973
)
74+
open import Data.Nat using (z≤n)
7075
open import Ordinal.Buchholz.Syntax using
7176
( BT
7277
; bzero
@@ -76,12 +81,18 @@ open import Ordinal.Buchholz.Syntax using
7681
)
7782
open import Ordinal.Buchholz.Order using
7883
( _<ᵇ_
84+
; <ᵇ-0-Ω
85+
; <ᵇ-0-+
86+
; <ᵇ-0-ψ
7987
; <ᵇ-ΩΩ
8088
; <ᵇ-Ωψ
8189
; <ᵇ-ψΩ
8290
; <ᵇ-ψΩ≤
8391
; <ᵇ-Ω+
8492
; <ᵇ-ψ+
93+
; <ᵇ-+Ω
94+
; <ᵇ-+ψ
95+
; <ᵇ-+1
8596
)
8697
open import Ordinal.Buchholz.HeadOmega using (head-Ω)
8798

@@ -124,3 +135,45 @@ head-Ω-inv-bpsi : ∀ {ν α y} → bpsi ν α <ᵇ y → ν ≤Ω head-Ω y
124135
head-Ω-inv-bpsi (<ᵇ-ψΩ p) = <Ω→≤Ω p
125136
head-Ω-inv-bpsi (<ᵇ-ψΩ≤ p) = p
126137
head-Ω-inv-bpsi (<ᵇ-ψ+ p) = head-Ω-inv-bpsi p
138+
139+
----------------------------------------------------------------------
140+
-- General head-Ω monotonicity over the whole `_<ᵇ_` relation
141+
----------------------------------------------------------------------
142+
143+
-- `fin 0` is the minimum Ω-marker. Used for the `bzero`-source
144+
-- cases, where `head-Ω bzero = fin 0`.
145+
fin0-min : ν fin 0 ≤Ω ν
146+
fin0-min (fin n) = fin≤fin z≤n
147+
fin0-min ω = fin≤ω
148+
149+
-- The leading Ω-marker is monotone along ANY `_<ᵇ_` step:
150+
--
151+
-- x <ᵇ y → head-Ω x ≤Ω head-Ω y
152+
--
153+
-- This generalises the two atomic inversions above (which special-
154+
-- case a `bOmega`/`bpsi` source and additionally extract the
155+
-- *strict* bound where the constructor permits) to an arbitrary
156+
-- source shape, including `bzero` and left-nested `bplus` chains.
157+
-- The bound is necessarily non-strict: the `<ᵇ-ψΩ≤` constructor
158+
-- (`bpsi ν α <ᵇ bOmega ν`) and the analogous boundary steps leave
159+
-- the leading Ω-marker unchanged.
160+
--
161+
-- Proof: structural recursion on the `_<ᵇ_` derivation. Every
162+
-- recursive call (`<ᵇ-Ω+`, `<ᵇ-ψ+`, `<ᵇ-+Ω`, `<ᵇ-+ψ`, `<ᵇ-+1`)
163+
-- descends to a structurally-smaller derivation; the `head-Ω`
164+
-- reductions on `bplus` (leftmost) and on the atomic constructors
165+
-- are definitional, so each goal lines up with `<Ω→≤Ω`, the
166+
-- carried `≤Ω` witness, `fin0-min`, or the IH.
167+
head-Ω-mono : {x y} x <ᵇ y head-Ω x ≤Ω head-Ω y
168+
head-Ω-mono (<ᵇ-0-Ω {μ}) = fin0-min μ
169+
head-Ω-mono (<ᵇ-0-ψ {ν}) = fin0-min ν
170+
head-Ω-mono (<ᵇ-0-+ {x}) = fin0-min (head-Ω x)
171+
head-Ω-mono (<ᵇ-ΩΩ p) = <Ω→≤Ω p
172+
head-Ω-mono (<ᵇ-Ωψ p) = <Ω→≤Ω p
173+
head-Ω-mono (<ᵇ-ψΩ p) = <Ω→≤Ω p
174+
head-Ω-mono (<ᵇ-ψΩ≤ p) = p
175+
head-Ω-mono (<ᵇ-Ω+ p) = head-Ω-mono p
176+
head-Ω-mono (<ᵇ-ψ+ p) = head-Ω-mono p
177+
head-Ω-mono (<ᵇ-+Ω p) = head-Ω-mono p
178+
head-Ω-mono (<ᵇ-+ψ p) = head-Ω-mono p
179+
head-Ω-mono (<ᵇ-+1 p) = head-Ω-mono p

proofs/agda/Ordinal/Buchholz/Smoke.agda

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,9 +431,14 @@ open import Ordinal.Buchholz.RankPow using
431431
-- domination lemma's dependency-graph clean against future signature
432432
-- changes to `rank-pow-mono-≤ᵇ`. Strict on the Ω-source, non-strict
433433
-- on the ψ-source (tracks the `<ᵇ-ψΩ≤` constructor).
434+
-- `head-Ω-mono` generalises the two atomic inversions to an
435+
-- arbitrary `_<ᵇ_` source shape (incl. bzero + left-nested bplus):
436+
-- `x <ᵇ y → head-Ω x ≤Ω head-Ω y`. The non-strict leading-Ω bound
437+
-- that the joint-bplus (`<ᵇ-+1`) rank-mono closure consumes.
434438
open import Ordinal.Buchholz.HeadOmegaInversion using
435439
( head-Ω-inv-bOmega
436440
; head-Ω-inv-bpsi
441+
; head-Ω-mono
437442
)
438443

439444
-- Lane 3 head-Ω Slice 2-bplus (own block per CLAUDE.md Working

0 commit comments

Comments
 (0)