Skip to content

Commit 70b03e8

Browse files
docs+proofs: EchoEphapaxBridge.agda NARROW stub (closes #126) (#162)
## Summary **Closes #126** with the NARROW recommendation from the bg-agent proposal at `/tmp/ephapax-bridge-proposal.md` §4: - **Companion** to #161 (which closes #125 + #127 + #132). - **Sets up** #128 umbrella close: once this and #161 merge, every child issue (#125 / #126 / #127 / #132) is discharged. Ships a thin import-time documentation module that catalogues the ephapax↔echo-types L3 correspondence without re-mechanising it. Two definitional `refl`-renames pin the load-bearing Agda symbols under `ephapax-L3-` prefixed names so `MAP.adoc`'s "Directions" navigation has an ephapax row and a silent upstream rename trips `Smoke.agda`. The cross-repo content correspondence is already discharged by `coqc` on the ephapax side (`formal/Echo.v`, 584 lines, 24 `Qed`, zero `Admitted` / zero `Axiom` — explicit Coq port of `EchoLinear.agda` + `EchoResidue.agda` under a K-free / zero-axiom discipline equivalent to `--safe --without-K`). **No Lane 4 CI dependency.** ## Files | File | Change | |---|---| | `proofs/agda/EchoEphapaxBridge.agda` | **NEW** ~45 lines. Module docstring catalogues 5 Coq headlines (`mode_le_prop`, `weaken_collapses_distinction`, `affine_canonical`, `degrade_mode_comp`, `no_section_collapse_to_residue`); two definitional `refl`-renames `ephapax-L3-weaken = weaken` + `ephapax-L3-no-section-collapse = no-section-collapse-to-residue`. | | `proofs/agda/All.agda` | One line: wires `EchoEphapaxBridge` between `EchoJanusBridge` and `Dyadic`. | | `proofs/agda/Smoke.agda` | Pins `ephapax-L3-weaken` + `ephapax-L3-no-section-collapse` so silent upstream renames in `EchoLinear` / `EchoResidue` trip CI fast. Comment block flags ephapax cross-repo nature. | | `docs/echo-types/MAP.adoc` | New `=== Ephapax L3 — linear/affine modality bridge \`[REAL]\`` subsection in §Directions between JanusKey and Tropical/Dyadic. Scope explicit: **L3 only** — ephapax-affine and L1/L2/L4 are NOT mechanised to the same standard. | ## Why NARROW (not YES or NO) Per the bg-agent verdict: - **YES (full content bridge)** would require ephapax to add an Agda dependency it doesn't currently have (ephapax's stack is Coq + Idris2 + Rust). Definitional redundancy: by construction the bridge collapses to `Echo f y := Σ A (f x ≡ y), QED`. - **NO (decline)** is right about content but wrong about navigability. `EchoCNOBridge.agda` + `EchoJanusBridge.agda` both exist for navigability reasons independent of content depth. Declining would mean `MAP.adoc` has no ephapax row, despite ephapax being more tightly mechanised than several already-bridged targets. - **NARROW** captures the trade-off: ship a thin pointer without re-mechanising. Maintenance cost is near-zero (renames are `refl`; upstream renames break `Smoke.agda` and surface immediately). The stub does not foreclose a future full content bridge. ## Local verification - `agda -i proofs/agda proofs/agda/EchoEphapaxBridge.agda` — clean. - `agda -i proofs/agda proofs/agda/Smoke.agda` — clean, exit 0. - `agda -i proofs/agda proofs/agda/All.agda` — clean, exit 0. - `bash tools/check-guardrails.sh proofs/agda` — 160 modules pass (`--safe --without-K`, no escape pragmas, no postulates, with the two existing exploratory exemptions). ## Honest-scope discipline The module docstring + MAP.adoc subsection both scope the corroboration claim **to L3 only** per the MEMORY hook `feedback_ephapax_affine_proofs_not_done.md` and the R-2026-05-18 retraction surface. Ephapax-affine has Rust checkers only; L1 has 5 `Axiom` + 11 `Admitted`; L4 has no mechanised theorems yet. L3 is the single layer where the upstream-Agda correspondence is both literal (file mirrors files) and fully discharged. ## Test plan - [x] New file typechecks under `--safe --without-K` locally. - [x] `Smoke.agda` typechecks with new pins, exit 0. - [x] `All.agda` typechecks with new module wired in, exit 0. - [x] Foundation guardrail passes (160 modules, no new exemptions). - [ ] CI: Agda + cold-check + characteristic + examples lanes all green on this branch. - [ ] Auto-merge on green. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 3a38c6c commit 70b03e8

5 files changed

Lines changed: 85 additions & 0 deletions

File tree

docs/echo-types/MAP.adoc

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,33 @@ loss".
289289
* Proofs: `proofs/agda/EchoJanusBridge.agda`.
290290
* Docs: `docs/EchoJanusBridge.md`, `docs/EchoBridges.md`.
291291

292+
=== Ephapax L3 — linear/affine modality bridge `[REAL]`
293+
Cross-repo navigability marker for the `hyperpolymath/ephapax`
294+
programming-language project, whose L3 layer (`formal/Echo.v`, 584
295+
lines, 24 `Qed`, zero `Admitted` / zero `Axiom`) is an explicit Coq
296+
port of `EchoLinear.agda` + `EchoResidue.agda` under a K-free /
297+
zero-axiom discipline equivalent to `--safe --without-K`. The Coq
298+
headlines (`mode_le_prop`, `weaken_collapses_distinction`,
299+
`affine_canonical`, `degrade_mode_comp`,
300+
`no_section_collapse_to_residue`) each carry the same theorem as the
301+
Agda counterpart.
302+
303+
Scope is intentionally NARROW: this is import-time documentation +
304+
two definitional `refl`-renames of the load-bearing Agda symbols
305+
under `ephapax-L3-`-prefixed names, so a silent upstream rename
306+
trips `Smoke.agda`. The cross-repo content correspondence is already
307+
discharged by `coqc` on the ephapax side; no Lane 4 CI dependency.
308+
309+
* Proofs: `proofs/agda/EchoEphapaxBridge.agda` (`ephapax-L3-weaken` ↔
310+
`EchoLinear.weaken` ↔ ephapax `formal/Echo.v` `weaken`;
311+
`ephapax-L3-no-section-collapse` ↔
312+
`EchoResidue.no-section-collapse-to-residue` ↔ ephapax
313+
`formal/Echo.v:502-517` `no_section_collapse_to_residue`).
314+
* External corroboration scope: L3 only — ephapax-affine and L1/L2/L4
315+
are NOT mechanised to the same standard (see ephapax
316+
`formal/PRESERVATION-DESIGN.md` + `docs/echo-types/paper.adoc`
317+
§"Threats to validity").
318+
292319
=== Tropical / Dyadic `[REAL*]`
293320
Bridge domains enumerated in `docs/EchoBridges.md` (JanusKey / CNO /
294321
Tropical / Dyadic). Dyadic is mechanised; Tropical is named/early.

docs/echo-types/echo-kernel-note.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ kernel** — the boundary is real and lives outside this core.
7979
`EchoEpistemicResidue`, `EchoExamples`, `EchoGraded`,
8080
`EchoLinear`, `EchoPullback`, `EchoRelModel`, `EchoScope`,
8181
`EchoStabilityTests`, `EchoThermodynamics`, `EchoCNOBridge`,
82+
`EchoEphapaxBridge`,
8283
`EchoThermodynamicsFinite`, `EchoIntegration`, `EchoAccess`,
8384
`EchoCost`, `EchoCostInstance`, `EchoSearch`, `EchoSearchInstance`,
8485
`EchoExampleAbsInt`, `EchoExampleParser`, `EchoExampleProvenance`,

proofs/agda/All.agda

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ open import EchoCategorical
5151
open import EchoScope
5252
open import EchoOrdinal
5353
open import EchoJanusBridge
54+
open import EchoEphapaxBridge
5455
open import Dyadic
5556
open import DyadicEchoBridge
5657
open import EchoThermodynamics

proofs/agda/EchoEphapaxBridge.agda

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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+
-- Echo↔Ephapax L3 Bridge (NARROW — navigability + cross-repo cataloguing).
6+
--
7+
-- The ephapax programming-language project (hyperpolymath/ephapax)
8+
-- carries a four-layer typing redesign whose L3 layer (`formal/Echo.v`,
9+
-- 584 lines, 24 `Qed`, zero `Admitted` / zero `Axiom`) is an explicit
10+
-- Coq port of `EchoLinear.agda` + `EchoResidue.agda` under a K-free /
11+
-- zero-axiom discipline equivalent to `--safe --without-K`. The Coq
12+
-- headlines `mode_le_prop`, `weaken_collapses_distinction`,
13+
-- `affine_canonical`, `degrade_mode_comp`, and
14+
-- `no_section_collapse_to_residue` each carry the same theorem as the
15+
-- Agda counterpart pinned here.
16+
--
17+
-- Scope (NARROW, per `/tmp/ephapax-bridge-proposal.md` §4): this
18+
-- module is import-time documentation. The cross-repo content
19+
-- correspondence is already discharged by `coqc` on the ephapax side
20+
-- (no Lane 4 CI dependency). The two definitional `refl`-renames
21+
-- below pin the load-bearing Agda symbols under `ephapax-`-prefixed
22+
-- names so `MAP.adoc`'s "Directions" navigation has an ephapax row,
23+
-- and so a silent upstream rename trips `Smoke.agda`. A future
24+
-- content bridge would require an Agda mirror of ephapax's
25+
-- `formal/Echo.v` and is not foreclosed by this stub.
26+
--
27+
-- References:
28+
-- * `docs/bridges/cross-repo-bridge-status.md` (when extended).
29+
-- * `docs/echo-types/MAP.adoc` §"Directions" / "Ephapax L3".
30+
-- * ephapax `formal/Echo.v:502-517` ↔
31+
-- `EchoResidue.no-section-collapse-to-residue`.
32+
-- * ephapax `formal/Echo.v` `weaken` ↔ `EchoLinear.weaken`.
33+
34+
module EchoEphapaxBridge where
35+
36+
open import EchoLinear using (linear; affine; LEcho; weaken)
37+
open import EchoResidue using (no-section-collapse-to-residue)
38+
39+
-- ephapax `formal/Echo.v` `weaken` — Coq port of this Agda symbol.
40+
ephapax-L3-weaken : LEcho linear LEcho affine
41+
ephapax-L3-weaken = weaken
42+
43+
-- ephapax `formal/Echo.v` `no_section_collapse_to_residue`
44+
-- (line 502-517, `Qed`, zero axioms) — Coq port of this Agda symbol.
45+
ephapax-L3-no-section-collapse = no-section-collapse-to-residue

proofs/agda/Smoke.agda

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -956,6 +956,17 @@ open import EchoJanusBridge using
956956
; keyrevoke-echo
957957
)
958958

959+
-- Cross-repo bridges (NARROW): ephapax `formal/Echo.v` is a Coq port
960+
-- of `EchoLinear.agda` + `EchoResidue.agda` under a K-free / zero-axiom
961+
-- discipline. `ephapax-L3-weaken` and `ephapax-L3-no-section-collapse`
962+
-- are definitional `refl`-renames of the load-bearing Agda symbols,
963+
-- pinned so a silent upstream rename trips CI fast. See
964+
-- `EchoEphapaxBridge.agda` preamble.
965+
open import EchoEphapaxBridge using
966+
( ephapax-L3-weaken
967+
; ephapax-L3-no-section-collapse
968+
)
969+
959970
open import Ordinal.Base using
960971
( OT
961972
; zero

0 commit comments

Comments
 (0)