Skip to content

Commit f3f4719

Browse files
hyperpolymathclaude
andcommitted
echo-types: Pillar B H1 — Echo as a pullback (universal property)
EchoPullback.agda promoted from doc scaffold to a real module. Pillar B is now COMPLETE (universal property + graded comonad). - EchoCone / echo-cone: Echo f y as the pullback of f along the point y : ⊤ → B (the ⊤-leg is forced, so a cone = A-leg + square). - SliceHom↔cone bridge: a SliceHom (λ _ → y) f IS a cone — the establishment-plan "in disguise" claim is now a checked fact (cone→slice / slice→cone, round-trips refl by record η). - IsMediator + echo-pullback-univ: terminal-cone universal property. Existence is the obvious pairing; uniqueness is funext-free and pointwise (∀ v → m' v ≡ m v, NOT m' ≡ m) via stdlib Σ-≡,≡→≡ fed the factor/coherent legs — no K, respects the funext guardrail. - proofs/agda/EchoPullback.agda: real, --safe --without-K, no postulates / no escape pragmas. - proofs/agda/Smoke.agda: pin EchoCone/echo-cone/bridge/IsMediator/ echo-pullback-univ. - docs/echo-types/establishment-plan.adoc: Pillar B(1) landed, Status table, sequencing note (Pillars A+B complete), revision history entry. - CLAUDE.md: rung state + workstream-3 refreshed; next advance now Pillar C (EchoSeparating, separating model). All.agda + Smoke.agda exit 0 under --safe --without-K. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent d1c5938 commit f3f4719

4 files changed

Lines changed: 210 additions & 64 deletions

File tree

CLAUDE.md

Lines changed: 46 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -94,19 +94,23 @@ Two active workstreams:
9494
scaffolds in `All.agda` (`EchoPullback`, `EchoGradedComonad`,
9595
`EchoSeparating`, `EchoRelModel`) carrying intended signatures.
9696

97-
Pillar B `EchoGradedComonad` THIN SLICE LANDED (2026-05-17):
98-
`gextract`, `gduplicate`, `gcomonad-counit-{l,r}`,
99-
`gcomonad-coassoc` — real module, pinned in `Smoke.agda`. The
100-
pivotal de-risk question is answered: graded coassociativity
101-
needs NO path algebra beyond `≤g-prop` (common-upper-bound idiom
102-
eliminates the `⊔g-assoc` transport; pure `degrade-compose` +
103-
`≤g-prop`). Thesis strengthened, unchanged. See
104-
establishment-plan.adoc §"H2 verdict".
97+
**Pillar B COMPLETE (2026-05-17).** Both artefacts real:
98+
* `EchoGradedComonad``gextract`, `gduplicate`,
99+
`gcomonad-counit-{l,r}`, `gcomonad-coassoc`. De-risk verdict:
100+
graded coassociativity needs NO path algebra beyond `≤g-prop`
101+
(common-upper-bound idiom kills the `⊔g-assoc` transport).
102+
* `EchoPullback``EchoCone`/`echo-cone`, `SliceHom`↔cone bridge
103+
(`refl` round-trips), `IsMediator`, `echo-pullback-univ`
104+
(existence + funext-free pointwise uniqueness via stdlib
105+
`Σ-≡,≡→≡`; no K). Pillars A and B both complete; thesis
106+
strengthened, unchanged. See establishment-plan.adoc §"H2
107+
verdict" + revision history.
105108

106109
Open pieces on this track:
107-
* Pillar B `EchoPullback.echo-pullback-univ` — start by relating
108-
`EchoCategorical.SliceHom` to a pullback cone.
109-
* Pillars C/D and Pillar E (TYPES/CPP-ITP/Zenodo) not started.
110+
* Pillar C — `EchoSeparating.agda` (separating model: generic
111+
Σ-functoriality holds while `degrade-compose` fails).
112+
* Pillar D — `EchoRelModel.agda` + `conservativity.adoc`.
113+
* Pillar E (TYPES/CPP-ITP/Zenodo) not started.
110114

111115
Cross-repo bridge status lives in `docs/echo-types/cross-repo-bridge-status.md`.
112116

@@ -187,15 +191,16 @@ new judgment — it is definitionally `fib`).
187191
`echo↔fib : Echo f y ↔ fiber f y` via `mk↔ₛ′`, `refl` round-trips.
188192
Pinned in `Smoke.agda` (`fiber; echo→fib; fib→echo; echo↔fib`),
189193
wired into `All.agda`.
190-
* **Pillar B (real, verified — H2 thin slice, 2026-05-17):**
191-
`EchoGradedComonad.agda``gextract`, `gduplicate`,
192-
`gcomonad-counit-{l,r}`, `gcomonad-coassoc` over the loss-grade
193-
lattice; pinned in `Smoke.agda`. Coassoc needs no path algebra
194-
beyond `≤g-prop` (common-upper-bound idiom). No postulates.
195-
* **Pillars B/C/D (scaffolds):** `EchoPullback`, `EchoSeparating`,
196-
`EchoRelModel` — declaration-free doc modules (no postulates, no
197-
holes), tracked in `All.agda`, carrying intended signatures as
198-
commented specs.
194+
* **Pillar B (real, verified — COMPLETE, 2026-05-17):**
195+
`EchoGradedComonad.agda` (`gextract`, `gduplicate`,
196+
`gcomonad-counit-{l,r}`, `gcomonad-coassoc` — coassoc needs no
197+
path algebra beyond `≤g-prop`) and `EchoPullback.agda`
198+
(`EchoCone`/`echo-cone`, `SliceHom`↔cone bridge, `IsMediator`,
199+
`echo-pullback-univ` — funext-free pointwise uniqueness, no K).
200+
Both pinned in `Smoke.agda`. No postulates.
201+
* **Pillars C/D (scaffolds):** `EchoSeparating`, `EchoRelModel`
202+
declaration-free doc modules (no postulates, no holes), tracked
203+
in `All.agda`, carrying intended signatures as commented specs.
199204

200205
`agda proofs/agda/All.agda` and `agda proofs/agda/Smoke.agda` both
201206
exit 0 under `--safe --without-K`. No postulates introduced.
@@ -211,19 +216,29 @@ used by `EchoGraded.degrade-via-join`) makes the `subst GEcho
211216
`≤g-prop`. Thesis unchanged and strengthened (establishment-plan
212217
§"H2 verdict"). `All.agda` + `Smoke.agda` exit 0, no postulates.
213218

219+
**H1 LANDED (2026-05-17). Pillar B COMPLETE.** `EchoPullback.agda`
220+
real: `Echo f y` is the pullback of `f` along `y : ⊤ → B`;
221+
`SliceHom (λ _ → y) f` IS a cone (bridge round-trips `refl`);
222+
`echo-pullback-univ` gives existence + funext-free pointwise
223+
uniqueness (stdlib `Σ-≡,≡→≡`, no K). `All.agda` + `Smoke.agda`
224+
exit 0, no postulates.
225+
214226
Smallest useful next advance:
215227

216-
1. **Backfill H1 — `EchoPullback.echo-pullback-univ`.** Now safe
217-
consolidation: present `Echo f y` as the pullback of `f` along
218-
`y : ⊤ → B`; start by relating `EchoCategorical.SliceHom` to the
219-
pullback cone, then the terminal-cone universal property.
220-
2. Then Pillar C — `EchoSeparating.agda` (separating model: generic
221-
Σ-functoriality holds while `degrade-compose` fails).
222-
3. Then Pillar D — `EchoRelModel.agda` + `conservativity.adoc`.
223-
224-
Rationale: the pivotal bet (H2) is settled positively, so the
225-
remaining Pillar-B/C/D work is now narrative consolidation in the
226-
clean order, no further de-risking needed.
228+
1. **Pillar C — `EchoSeparating.agda`.** A *separating model*: a
229+
structure satisfying generic Σ-functoriality in which the
230+
loss-grade composition law (`degrade-compose` / `degrade-via-join`)
231+
fails — a concrete finite witness. Answers "isn't this all
232+
Σ-lemmas?" with a model, not an argument.
233+
2. Then Pillar D — `EchoRelModel.agda` (transport the Pillar-B
234+
graded-comonad laws into the relational/fibration model) +
235+
`docs/echo-types/conservativity.adoc`.
236+
3. Then Pillar E — TYPES abstract / CPP-ITP / Zenodo.
237+
238+
Rationale: Pillars A and B are complete and the pivotal thesis bet
239+
settled positively. The credibility core now needs the separating
240+
model (C) — the gold-standard "this structure is real, not
241+
bookkeeping" artefact — before model-independence (D).
227242

228243
---
229244

docs/echo-types/establishment-plan.adoc

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,13 @@ the composition iso, cancel-iso, pentagon — but no _characterisation_.
8484

8585
* Artefact 1: `EchoPullback.agda` — `Echo f y` as the pullback of `f`
8686
along `y : ⊤ → B`, with the terminal-cone universal property
87-
`echo-pullback-univ`. The categorical-semantics anchor.
87+
`echo-pullback-univ`. The categorical-semantics anchor. *Landed
88+
2026-05-17:* `EchoCone`/`echo-cone`, the `SliceHom`↔cone bridge
89+
(`cone→slice`/`slice→cone` with `refl` round-trips — the "in
90+
disguise" claim is now a checked fact), `IsMediator`, and
91+
`echo-pullback-univ` (existence + funext-free pointwise
92+
uniqueness, no K — uniqueness uses stdlib `Σ-≡,≡→≡` on the
93+
`factor`/`coherent` legs).
8894
* Artefact 2: `EchoGradedComonad.agda` (headline new family) — reuse
8995
`EchoGraded._≤g_`, `_⊔g_`, `≤g-prop`; define the graded counit /
9096
comultiplication and prove the three graded-comonad laws over the
@@ -142,13 +148,16 @@ Authority is conferred socially, not internally. In cost/payoff order:
142148

143149
== Sequencing and guardrails
144150

145-
*Order (revised 2026-05-17 — de-risk first):* A → **B(graded comonad,
146-
thin slice) → B(pullback)** → B(graded comonad, remainder)
151+
*Order (revised 2026-05-17 — de-risk first):* A ✓ →
152+
**B(graded comonad, thin slice) → B(pullback) ✓**
147153
C(separating model) → D(second model + conservativity) → E(write-up).
148-
The graded-comonad result is the pivotal bet, so a minimal slice is
149-
attempted _before_ the safe pullback work to test the thesis early
150-
(fail fast). A–C are the credibility core and need no external
151-
unblocker. The ordinal / Buchholz
154+
The graded-comonad result was the pivotal bet, so a minimal slice
155+
was attempted _before_ the safe pullback work to test the thesis
156+
early (fail fast); it settled positively and over-delivered all
157+
three laws, after which the pullback landed as planned. *Pillars A
158+
and B are now complete.* Next: C(separating model). A–C are the
159+
credibility core and need no external unblocker. The ordinal /
160+
Buchholz
152161
track is impressive _consumer evidence_, not foundation — keep it
153162
firewalled from the identity claim exactly as `roadmap.md` already does.
154163

@@ -203,20 +212,21 @@ stands and is *strengthened*; no honest rewrite is required.
203212
| Pillar | Artefact | State
204213

205214
| A | `EchoFiberBridge.agda` (`echo↔fib`, pinned in `Smoke.agda`) | Landed
206-
| B | `EchoPullback.agda` | Scaffolded (doc-only module, in `All.agda`)
215+
| B | `EchoPullback.agda` (`echo-pullback-univ` + SliceHom↔cone) | Landed
207216
| B | `EchoGradedComonad.agda` (`gextract`/`gduplicate` + 3 laws) | Thin slice landed (verdict <<h2-verdict>>)
208217
| C | `EchoSeparating.agda` | Scaffolded (doc-only module, in `All.agda`)
209218
| D | `EchoRelModel.agda` | Scaffolded (doc-only module, in `All.agda`)
210219
| D | `docs/echo-types/conservativity.adoc` | Not started
211220
| E | TYPES abstract / CPP-ITP paper / Zenodo / library packaging | Not started
212221
|===
213222

214-
`EchoGradedComonad.agda` is now a real module (thin slice — see
215-
<<h2-verdict>>). The remaining Pillar B–D entries (`EchoPullback`,
216-
`EchoSeparating`, `EchoRelModel`) are still documentation-only Agda
217-
modules (no declarations, hence no postulates or holes — they
218-
typecheck under `--safe --without-K` and are tracked in `All.agda`
219-
per the rung-consolidation policy). They carry the intended theorem
223+
Pillar B is fully landed: both `EchoPullback.agda` (universal
224+
property) and `EchoGradedComonad.agda` (graded comonad, <<h2-verdict>>)
225+
are real modules. The remaining Pillar C–D entries (`EchoSeparating`,
226+
`EchoRelModel`) are still documentation-only Agda modules (no
227+
declarations, hence no postulates or holes — they typecheck under
228+
`--safe --without-K` and are tracked in `All.agda` per the
229+
rung-consolidation policy). They carry the intended theorem
220230
signatures as commented specifications so a fresh session can start
221231
filling them without re-deriving the design.
222232

@@ -238,3 +248,10 @@ reason.
238248
`≤g-prop`?" is answered *no* (<<h2-verdict>>); the thesis is
239249
unchanged and strengthened — no honest rewrite required. Next per
240250
the revised sequencing: backfill H1 (`EchoPullback`).
251+
* *2026-05-17 — trigger: Pillar B artefact state change.* H1 landed:
252+
`EchoPullback.agda` is real — `EchoCone`/`echo-cone`, the
253+
`SliceHom`↔cone bridge (`refl` round-trips), `IsMediator`, and
254+
`echo-pullback-univ` (existence + funext-free pointwise uniqueness,
255+
no K). *Pillar B is now complete* (universal property + graded
256+
comonad). Next per sequencing: Pillar C — `EchoSeparating.agda`
257+
(separating model).

proofs/agda/EchoPullback.agda

Lines changed: 120 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,133 @@
22

33
-- Pillar B (part 1) of docs/echo-types/establishment-plan.adoc.
44
--
5-
-- SCAFFOLD ONLY. Documentation module: no declarations, hence no
6-
-- postulates and no holes — it typechecks under `--safe --without-K`
7-
-- and is tracked in `All.agda` per the rung-consolidation policy.
8-
-- The intended theorems are recorded here as commented specifications
9-
-- so a fresh session can start without re-deriving the design.
5+
-- REAL MODULE (H1 landed 2026-05-17).
106
--
117
-- Goal: present `Echo f y` as the pullback of `f : A → B` along the
128
-- point `y : ⊤ → B`, and prove its terminal-cone universal property.
139
-- This is the categorical-semantics anchor: it lets a category
14-
-- theorist accept echo as a *real object* rather than a notation.
10+
-- theorist accept echo as a *real object* (the limit of a cospan)
11+
-- rather than a notation.
1512
--
16-
-- Intended signatures (to be filled, in dependency order):
13+
-- The cospan / pullback square:
1714
--
18-
-- -- The pullback square: cone over (f , const y).
19-
-- record EchoCone {A B : Set} (f : A → B) (y : B) (V : Set) ...
15+
-- Echo f y ----proj₁----> A
16+
-- | |
17+
-- (! to ⊤) f
18+
-- | |
19+
-- v v
20+
-- ⊤ -------const y---> B
2021
--
21-
-- -- Echo is a cone.
22-
-- echo-cone : (f : A → B) (y : B) → EchoCone f y (Echo f y)
22+
-- The ⊤-leg `V → ⊤` is forced (it is constantly `tt`), so a cone over
23+
-- the cospan with apex `V` is *exactly* a map `p₁ : V → A` together
24+
-- with the square condition `∀ v → f (p₁ v) ≡ y`. That is precisely an
25+
-- `EchoCategorical.SliceHom (λ (_ : V) → y) f` — a SliceHom IS a cone,
26+
-- not merely "in disguise"; the bridge lemmas below make that a
27+
-- checked fact (round-trips are `refl` by record η).
2328
--
24-
-- -- Universal property: any cone factors uniquely through Echo.
25-
-- echo-pullback-univ :
26-
-- (f : A → B) (y : B) (V : Set) (c : EchoCone f y V) →
27-
-- ∃! (λ (m : V → Echo f y) → <cone c factors through echo-cone via m>)
28-
--
29-
-- Reuse: `Echo.echo-intro`, `Echo.map-over`, and the existing
30-
-- `EchoCategorical.SliceHom` packaging (a SliceHom is already a cone
31-
-- morphism in disguise — start by relating the two).
29+
-- Universal property (terminal cone), stated `--safe --without-K`:
30+
-- for every cone `c` there is a mediator `m` factoring both legs, and
31+
-- it is unique *pointwise* among cone morphisms. Uniqueness is stated
32+
-- pointwise (`∀ v → m' v ≡ m v`), NOT as `m' ≡ m`, so the statement is
33+
-- funext-free — respecting the establishment-plan funext guardrail.
34+
-- The second Σ-component is a witness, so the cone-morphism notion
35+
-- carries the transport-coherence leg `coherent`; this is what makes
36+
-- uniqueness provable without K (no UIP on `f a ≡ y` is assumed).
3237

3338
module EchoPullback where
39+
40+
open import Echo using (Echo)
41+
open import EchoCategorical using (SliceHom; arrow; commute)
42+
open import Data.Product.Base using (Σ; _,_; _×_; proj₁; proj₂)
43+
open import Data.Product.Properties using (Σ-≡,≡→≡)
44+
open import Relation.Binary.PropositionalEquality
45+
using (_≡_; refl; subst)
46+
47+
----------------------------------------------------------------------
48+
-- Cones over the cospan A --f--> B <--const y-- ⊤.
49+
--
50+
-- The ⊤-leg is forced, so the cone data is just the A-leg plus the
51+
-- square. Kept at `Set` (level 0): the categorical anchor is cleaner
52+
-- for a referee without universe noise, and `SliceHom` instantiates
53+
-- fine at Set₀.
54+
55+
record EchoCone {A B : Set} (f : A B) (y : B) (V : Set) : Set where
56+
field
57+
apex-map : V A
58+
square : v f (apex-map v) ≡ y
59+
60+
open EchoCone public
61+
62+
-- Echo itself is the canonical cone: proj₁ is the A-leg, proj₂ is the
63+
-- square. (This is the cone that the universal property is terminal
64+
-- among.)
65+
echo-cone : {A B : Set} (f : A B) (y : B) EchoCone f y (Echo f y)
66+
echo-cone f y = record { apex-map = proj₁ ; square = proj₂ }
67+
68+
----------------------------------------------------------------------
69+
-- A SliceHom IS a cone (the establishment-plan "in disguise" claim,
70+
-- now a checked fact). A cone with apex V is exactly a slice morphism
71+
-- from the constant map `λ (_ : V) → y` to `f`.
72+
73+
cone→slice :
74+
{A B : Set} {f : A B} {y : B} {V : Set}
75+
EchoCone f y V SliceHom (λ (_ : V) y) f
76+
cone→slice c = record { arrow = apex-map c ; commute = square c }
77+
78+
slice→cone :
79+
{A B : Set} {f : A B} {y : B} {V : Set}
80+
SliceHom (λ (_ : V) y) f EchoCone f y V
81+
slice→cone h = record { apex-map = arrow h ; square = commute h }
82+
83+
cone→slice→cone :
84+
{A B : Set} {f : A B} {y : B} {V : Set} (c : EchoCone f y V)
85+
slice→cone (cone→slice c) ≡ c
86+
cone→slice→cone c = refl
87+
88+
slice→cone→slice :
89+
{A B : Set} {f : A B} {y : B} {V : Set}
90+
(h : SliceHom (λ (_ : V) y) f)
91+
cone→slice (slice→cone h) ≡ h
92+
slice→cone→slice h = refl
93+
94+
----------------------------------------------------------------------
95+
-- Cone morphisms into the canonical Echo cone.
96+
--
97+
-- A morphism from cone `c` (apex V) to `echo-cone` is a map
98+
-- `m : V → Echo f y` that factors the A-leg (`factor`) and whose
99+
-- witness, transported along that factoring, recovers the cone's own
100+
-- square (`coherent`). The `coherent` leg is exactly the Σ-second
101+
-- coherence that lets uniqueness go through without K.
102+
103+
record IsMediator
104+
{A B : Set} (f : A B) (y : B) {V : Set}
105+
(c : EchoCone f y V) (m : V Echo f y) : Set where
106+
field
107+
factor : v proj₁ (m v) ≡ apex-map c v
108+
coherent : v
109+
subst (λ a f a ≡ y) (factor v) (proj₂ (m v)) ≡ square c v
110+
111+
open IsMediator public
112+
113+
----------------------------------------------------------------------
114+
-- The universal property: `echo-cone` is the terminal cone.
115+
--
116+
-- For every cone `c` there is a mediator `m` (factoring both legs),
117+
-- and any cone morphism `m'` agrees with `m` pointwise. Existence is
118+
-- the obvious pairing; uniqueness is one application of stdlib's
119+
-- `Σ-≡,≡→≡`, fed exactly the `factor`/`coherent` legs — no K, no
120+
-- funext.
121+
122+
echo-pullback-univ :
123+
{A B : Set} (f : A B) (y : B) {V : Set} (c : EchoCone f y V)
124+
Σ (V Echo f y) (λ m
125+
IsMediator f y c m
126+
× ( (m' : V Echo f y) IsMediator f y c m'
127+
v m' v ≡ m v))
128+
echo-pullback-univ f y c =
129+
m
130+
, record { factor = λ _ refl ; coherent = λ _ refl }
131+
, λ m' med v Σ-≡,≡→≡ (factor med v , coherent med v)
132+
where
133+
m : _ Echo f y
134+
m v = apex-map c v , square c v

proofs/agda/Smoke.agda

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,19 @@ open import EchoGradedComonad using
162162
; gcomonad-coassoc
163163
)
164164

165+
-- Pillar B (part 1): Echo as the pullback of f along y : ⊤ → B,
166+
-- with the terminal-cone universal property. SliceHom IS a cone.
167+
open import EchoPullback using
168+
( EchoCone
169+
; echo-cone
170+
; cone→slice
171+
; slice→cone
172+
; cone→slice→cone
173+
; slice→cone→slice
174+
; IsMediator
175+
; echo-pullback-univ
176+
)
177+
165178
open import EchoTropical using
166179
( Candidate
167180
; score

0 commit comments

Comments
 (0)