Skip to content

Commit 45f3775

Browse files
Merge branch 'main' into claude/hopeful-babbage-pn0l4o
2 parents 83d98b2 + c5bb2a7 commit 45f3775

3 files changed

Lines changed: 48 additions & 8 deletions

File tree

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: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,12 @@
3535
-- `f-in-lim′` (+ `ω^^-pos` for the base index).
3636
--
3737
-- The *strict* inflationary `α <′ ω^^ α` is deliberately NOT pursued: it
38-
-- is FALSE exactly at the ε-numbers (ε₀ = ω^^ ε₀ is the counterexample);
39-
-- the non-strict `α ≤′ ω^^ α` holds but is not needed for the fixed point.
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.)
4044

4145
module Ordinal.Brouwer.OrdinalExp where
4246

@@ -46,8 +50,9 @@ open import Data.Unit.Base using (tt)
4650
open import Relation.Binary.PropositionalEquality using (_≡_; refl)
4751

4852
open import Ordinal.Brouwer using (Ord; oz; osuc; olim)
49-
open import Ordinal.Brouwer.Phase13 using (_≤′_; _<′_; f-in-lim′)
50-
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)
5156

5257
----------------------------------------------------------------------
5358
-- Ordinal exponentiation base ω
@@ -118,3 +123,31 @@ open import Ordinal.Brouwer.OmegaPow using (_·ℕ_; oz<′oz⊕)
118123
-- ε-number), packaged as bi-`≤′`.
119124
ε₀-ε-number : (ω^^ ε₀ ≤′ ε₀) × (ε₀ ≤′ ω^^ ε₀)
120125
ε₀-ε-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: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1183,6 +1183,7 @@ open import Ordinal.Brouwer.OrdinalExp using
11831183
; ω^^-ε₀-≤
11841184
; ε₀-≤-ω^^-ε₀
11851185
; ε₀-ε-number
1186+
; ω^^-infl
11861187
)
11871188

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

0 commit comments

Comments
 (0)