Skip to content

Commit 0d4f5f8

Browse files
committed
Merge branch 'main' into pr-233 (final resolution)
2 parents d79be38 + c5bb2a7 commit 0d4f5f8

4 files changed

Lines changed: 89 additions & 11 deletions

File tree

CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ inverse / surjection claim, which would be false since `aggregate` is onto);
281281
the citation-level scope of the oikos bridge (oikos is Rust, there is no
282282
import path); the merge-race governance red (benign, not addressable).
283283

284-
### Session arc 2026-06-15→18 — fidelity boundary reduction + BH climb rung 1 (READ THIS FIRST)
284+
### Session arc 2026-06-15→18 — fidelity boundary reduction + BH climb rung 1 (ordinal/BH track — read after the bridge arc)
285285

286286
*Where we started:* post doubled-ladder Gate 1. Two soundness escape-hatches
287287
stood out: (1) the (epi,mono) image factorisation's propositional truncation

proofs/agda/EchoImageFactorizationPropPostulated.agda

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{-# OPTIONS --without-K #-}
22

3-
-- hypatia: allow code_safety/agda_postulate -- ∥_∥ cannot be constructed in --safe --without-K without HITs / Cubical; the four postulates below are the scoped, documented TruncInterface demonstration. Exploratory per docs/echo-types/echo-kernel-note.adoc; guardrail-exempted in tools/check-guardrails.sh; base EchoImageFactorizationProp remains --safe --without-K with zero postulates.
3+
-- hypatia: allow code_safety/agda_postulate -- ∥_∥ cannot be constructed in --safe --without-K without HITs / Cubical; the four postulates below are the scoped, documented TruncInterface demonstration. Exploratory per docs/echo-types/echo-kernel-note.adoc; guardrail-exempted in tools/check-guardrails.sh; base EchoImageFactorizationProp remains --safe --without-K with zero postulates. DISCHARGED FOR REAL (zero postulates) in the CI-verified --cubical --safe lane by EchoImageFactorizationPropCubical.agda (run in .github/workflows/agda.yml step "Typecheck cubical lane (epi/mono truncation discharge)"); see docs/proof-debt.md §(a). These four postulates are therefore the --safe --without-K shadow of a now-CONSTRUCTED higher inductive type, not an irreducible axiom.
44

55
-- Postulated-truncation consumer for `EchoImageFactorizationProp`.
66
--
@@ -62,9 +62,15 @@
6262
-- the parametric proofs in `ImageProp` need.
6363
-- * Anything about the postulates' consistency. The standard
6464
-- HoTT discipline says the four laws together characterise
65-
-- `Trunc A` up to equivalence (and Cubical Agda or a hand-
66-
-- rolled HIT realises them concretely); we cite that
67-
-- literature rather than mechanise it.
65+
-- `Trunc A` up to equivalence. As of 2026-06-15 that
66+
-- characterisation is no longer merely cited: it is MECHANISED
67+
-- in-repo by `EchoImageFactorizationPropCubical.agda`, which
68+
-- CONSTRUCTS `∥_∥` as a genuine higher inductive type under
69+
-- `--cubical --safe` and re-proves the four obligations as
70+
-- theorems (zero postulates, CI-verified — see
71+
-- docs/proof-debt.md §(a)). The postulates here remain only
72+
-- because `∥_∥` cannot be built WITHIN `--safe --without-K`
73+
-- itself, not because the construction is unavailable.
6874
--
6975
-- The mechanical contribution: pin that the parameterised
7076
-- `EchoImageFactorizationProp.ImageProp` module can be CONSUMED

proofs/agda/Ordinal/Brouwer/OrdinalExp.agda

Lines changed: 74 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,33 @@
2626
-- value. (ε₀ is itself the collapse ψ₀(Ω₁) — the first nontrivial data
2727
-- point the eventual `denotation` ⟦·⟧ must reproduce.)
2828
--
29-
-- This module does NOT prove ε₀ is an ε-number (`ω^^ ε₀ ≡ ε₀`); that
30-
-- fixpoint property and the inflationary `α <′ ω^^ α` are follow-on
31-
-- rungs.
29+
-- RUNG 2 (2026-06-18): ε₀ IS an ε-number — `ω^^ ε₀ ≃ ε₀` as `_≤′_` in
30+
-- BOTH directions (`ω^^-ε₀-≤`, `ε₀-≤-ω^^-ε₀`, packaged `ε₀-ε-number`).
31+
-- bi-`≤′`, not `≡`, because two `olim`s of different ℕ-indexings of the
32+
-- same supremum are not definitionally equal. No general inflationary
33+
-- lemma is needed: `ω^^ ε₀` is definitionally the `olim` of the shifted
34+
-- tower `n ↦ ε-tower (suc n)`, so each direction reduces to one-step
35+
-- `f-in-lim′` (+ `ω^^-pos` for the base index).
36+
--
37+
-- The *strict* inflationary `α <′ ω^^ α` is deliberately NOT pursued: it
38+
-- is FALSE exactly at the ε-numbers (ε₀ = ω^^ ε₀ is the counterexample).
39+
--
40+
-- RUNG 3 (2026-06-18): the NON-strict inflationary `ω^^-infl : α ≤′ ω^^ α`
41+
-- IS proved below — the engine for enumerating ε-numbers (φ₁) and the
42+
-- higher Veblen φ hierarchy toward Γ₀. (`α ≤′ ω^^ α` holds everywhere,
43+
-- with equality exactly at the ε-numbers.)
3244

3345
module Ordinal.Brouwer.OrdinalExp where
3446

3547
open import Data.Nat.Base using (ℕ; zero; suc)
36-
open import Data.Product.Base using (Σ; _,_)
48+
open import Data.Product.Base using (Σ; _,_; _×_)
3749
open import Data.Unit.Base using (tt)
3850
open import Relation.Binary.PropositionalEquality using (_≡_; refl)
3951

4052
open import Ordinal.Brouwer using (Ord; oz; osuc; olim)
41-
open import Ordinal.Brouwer.Phase13 using (_≤′_; _<′_; f-in-lim′)
42-
open import Ordinal.Brouwer.OmegaPow using (_·ℕ_; oz<′oz⊕)
53+
open import Ordinal.Brouwer.Arithmetic using (_⊕_)
54+
open import Ordinal.Brouwer.Phase13 using (_≤′_; _<′_; f-in-lim′; ≤′-trans; osuc-mono-≤′; ⊕-mono-≤-right)
55+
open import Ordinal.Brouwer.OmegaPow using (_·ℕ_; oz<′oz⊕; X≤′oz⊕X)
4356

4457
----------------------------------------------------------------------
4558
-- Ordinal exponentiation base ω
@@ -83,3 +96,58 @@ open import Ordinal.Brouwer.OmegaPow using (_·ℕ_; oz<′oz⊕)
8396

8497
ε-tower-below-ε₀ : n ε-tower n ≤′ ε₀
8598
ε-tower-below-ε₀ n = f-in-lim′ ε-tower n
99+
100+
----------------------------------------------------------------------
101+
-- ε₀ is an ε-number: a fixed point of ω-exponentiation (RUNG 2)
102+
----------------------------------------------------------------------
103+
104+
-- `ω^^ ε₀ ≃ ε₀`, as `_≤′_` in both directions. `ω^^ ε₀ = ω^^ (olim
105+
-- ε-tower)` reduces to `olim (n ↦ ω^^ (ε-tower n))`, and each
106+
-- `ω^^ (ε-tower n)` is definitionally `ε-tower (suc n)` — i.e. `ω^^ ε₀`
107+
-- is the supremum of the tower SHIFTED by one. A shifted supremum has
108+
-- the same value, so both inequalities are one-step `f-in-lim′`s.
109+
110+
-- Upper: every element of the shifted tower is below ε₀.
111+
ω^^-ε₀-≤ : ω^^ ε₀ ≤′ ε₀
112+
ω^^-ε₀-≤ n = f-in-lim′ ε-tower (suc n)
113+
114+
-- Lower: every tower element is below the shifted tower's supremum.
115+
-- The base index ε-tower 0 = 1 sits below ε-tower 1 = ω^^ 1 by `ω^^-pos`;
116+
-- every successor element ε-tower (suc m) = ω^^ (ε-tower m) IS the m-th
117+
-- element of the shifted tower, so it is below by `f-in-lim′`.
118+
ε₀-≤-ω^^-ε₀ : ε₀ ≤′ ω^^ ε₀
119+
ε₀-≤-ω^^-ε₀ zero = 0 , ω^^-pos (osuc oz)
120+
ε₀-≤-ω^^-ε₀ (suc m) = f-in-lim′ (λ k ω^^ (ε-tower k)) m
121+
122+
-- ε₀ is a fixed point of ω-exponentiation (the defining property of an
123+
-- ε-number), packaged as bi-`≤′`.
124+
ε₀-ε-number : (ω^^ ε₀ ≤′ ε₀) × (ε₀ ≤′ ω^^ ε₀)
125+
ε₀-ε-number = ω^^-ε₀-≤ , ε₀-≤-ω^^-ε₀
126+
127+
----------------------------------------------------------------------
128+
-- ω-exponentiation is inflationary (RUNG 3 prerequisite)
129+
----------------------------------------------------------------------
130+
131+
-- `α ≤′ ω^^ α` for every α — the non-strict inflationary law. This is
132+
-- the engine the Veblen φ-hierarchy needs: "the next ε-number strictly
133+
-- above β" is a genuine fixed point only because `osuc β ≤′ ω^^ (osuc β)`.
134+
-- (The strict `α <′ ω^^ α` is FALSE at ε-numbers — ε₀ = ω^^ ε₀.)
135+
--
136+
-- * oz : `oz ≤′ _` is `⊤`.
137+
-- * osuc β : witness index 2, since `(ω^^ β) ·ℕ 2 ≡ (oz ⊕ ω^^ β) ⊕ ω^^ β`;
138+
-- chain `osuc β ≤′ osuc (ω^^ β) ≤′ osuc (oz ⊕ ω^^ β) ≤′ (oz ⊕ ω^^ β) ⊕ ω^^ β`
139+
-- via `osuc-mono-≤′` (IH, then `X≤′oz⊕X`) and right-monotonicity of `_⊕_`
140+
-- (`⊕-mono-≤-right`, using `osuc oz ≤′ ω^^ β` = `ω^^-pos β` and the
141+
-- definitional `Y ⊕ osuc oz ≡ osuc Y`).
142+
-- * olim f : per branch, IH `f n ≤′ ω^^ (f n)` then `f-in-lim′`.
143+
ω^^-infl : α α ≤′ ω^^ α
144+
ω^^-infl oz = tt
145+
ω^^-infl (osuc β) =
146+
2 , ≤′-trans {osuc β} {osuc (ω^^ β)} {(oz ⊕ ω^^ β) ⊕ ω^^ β}
147+
(osuc-mono-≤′ {β} {ω^^ β} (ω^^-infl β))
148+
(≤′-trans {osuc (ω^^ β)} {osuc (oz ⊕ ω^^ β)} {(oz ⊕ ω^^ β) ⊕ ω^^ β}
149+
(osuc-mono-≤′ {ω^^ β} {oz ⊕ ω^^ β} (X≤′oz⊕X {ω^^ β}))
150+
(⊕-mono-≤-right {oz ⊕ ω^^ β} {osuc oz} {ω^^ β} (ω^^-pos β)))
151+
ω^^-infl (olim f) =
152+
λ n ≤′-trans {f n} {ω^^ (f n)} {olim (λ k ω^^ (f k))}
153+
(ω^^-infl (f n)) (f-in-lim′ (λ k ω^^ (f k)) n)

proofs/agda/Smoke.agda

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,6 +1180,10 @@ open import Ordinal.Brouwer.OrdinalExp using
11801180
; ε₀
11811181
; ε₀-pos
11821182
; ε-tower-below-ε₀
1183+
; ω^^-ε₀-≤
1184+
; ε₀-≤-ω^^-ε₀
1185+
; ε₀-ε-number
1186+
; ω^^-infl
11831187
)
11841188

11851189
-- Recommended rank function for unbudgeted `wf-<ᵇʳᶠ_` per Echidna's

0 commit comments

Comments
 (0)