Skip to content

Commit 6547ea8

Browse files
hyperpolymathclaude
andcommitted
proof: well-foundedness of _<ᵇᵘ_ via rank-embedding transport
Closes Gate 2 of the Slice 3+4 Route A session arc. Derives `WellFounded _<ᵇᵘ_` mechanically from `rank-pow-mono-<ᵇᵘ` (PR #168) and the existing `wf-<′` via the standard Subrelation + InverseImage transport pattern documented in `Ordinal.Buchholz.RankBrouwer`'s preamble. Zero new proof obligations; purely structural. `--safe --without-K`, no postulates, no funext. ## The rank-embedding recipe ```agda wf-rank-pow-pullback : WellFounded (λ x y → rank-pow x <′ rank-pow y) wf-rank-pow-pullback = On.wellFounded rank-pow wf-<′ wf-<ᵇᵘ : WellFounded _<ᵇᵘ_ wf-<ᵇᵘ = Subrelation.wellFounded rank-pow-mono-<ᵇᵘ wf-rank-pow-pullback ``` Two steps: 1. `On.wellFounded` (= `InverseImage.wellFounded`) lifts well- foundedness of `_<′_` on `Ord` to the pullback `_<′_ on rank-pow` on `BT`. 2. `Subrelation.wellFounded` transports well-foundedness from the pullback to `_<ᵇᵘ_`, consuming `rank-pow-mono-<ᵇᵘ` as the witness that `_<ᵇᵘ_` is a sub-relation of the pullback. The recipe is documented in `RankBrouwer.agda:55-56`: > wf-<ᵇʳᶠ = Subrelation.wellFounded rank-mono > (InverseImage.wellFounded rank wf-<′) `On.wellFounded` is the modern (non-deprecated) alias for `InverseImage.wellFounded`. ## Slice 3+4 Route A gate status after this PR | Gate | Status | |---|---| | 1 — tail-rank-equality discharge (cross-head rank-equal case) | open (structural blocker) | | **2 — well-foundedness of `_<ᵇᵘ_`** | **CLOSED HERE** | | 3 — Path-4 + further source-rule extensions | open (future-work, mechanical) | ## What this does NOT do - Does NOT prove well-foundedness of the WfCNF-narrowed `_<ᵇᵘⁿ_` (PR #169) separately — follows by the same Subrelation transport from `wf-<ᵇᵘ` via the canonical `<ᵇᵘⁿ → <ᵇᵘ` projection. Left for a thin follow-on if specifically needed. - Does NOT add a Brouwer-rank embedding stronger than `rank-pow` — `rank-pow` is K-free + lands in `Ord` + already discharges the WF transport. Nothing more sophisticated is needed. ## Local verification - All four Agda lanes typecheck clean, exit 0. - `bash tools/check-guardrails.sh proofs/agda` — 163 modules pass. - `sh scripts/kernel-guard.sh` — PASS. Two new names pinned in `Ordinal/Buchholz/Smoke.agda`: `wf-rank-pow-pullback`, `wf-<ᵇᵘ`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 8eb08de commit 6547ea8

3 files changed

Lines changed: 110 additions & 0 deletions

File tree

proofs/agda/All.agda

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ open import Ordinal.Buchholz.RankMonoUmbrellaSlice3
151151
open import Ordinal.Buchholz.RankMonoUmbrellaSlice4
152152
open import Ordinal.Buchholz.RankMonoSameLeft
153153
open import Ordinal.Buchholz.RankMonoUnion
154+
open import Ordinal.Buchholz.RankMonoUnionWF
154155
open import Ordinal.Buchholz.RecursiveSurfaceOrder
155156
open import Ordinal.Buchholz.RecursiveSurfaceBudget
156157
open import Ordinal.Buchholz.SurfaceOrder
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
{-# OPTIONS --safe --without-K #-}
2+
-- SPDX-License-Identifier: MPL-2.0
3+
-- SPDX-FileCopyrightText: 2025-2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
4+
5+
-- Well-foundedness of the union rank-mono umbrella (2026-05-30).
6+
--
7+
-- ## What this lands
8+
--
9+
-- `wf-<ᵇᵘ : WellFounded _<ᵇᵘ_` — every union-derivation chain
10+
-- terminates. Derived mechanically from `rank-pow-mono-<ᵇᵘ`
11+
-- (PR #168) and the well-foundedness of Brouwer's `_<′_` (already
12+
-- proved in `Ordinal.Brouwer.Phase13.wf-<′`) via the standard
13+
-- Subrelation + InverseImage combinators from
14+
-- `Induction.WellFounded` / `Relation.Binary.Construct.On`.
15+
--
16+
-- ## The rank-embedding recipe
17+
--
18+
-- This is the standard rank-WF transport pattern documented in
19+
-- `Ordinal.Buchholz.RankBrouwer`'s preamble:
20+
--
21+
-- wf-<ᵇᵘ = Subrelation.wellFounded rank-pow-mono-<ᵇᵘ
22+
-- (On.wellFounded rank-pow wf-<′)
23+
--
24+
-- 1. `On.wellFounded rank-pow wf-<′` lifts well-foundedness of
25+
-- `_<′_` on `Ord` to the pullback `_<′_ on rank-pow` on `BT`
26+
-- — InverseImage transport.
27+
-- 2. `Subrelation.wellFounded rank-pow-mono-<ᵇᵘ` then transports
28+
-- well-foundedness from the pullback to `_<ᵇᵘ_` itself,
29+
-- consuming `rank-pow-mono-<ᵇᵘ : x <ᵇᵘ y → rank-pow x <′ rank-pow y`
30+
-- as the witness that `_<ᵇᵘ_` is a sub-relation of the pullback.
31+
--
32+
-- The recipe is purely structural: zero new proof obligations.
33+
-- Closure follows from the existing `rank-pow-mono-<ᵇᵘ` (#168)
34+
-- + the existing `wf-<′` (`Phase13`).
35+
--
36+
-- ## Slice 3+4 Route A gate 2 closure
37+
--
38+
-- Per #168's closing note, three gates remained open at the
39+
-- architectural-realisation moment. This module discharges
40+
-- **Gate 2** (well-foundedness of `_<ᵇᵘ_`) via the rank-embedding
41+
-- transport, leaving:
42+
--
43+
-- * Gate 1 — tail-rank-equality discharge for the cross-head
44+
-- rank-equal case (structural ordinal-arithmetic blocker).
45+
-- * Gate 3 — Path-4 + further source-rule extensions
46+
-- (future-work, mechanical per the extension recipe).
47+
--
48+
-- ## What this does NOT do
49+
--
50+
-- * Does NOT prove well-foundedness of the WfCNF-narrowed
51+
-- `_<ᵇᵘⁿ_` (PR #169) separately — it follows by the same
52+
-- Subrelation transport from `wf-<ᵇᵘ` via the canonical
53+
-- `<ᵇᵘⁿ → <ᵇᵘ` projection. Left for a thin follow-on if a
54+
-- consumer needs the WfCNF-bundled form's WF specifically.
55+
-- * Does NOT add a Brouwer-rank embedding stronger than
56+
-- `rank-pow` — `rank-pow` is K-free + lands in `Ord` (Brouwer
57+
-- ordinals) + already discharges the WF transport. Nothing
58+
-- more sophisticated is needed for this consumer.
59+
60+
module Ordinal.Buchholz.RankMonoUnionWF where
61+
62+
open import Induction.WellFounded using
63+
( WellFounded
64+
; module Subrelation
65+
)
66+
open import Relation.Binary.Construct.On as On using (wellFounded)
67+
68+
open import Ordinal.Brouwer using (Ord)
69+
open import Ordinal.Brouwer.Phase13 using (_<′_; wf-<′)
70+
open import Ordinal.Buchholz.Syntax using (BT)
71+
open import Ordinal.Buchholz.RankPow using (rank-pow)
72+
open import Ordinal.Buchholz.RankMonoUnion using
73+
( _<ᵇᵘ_
74+
; rank-pow-mono-<ᵇᵘ
75+
)
76+
77+
----------------------------------------------------------------------
78+
-- Well-foundedness of `_<ᵇᵘ_`
79+
----------------------------------------------------------------------
80+
81+
-- Step 1 — InverseImage transport: well-foundedness of `_<′_` on
82+
-- `Ord` lifts to well-foundedness of `_<′_ on rank-pow` on `BT`.
83+
-- Note that the pullback relation has the same shape as
84+
-- `rank-pow x <′ rank-pow y` but is named `_<′_ on rank-pow`.
85+
86+
wf-rank-pow-pullback : WellFounded (λ x y rank-pow x <′ rank-pow y)
87+
wf-rank-pow-pullback = On.wellFounded rank-pow wf-<′
88+
89+
-- Step 2 — Subrelation transport: any sub-relation of a well-
90+
-- founded relation is well-founded. `rank-pow-mono-<ᵇᵘ` is the
91+
-- witness that `_<ᵇᵘ_` is a sub-relation of `_<′_ on rank-pow`,
92+
-- so `_<ᵇᵘ_` inherits well-foundedness.
93+
94+
wf-<ᵇᵘ : WellFounded _<ᵇᵘ_
95+
wf-<ᵇᵘ = Subrelation.wellFounded rank-pow-mono-<ᵇᵘ wf-rank-pow-pullback

proofs/agda/Ordinal/Buchholz/Smoke.agda

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -603,3 +603,17 @@ open import Ordinal.Buchholz.RankMonoUnion using
603603
; <ᵇᵘ-from-<ᵇ⁰
604604
; <ᵇᵘ-from-<ᵇ⁰-via-<ᵇ⁺²
605605
)
606+
607+
-- Union umbrella well-foundedness 2026-05-30 (own block per
608+
-- CLAUDE.md Working rules): closes Gate 2 of the Slice 3+4 Route
609+
-- A session arc. `wf-<ᵇᵘ` derives WellFounded `_<ᵇᵘ_` via the
610+
-- standard Subrelation + InverseImage rank-embedding transport
611+
-- (rank-pow ∘ wf-<′). Zero new proof obligations; purely
612+
-- structural. Together with the WfCNF wrap (PR #169) this
613+
-- equips downstream Buchholz consumers with both the
614+
-- canonical-form invariant AND termination of union-derivation
615+
-- chains.
616+
open import Ordinal.Buchholz.RankMonoUnionWF using
617+
( wf-rank-pow-pullback
618+
; wf-<ᵇᵘ
619+
)

0 commit comments

Comments
 (0)