Skip to content

Commit ae51fc9

Browse files
Merge branch 'main' into claude/echo-types-docs-sync
2 parents ae58e7a + cf7ec23 commit ae51fc9

10 files changed

Lines changed: 279 additions & 25 deletions

File tree

docs/buchholz-plan.adoc

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -103,16 +103,26 @@ The order / well-foundedness track now has an explicit staged split:
103103
current core, with irreflexivity recovered as a corollary
104104
(`<ᵇ-irreflexive`) instead of a direct shared-binder elimination
105105
proof.
106-
* WF-2 (in progress): explicit inversion lemmas for the still-open
107-
mixed head cases (`Ω/+`, `ψ/+`) and the newly admitted comparison
108-
bridge `bpsi ν α <ᵇ bOmega μ` under `ν ≤Ω μ`.
106+
* WF-1.5 (`Ordinal.Buchholz.VeblenInterface`): measure-route interface
107+
pinning constructor-by-constructor decrease obligations and explicit
108+
deferred same-binder obligations (`dec-ψα`, `dec-+2`) for the Veblen
109+
follow-up.
110+
* WF-1.6 (`Ordinal.Buchholz.VeblenIdentityModel`): first concrete
111+
instantiation of the interface (identity-measure bootstrap), keeping
112+
`dec-ψα` and `dec-+2` as explicit assumptions.
113+
* WF-1.7 (`Ordinal.Buchholz.VeblenObligations`): discharge
114+
same-binder obligation shapes in projection-model form; landed lemmas:
115+
`dec-+2-plus-right`, `dec-ψα-psi-arg`.
116+
* WF-2 (in progress): mixed-head bridge layer now includes
117+
`bpsi ν α <ᵇ bOmega μ` (under `ν ≤Ω μ`) and left-summand bridges
118+
into additive terms (`<ᵇ-Ω+`, `<ᵇ-ψ+`) with inversions.
109119

110120
Remaining open comparison work after this update:
111121

112-
* Constructor-level comparison rules for `bOmega` vs `bplus` (both
113-
directions) in the intended normal-form discipline.
114-
* Constructor-level comparison rules for `bpsi` vs `bplus` (both
115-
directions).
122+
* Constructor-level comparison rules for non-top `bplus` vs `bOmega`
123+
(the `bplus → bOmega` direction beyond `<ᵇ-+ω`).
124+
* Constructor-level comparison rules for non-top `bplus` vs `bpsi`
125+
(the `bplus → bpsi` direction beyond `<ᵇ-+ψω`).
116126
* Shared-binder same-index/same-left sub-cases in a K-free style
117127
(do not return to the blocked direct reflexive-equation elimination
118128
route).

proofs/agda/All.agda

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ open import Ordinal.Buchholz.Psi
3939
open import Ordinal.Buchholz.Examples
4040
open import Ordinal.Buchholz.WellFormed
4141
open import Ordinal.Buchholz.WellFounded
42+
open import Ordinal.Buchholz.VeblenInterface
43+
open import Ordinal.Buchholz.VeblenIdentityModel
44+
open import Ordinal.Buchholz.VeblenObligations
4245
open import Ordinal.Buchholz.Smoke
4346

4447
open import Smoke

proofs/agda/Ordinal/Buchholz/Order.agda

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,24 @@
88
-- the term heads naturally determine. Totality is *not* proved here
99
-- and neither is well-foundedness; those are WF-1 and WF-2.
1010
--
11-
-- Scope of this module. The 7 constructors below cover the head
11+
-- Scope of this module. The constructors below cover the head
1212
-- pairs marked ✓ in the matrix, with the lex-on-left-summand case
1313
-- for bplus and the lex-on-Ω-index case for bpsi:
1414
--
1515
-- head of x \ head of y │ bzero │ bOmega │ bplus │ bpsi
1616
-- ──────────────────────┼───────┼────────┼───────┼──────
1717
-- bzero │ – │ ✓ │ ✓ │ ✓
18-
-- bOmega │ │ ✓ │ │ ✓ (when μ <Ω ν)
18+
-- bOmega │ │ ✓ │ │ ✓ (when μ <Ω ν)
1919
-- bplus │ │ │ ✓ │
20-
-- bpsi │ │ ✓ │ │ ✓ (when μ <Ω ν)
20+
-- bpsi │ │ ✓ │ │ ✓ (when μ <Ω ν)
2121
--
2222
-- Open cases (no constructor yet; must be discharged in follow-ups
2323
-- before `<ᵇ`-totality and well-foundedness can land):
2424
--
25-
-- * bOmega vs bplus (general case) — requires a comparison
26-
-- between atomic heads and additive normal forms. A narrow
27-
-- top-marker bridge is admitted by `<ᵇ-+ω`.
28-
-- * bpsi vs bplus (either direction) — same reason, mediated by
29-
-- the leading bpsi summand of a bplus in CNF.
25+
-- * bplus vs bOmega (general case) — currently only the top-marker
26+
-- bridge `<ᵇ-+ω` is admitted.
27+
-- * bplus vs bpsi (general case) — currently only the top-marker
28+
-- bridge `<ᵇ-+ψω` is admitted.
3029
-- * Two same-binder sub-cases whose natural shapes run into Agda
3130
-- 2.6.3's `--without-K` restriction on reflexive-equation
3231
-- elimination and are deferred pending a K-free reformulation:
@@ -76,6 +75,10 @@ data _<ᵇ_ : BT → BT → Set where
7675
<ᵇ-ψΩ : {μ ν α β} μ <Ω ν bpsi μ α <ᵇ bpsi ν β
7776
<ᵇ-ψΩ≤ : {ν μ α} ν ≤Ω μ bpsi ν α <ᵇ bOmega μ
7877

78+
-- Left-summand bridge into additive terms.
79+
<ᵇ-Ω+ : {μ x y} bOmega μ <ᵇ x bOmega μ <ᵇ bplus x y
80+
<ᵇ-ψ+ : {ν α x y} bpsi ν α <ᵇ x bpsi ν α <ᵇ bplus x y
81+
7982
-- bplus comparison by the left summand. The same-left sub-case
8083
-- (compare right summands when lefts agree) is deferred for the
8184
-- same `--without-K` reason as `<ᵇ-ψα` above: its natural shape
@@ -115,27 +118,43 @@ infix 4 _<ᵇ_
115118
-- Left leg: <ᵇ-0-Ω (x = bzero, y = bOmega _)
116119
<ᵇ-trans <ᵇ-0-Ω (<ᵇ-ΩΩ _) = <ᵇ-0-Ω
117120
<ᵇ-trans <ᵇ-0-Ω (<ᵇ-Ωψ _) = <ᵇ-0-ψ
121+
<ᵇ-trans <ᵇ-0-Ω (<ᵇ-Ω+ _) = <ᵇ-0-+
118122
-- Left leg: <ᵇ-0-+ (x = bzero, y = bplus _ _)
119123
<ᵇ-trans <ᵇ-0-+ (<ᵇ-+1 _) = <ᵇ-0-+
120124
<ᵇ-trans <ᵇ-0-+ (<ᵇ-+ω _) = <ᵇ-0-Ω
121125
<ᵇ-trans <ᵇ-0-+ (<ᵇ-+ψω _) = <ᵇ-0-ψ
122126
-- Left leg: <ᵇ-0-ψ (x = bzero, y = bpsi _ _)
123127
<ᵇ-trans <ᵇ-0-ψ (<ᵇ-ψΩ _) = <ᵇ-0-ψ
128+
<ᵇ-trans <ᵇ-0-ψ (<ᵇ-ψ+ _) = <ᵇ-0-+
124129
-- Left leg: <ᵇ-ΩΩ (x = bOmega _, y = bOmega _)
125130
<ᵇ-trans (<ᵇ-ΩΩ p) (<ᵇ-ΩΩ q) = <ᵇ-ΩΩ (<Ω-trans p q)
126131
<ᵇ-trans (<ᵇ-ΩΩ p) (<ᵇ-Ωψ q) = <ᵇ-Ωψ (<Ω-trans p q)
132+
<ᵇ-trans (<ᵇ-ΩΩ p) (<ᵇ-Ω+ q) = <ᵇ-Ω+ (<ᵇ-trans (<ᵇ-ΩΩ p) q)
127133
-- Left leg: <ᵇ-Ωψ (x = bOmega _, y = bpsi _ _)
128134
<ᵇ-trans (<ᵇ-Ωψ p) (<ᵇ-ψΩ q) = <ᵇ-Ωψ (<Ω-trans p q)
135+
<ᵇ-trans (<ᵇ-Ωψ p) (<ᵇ-ψ+ q) = <ᵇ-Ω+ (<ᵇ-trans (<ᵇ-Ωψ p) q)
129136
-- Left leg: <ᵇ-ψΩ (x = bpsi _ _, y = bpsi _ _)
130137
<ᵇ-trans (<ᵇ-ψΩ p) (<ᵇ-ψΩ q) = <ᵇ-ψΩ (<Ω-trans p q)
131138
<ᵇ-trans (<ᵇ-ψΩ p) (<ᵇ-ψΩ≤ q) = <ᵇ-ψΩ≤ (≤Ω-trans (<Ω→≤Ω p) q)
139+
<ᵇ-trans (<ᵇ-ψΩ p) (<ᵇ-ψ+ q) = <ᵇ-ψ+ (<ᵇ-trans (<ᵇ-ψΩ p) q)
132140
-- Left leg: <ᵇ-ψΩ≤ (x = bpsi _ _, y = bOmega _)
133141
<ᵇ-trans (<ᵇ-ψΩ≤ p) (<ᵇ-ΩΩ q) = <ᵇ-ψΩ≤ (≤Ω-trans p (<Ω→≤Ω q))
134142
<ᵇ-trans (<ᵇ-ψΩ≤ p) (<ᵇ-Ωψ q) = <ᵇ-ψΩ (≤Ω-<Ω-trans p q)
143+
<ᵇ-trans (<ᵇ-ψΩ≤ p) (<ᵇ-Ω+ q) = <ᵇ-ψ+ (<ᵇ-trans (<ᵇ-ψΩ≤ p) q)
135144
-- Left leg: <ᵇ-+1 (x = bplus _ _, y = bplus _ _)
136145
<ᵇ-trans (<ᵇ-+1 p) (<ᵇ-+1 q) = <ᵇ-+1 (<ᵇ-trans p q)
137146
<ᵇ-trans (<ᵇ-+1 p) (<ᵇ-+ω q) = <ᵇ-+ω (<ᵇ-trans p q)
138147
<ᵇ-trans (<ᵇ-+1 p) (<ᵇ-+ψω q) = <ᵇ-+ψω (<ᵇ-trans p q)
148+
-- Left leg: <ᵇ-Ω+ (x = bOmega _, y = bplus _ _)
149+
<ᵇ-trans (<ᵇ-Ω+ p) (<ᵇ-+1 q) = <ᵇ-Ω+ (<ᵇ-trans p q)
150+
<ᵇ-trans (<ᵇ-Ω+ p) (<ᵇ-+ω q) = <ᵇ-trans p q
151+
<ᵇ-trans (<ᵇ-Ω+ p) (<ᵇ-+ψω q) = <ᵇ-trans p q
152+
-- Left leg: <ᵇ-ψ+ (x = bpsi _ _, y = bplus _ _)
153+
<ᵇ-trans (<ᵇ-ψ+ p) (<ᵇ-+1 q) = <ᵇ-ψ+ (<ᵇ-trans p q)
154+
<ᵇ-trans (<ᵇ-ψ+ p) (<ᵇ-+ω q) = <ᵇ-trans p q
155+
<ᵇ-trans (<ᵇ-ψ+ p) (<ᵇ-+ψω q) = <ᵇ-trans p q
156+
<ᵇ-trans (<ᵇ-+ω p) (<ᵇ-Ω+ q) = <ᵇ-+1 (<ᵇ-trans p q)
157+
<ᵇ-trans (<ᵇ-+ψω p) (<ᵇ-ψ+ q) = <ᵇ-+1 (<ᵇ-trans p q)
139158
-- Left leg: <ᵇ-+ψω (x = bplus _ _, y = bpsi ω _)
140159
<ᵇ-trans (<ᵇ-+ψω p) (<ᵇ-ψΩ≤ ω≤ω) = <ᵇ-+ω (<ᵇ-trans p (<ᵇ-ψΩ≤ ω≤ω))
141160
-- Right leg: <ᵇ-ψΩ≤ (y = bpsi _ _, z = bOmega _)
@@ -146,12 +165,11 @@ infix 4 _<ᵇ_
146165
-- WF-2 open-case inversions (Ω vs +)
147166
----------------------------------------------------------------------------
148167

149-
-- The current 7-constructor core has no witness for either direction.
150-
-- These inversion lemmas pin that fact explicitly for downstream case
151-
-- splits while the comparison rule is still deferred.
168+
-- The Ω→+ bridge is admitted (`<ᵇ-Ω+`), while the non-top
169+
-- bplus→Ω case remains deferred.
152170

153-
<ᵇ-inv-Ω+ : {μ x y} bOmega μ <ᵇ bplus x y
154-
<ᵇ-inv-Ω+ ()
171+
<ᵇ-inv-Ω+ : {μ x y} bOmega μ <ᵇ bplus x y bOmega μ <ᵇ x
172+
<ᵇ-inv-Ω+ (<ᵇ-Ω+ Ω<x) = Ω<x
155173

156174
<ᵇ-inv-+Ωfin : {x y n} bplus x y <ᵇ bOmega (fin n)
157175
<ᵇ-inv-+Ωfin ()
@@ -164,11 +182,11 @@ infix 4 _<ᵇ_
164182
-- WF-2 open-case inversions (ψ vs +)
165183
----------------------------------------------------------------------------
166184

167-
-- Like Ω-vs-+, these comparisons are still deferred and currently
168-
-- have no constructors in either direction.
185+
-- The ψ→+ bridge is admitted (`<ᵇ-ψ+`), while the non-top
186+
-- bplus→ψ case remains deferred.
169187

170-
<ᵇ-inv-ψ+ : {μ α x y} bpsi μ α <ᵇ bplus x y
171-
<ᵇ-inv-ψ+ ()
188+
<ᵇ-inv-ψ+ : {μ α x y} bpsi μ α <ᵇ bplus x y bpsi μ α <ᵇ x
189+
<ᵇ-inv-ψ+ (<ᵇ-ψ+ ψ<x) = ψ<x
172190

173191
<ᵇ-inv-+ψfin : {x y n α} bplus x y <ᵇ bpsi (fin n) α
174192
<ᵇ-inv-+ψfin ()

proofs/agda/Ordinal/Buchholz/Smoke.agda

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ open import Ordinal.Buchholz.Order using
5555
; <ᵇ-Ωψ
5656
; <ᵇ-ψΩ
5757
; <ᵇ-ψΩ≤
58+
; <ᵇ-Ω+
59+
; <ᵇ-ψ+
5860
; <ᵇ-+ω
5961
; <ᵇ-+ψω
6062
; <ᵇ-+1
@@ -108,3 +110,19 @@ open import Ordinal.Buchholz.WellFormed using
108110
; psi-OmegaOmega
109111
; psi-OmegaOmega-wf
110112
)
113+
114+
open import Ordinal.Buchholz.VeblenInterface using
115+
( VeblenWFInterface
116+
)
117+
118+
open import Ordinal.Buchholz.VeblenIdentityModel using
119+
( identity-interface
120+
; core-wf-from-identity
121+
)
122+
123+
open import Ordinal.Buchholz.VeblenObligations using
124+
( plus-right
125+
; psi-arg
126+
; dec-+2-plus-right
127+
; dec-ψα-psi-arg
128+
)
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
{-# OPTIONS --safe --without-K #-}
2+
3+
-- Minimal concrete instantiation of the Veblen WF interface.
4+
--
5+
-- This uses the identity measure on BT as a bootstrap model to confirm
6+
-- interface coherence. The two same-binder obligations remain explicit
7+
-- parameters (`dec-ψα`, `dec-+2`), matching the currently deferred hard
8+
-- cases.
9+
10+
module Ordinal.Buchholz.VeblenIdentityModel where
11+
12+
open import Induction.WellFounded using (WellFounded)
13+
14+
open import Ordinal.Buchholz.Syntax using (BT; bzero; bOmega; bplus; bpsi)
15+
open import Ordinal.Buchholz.Order using
16+
( _<ᵇ_
17+
; <ᵇ-0-Ω
18+
; <ᵇ-0-+
19+
; <ᵇ-0-ψ
20+
; <ᵇ-ΩΩ
21+
; <ᵇ-Ωψ
22+
; <ᵇ-ψΩ
23+
; <ᵇ-ψΩ≤
24+
; <ᵇ-Ω+
25+
; <ᵇ-ψ+
26+
; <ᵇ-+ω
27+
; <ᵇ-+ψω
28+
; <ᵇ-+1
29+
)
30+
open import Ordinal.Buchholz.WellFounded using (wf-<ᵇ)
31+
open import Ordinal.Buchholz.VeblenInterface using (VeblenWFInterface)
32+
33+
identity-interface :
34+
(dec-ψα : {ν α β} α <ᵇ β bpsi ν α <ᵇ bpsi ν β)
35+
(dec-+2 : {x y₂ z₂} y₂ <ᵇ z₂ bplus x y₂ <ᵇ bplus x z₂)
36+
VeblenWFInterface BT _<ᵇ_
37+
identity-interface dec-ψα dec-+2 = record
38+
{ measure = λ x x
39+
; ≺-wf = wf-<ᵇ
40+
; dec-0-Ω = <ᵇ-0-Ω
41+
; dec-0-+ = <ᵇ-0-+
42+
; dec-0-ψ = <ᵇ-0-ψ
43+
; dec-ΩΩ = <ᵇ-ΩΩ
44+
; dec-Ωψ = <ᵇ-Ωψ
45+
; dec-ψΩ = <ᵇ-ψΩ
46+
; dec-ψΩ≤ = <ᵇ-ψΩ≤
47+
; dec-Ω+ = <ᵇ-Ω+
48+
; dec-ψ+ = <ᵇ-ψ+
49+
; dec-+ω = <ᵇ-+ω
50+
; dec-+ψω = <ᵇ-+ψω
51+
; dec-+1 = <ᵇ-+1
52+
; dec-ψα = dec-ψα
53+
; dec-+2 = dec-+2
54+
}
55+
56+
core-wf-from-identity :
57+
(dec-ψα : {ν α β} α <ᵇ β bpsi ν α <ᵇ bpsi ν β)
58+
(dec-+2 : {x y₂ z₂} y₂ <ᵇ z₂ bplus x y₂ <ᵇ bplus x z₂)
59+
WellFounded _<ᵇ_
60+
core-wf-from-identity dec-ψα dec-+2 =
61+
VeblenWFInterface.core-wf (identity-interface dec-ψα dec-+2)
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
{-# OPTIONS --safe --without-K #-}
2+
3+
-- Veblen-route interface for Buchholz WF follow-up work.
4+
--
5+
-- This module is intentionally small: it does not implement a concrete
6+
-- measure. Instead it states, in one place, the obligations required
7+
-- to prove `WellFounded _<ᵇ_` via a measure into a well-founded target.
8+
--
9+
-- The final two fields (`dec-ψα`, `dec-+2`) are the deferred same-binder
10+
-- obligations corresponding to the blocked shared-binder shapes.
11+
12+
module Ordinal.Buchholz.VeblenInterface where
13+
14+
open import Agda.Primitive using (Level; lsuc; _⊔_)
15+
open import Function.Base using (_on_)
16+
open import Relation.Binary.Core using (Rel; _⇒_)
17+
open import Induction.WellFounded as WF using (WellFounded; module Subrelation)
18+
open import Relation.Binary.Construct.On as On using (wellFounded)
19+
20+
open import Ordinal.OmegaMarkers using (OmegaIndex; _<Ω_; _≤Ω_; ω)
21+
open import Ordinal.Buchholz.Syntax using (BT; bzero; bOmega; bplus; bpsi)
22+
open import Ordinal.Buchholz.Order using
23+
( _<ᵇ_
24+
; <ᵇ-0-Ω
25+
; <ᵇ-0-+
26+
; <ᵇ-0-ψ
27+
; <ᵇ-ΩΩ
28+
; <ᵇ-Ωψ
29+
; <ᵇ-ψΩ
30+
; <ᵇ-ψΩ≤
31+
; <ᵇ-Ω+
32+
; <ᵇ-ψ+
33+
; <ᵇ-+ω
34+
; <ᵇ-+ψω
35+
; <ᵇ-+1
36+
)
37+
38+
record VeblenWFInterface {ℓm ℓr : Level}
39+
(M : Set ℓm)
40+
(_≺_ : Rel M ℓr)
41+
: Set (lsuc (ℓm ⊔ ℓr)) where
42+
field
43+
measure : BT M
44+
≺-wf : WellFounded _≺_
45+
46+
-- Constructor-by-constructor decrease obligations for the current core.
47+
dec-0-Ω : {μ} measure bzero ≺ measure (bOmega μ)
48+
dec-0-+ : {x y} measure bzero ≺ measure (bplus x y)
49+
dec-0-ψ : {ν α} measure bzero ≺ measure (bpsi ν α)
50+
51+
dec-ΩΩ : {μ ν} μ <Ω ν measure (bOmega μ) ≺ measure (bOmega ν)
52+
dec-Ωψ : {μ ν α} μ <Ω ν measure (bOmega μ) ≺ measure (bpsi ν α)
53+
dec-ψΩ : {μ ν α β} μ <Ω ν measure (bpsi μ α) ≺ measure (bpsi ν β)
54+
dec-ψΩ≤ : {ν μ α} ν ≤Ω μ measure (bpsi ν α) ≺ measure (bOmega μ)
55+
dec-Ω+ : {μ x y} measure (bOmega μ) ≺ measure x
56+
measure (bOmega μ) ≺ measure (bplus x y)
57+
dec-ψ+ : {ν α x y} measure (bpsi ν α) ≺ measure x
58+
measure (bpsi ν α) ≺ measure (bplus x y)
59+
60+
dec-+ω : {x y} x <ᵇ bOmega ω measure (bplus x y) ≺ measure (bOmega ω)
61+
dec-+ψω : {x y α} x <ᵇ bpsi ω α measure (bplus x y) ≺ measure (bpsi ω α)
62+
dec-+1 : {x₁ x₂ y₁ y₂} x₁ <ᵇ y₁ measure (bplus x₁ x₂) ≺ measure (bplus y₁ y₂)
63+
64+
-- Deferred same-binder obligations for the extended comparison layer.
65+
dec-ψα : {ν α β} α <ᵇ β measure (bpsi ν α) ≺ measure (bpsi ν β)
66+
dec-+2 : {x y₂ z₂} y₂ <ᵇ z₂ measure (bplus x y₂) ≺ measure (bplus x z₂)
67+
68+
core-monotone : _<ᵇ_ ⇒ (_≺_ on measure)
69+
core-monotone <ᵇ-0-Ω = dec-0-Ω
70+
core-monotone <ᵇ-0-+ = dec-0-+
71+
core-monotone <ᵇ-0-ψ = dec-0-ψ
72+
core-monotone (<ᵇ-ΩΩ μ<ν) = dec-ΩΩ μ<ν
73+
core-monotone (<ᵇ-Ωψ μ<ν) = dec-Ωψ μ<ν
74+
core-monotone (<ᵇ-ψΩ μ<ν) = dec-ψΩ μ<ν
75+
core-monotone (<ᵇ-ψΩ≤ ν≤μ) = dec-ψΩ≤ ν≤μ
76+
core-monotone (<ᵇ-Ω+ Ω<x) = dec-Ω+ (core-monotone Ω<x)
77+
core-monotone (<ᵇ-ψ+ ψ<x) = dec-ψ+ (core-monotone ψ<x)
78+
core-monotone (<ᵇ-+ω x<ω) = dec-+ω x<ω
79+
core-monotone (<ᵇ-+ψω x<ψω) = dec-+ψω x<ψω
80+
core-monotone (<ᵇ-+1 x₁<y₁) = dec-+1 x₁<y₁
81+
82+
-- Generic derivation route: well-founded target + constructor monotonicity
83+
-- gives well-foundedness of the current `_ <ᵇ _` core via subrelation.
84+
core-wf : WellFounded _<ᵇ_
85+
core-wf =
86+
let module SR = Subrelation core-monotone
87+
in SR.wellFounded (wellFounded measure ≺-wf)
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
{-# OPTIONS --safe --without-K #-}
2+
3+
-- Step 7a (Veblen-route obligations): isolate the deferred same-binder
4+
-- obligations and prove the easiest one first.
5+
--
6+
-- This module does not yet provide a full Veblen measure model. It
7+
-- records/proves obligation-shaped lemmas that can be reused when the
8+
-- final measure is assembled.
9+
10+
module Ordinal.Buchholz.VeblenObligations where
11+
12+
open import Ordinal.Buchholz.Syntax using (BT; bzero; bOmega; bplus; bpsi)
13+
open import Ordinal.Buchholz.Order using (_<ᵇ_)
14+
15+
-- Project the right summand of a plus-term; non-plus heads map to bzero.
16+
plus-right : BT BT
17+
plus-right bzero = bzero
18+
plus-right (bOmega _) = bzero
19+
plus-right (bpsi _ _) = bzero
20+
plus-right (bplus _ y₂) = y₂
21+
22+
-- First discharged same-binder obligation shape:
23+
-- if y₂ <ᵇ z₂ then right-projection decreases across bplus x _.
24+
dec-+2-plus-right :
25+
{x y₂ z₂}
26+
y₂ <ᵇ z₂
27+
plus-right (bplus x y₂) <ᵇ plus-right (bplus x z₂)
28+
dec-+2-plus-right y₂<z₂ = y₂<z₂
29+
30+
-- Project the ψ argument; non-ψ heads map to bzero.
31+
psi-arg : BT BT
32+
psi-arg bzero = bzero
33+
psi-arg (bOmega _) = bzero
34+
psi-arg (bplus _ _) = bzero
35+
psi-arg (bpsi _ α) = α
36+
37+
-- Sibling same-binder obligation shape:
38+
-- if α <ᵇ β then ψ-argument projection decreases across bpsi ν _.
39+
dec-ψα-psi-arg :
40+
{ν α β}
41+
α <ᵇ β
42+
psi-arg (bpsi ν α) <ᵇ psi-arg (bpsi ν β)
43+
dec-ψα-psi-arg α<β = α<β

0 commit comments

Comments
 (0)