Skip to content

Commit 9a7be63

Browse files
Merge branch 'main' into license/migrate-to-mpl-2.0
2 parents 1f50f34 + 985fc4c commit 9a7be63

12 files changed

Lines changed: 2175 additions & 32 deletions

File tree

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
---
2+
name: Bug report
3+
about: Create a report to help us improve
4+
title: ''
5+
labels: ''
6+
assignees: ''
7+
8+
---
9+
10+
**Describe the bug**
11+
A clear and concise description of what the bug is.
12+
13+
**To Reproduce**
14+
Steps to reproduce the behavior:
15+
1. Go to '...'
16+
2. Click on '....'
17+
3. Scroll down to '....'
18+
4. See error
19+
20+
**Expected behavior**
21+
A clear and concise description of what you expected to happen.
22+
23+
**Screenshots**
24+
If applicable, add screenshots to help explain your problem.
25+
26+
**Desktop (please complete the following information):**
27+
- OS: [e.g. iOS]
28+
- Browser [e.g. chrome, safari]
29+
- Version [e.g. 22]
30+
31+
**Smartphone (please complete the following information):**
32+
- Device: [e.g. iPhone6]
33+
- OS: [e.g. iOS8.1]
34+
- Browser [e.g. stock browser, safari]
35+
- Version [e.g. 22]
36+
37+
**Additional context**
38+
Add any other context about the problem here.

.github/ISSUE_TEMPLATE/custom.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
name: Custom issue template
3+
about: Describe this issue template's purpose here.
4+
title: ''
5+
labels: ''
6+
assignees: ''
7+
8+
---
9+
10+
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
name: Feature request
3+
about: Suggest an idea for this project
4+
title: ''
5+
labels: ''
6+
assignees: ''
7+
8+
---
9+
10+
**Is your feature request related to a problem? Please describe.**
11+
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12+
13+
**Describe the solution you'd like**
14+
A clear and concise description of what you want to happen.
15+
16+
**Describe alternatives you've considered**
17+
A clear and concise description of any alternative solutions or features you've considered.
18+
19+
**Additional context**
20+
Add any other context or screenshots about the feature request here.

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
name = "EchoTypes"
77
uuid = "a8ca608b-856a-4215-8c3d-f9ffd1705524"
88
authors = ["Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com>"]
9-
version = "0.1.0"
9+
version = "0.3.0"
1010

1111
[compat]
1212
julia = "1.10"

README.md

Lines changed: 75 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,72 @@ concrete finite data and check their stated laws numerically.
3232
## Source of truth
3333

3434
The Agda. This release mirrors `hyperpolymath/echo-types` at
35-
`origin/main` commit `2ca31220e3efdcf2708e6d2e04869993fbb1e53a`:
35+
`origin/main` commit `eed42503a1a4c54ec0a347ebef3440b4d4db30c9`
36+
(2026-05-28 head, after the Tier-3 audience-facing spine landed —
37+
EchoProvenance, EchoSecurity, EchoProbabilisticSupport,
38+
EchoDifferential, EchoLLEncoding, plus the
39+
EchoCanonicalIdentitySuite re-export bundle):
3640

3741
| Julia surface | Mirrors Agda module / lemmas |
3842
|---|---|
39-
| `EchoWitness`, `echo_intro`, `fiber`, `map_over*`, `comp_iso_*`, `cancel_iso_*` | `Echo.agda` (kernel) |
43+
| `EchoWitness`, `echo_intro`, `fiber`, `map_over*`, `comp_iso_*`, `cancel_iso_*` | `Echo.agda` (kernel — also re-pinned via `EchoKernel.agda` upstream) |
4044
| `EchoR`, `echo_to_residue`, `residue_strictly_loses` | `EchoResidue.agda` (`echo-to-residue`, `strict-weakening-collapse`) |
4145
| `fiber_size`, `flog2`, `landauer_bound`, `fiber_erasure_bound`, `bennett_reversible`, `landauer_collapse` | `EchoFiberCount.agda` + `EchoThermodynamics.agda` |
42-
43-
> **Pending upstream (forward-reference, not yet tracked):** the
44-
> mirrored kernel surface above corresponds to the curated funext-free
45-
> core being introduced upstream as `proofs/agda/EchoKernel.agda` in
46-
> echo-types **PR #56** (`foundation/echo-kernel-2026-05-18`, open at
47-
> time of writing). It is *not* on `origin/main` yet, so the SoT pin
48-
> deliberately stays at `2ca3122` (canonical `main`). When PR #56
49-
> merges, this pin bumps to the actual squash-merge commit and the
50-
> table row gains an explicit `EchoKernel` reference. Until then, this
51-
> companion tracks `Echo.agda` directly — `EchoKernel` adds no new
52-
> mathematics, only a curated re-export + a funext-free certificate.
46+
| **v0.2.0** `encode`, `decode`, `*_roundtrip`, `f_factors_via_projection` | `EchoTotalCompletion.agda` (`A↔ΣEcho`, the slogan-unlock) |
47+
| **v0.2.0** `echo_factorisation`, `fibre_of_proj1_*`, `projection_fibre_roundtrips`, `ofs_witness` | `EchoOrthogonalFactorizationSystem.agda` (factorisation existence + projection-fibre identification — funext-qualified clauses NOT mirrored) |
48+
| **v0.2.0** `image`, `image_factor_*`, `is_surjective`, `is_injective`, `injective_fibres_proj_unique` | `EchoImageFactorization.agda` |
49+
| **v0.2.0** `no_section_of_collapsing_map`, `no_section_when_non_injective_at` | `EchoNoSectionGeneric.agda` |
50+
| **v0.2.0** `HasInverse`, `equiv_fibre_center`, `equiv_implies_injective`, `equiv_fibre_proj_unique`, `const_fun`, `const_fibre_section` | `EchoLossTaxonomy.agda` (4-case classifier — EQUIV/INJ/SURJ/CONST K-free skeletons) |
51+
| **v0.2.0** `collapse_as_fin`, `entropy_shadow`, `shannon_shadow`, `entropy_shadow_blind` | `EchoEntropy.agda` (discrete Shannon shadow) |
52+
| **v0.2.0** `LEcho`, `EchoMode`, `equal_at_mode`, `mode_equality_strictly_finer_at_linear` | `EchoObservationalEquivalence.agda` (mode-indexed equality) |
53+
| **v0.3.0** `Provenance`, `ProvRecord`, `provenance_collapses_at`, `prov_echo_tag1/2`, `echoes_distinguish_tag`, `prov_residue_collapses_tags`, `bool_over_nat_provenance` | `EchoProvenance.agda` (Tier-3 audience move 1 — 4 parametric theorems + Bool-over-ℕ instance) |
54+
| **v0.3.0** `Security`, `exit_collapses_at`, `audit_no_recovery_at`, `region_exit_audit_instance` | `EchoSecurity.agda` (Tier-3 audience move 2 — per-region audit no-recovery via the generic no-section gadget) |
55+
| **v0.3.0** `Sampling`, `Sample`, `support_collapses_at`, `samp_echo_idx1/2`, `echo_carries_which_index`, `samp_residue_loses_index`, `bool_indexed_nat_sampling` | `EchoProbabilisticSupport.agda` (Tier-3 audience move 3 — marginal loses sampling index) |
56+
| **v0.3.0** `Sensitivity`, `Perturbed`, `blur_collapses_perturbations_at`, `diff_echo_pert1/2`, `echo_carries_perturbation`, `diff_residue_loses_perturbation`, `bool_perturbed_nat_sensitivity` | `EchoDifferential.agda` (Tier-3 audience move 4 — blur loses perturbation tag) |
57+
| **v0.3.0** `LLShallowEncoding`, `trivial_encoding`, `trivial_encoding_has_section`, `ll_encoding_gap`, `source_no_section_holds`, `gap_paired` | `EchoLLEncoding.agda` (cementing-negative — the LL `!A := 1` shadow admits an encoded section paired with source-side no-section) |
58+
59+
### What is intentionally NOT mirrored
60+
61+
- **Funext-qualified surfaces.** The F5 earn-back gate gave the full
62+
OFS (uniqueness up to iso + diagonal lifting) upstream under
63+
funext, and `EchoPullbackUnivF4` gives the strict pullback
64+
universal property the same way. Julia has no funext to take as
65+
hypothesis; the conditional claims would be vacuous. Only the
66+
unconditional fragment of `ofs-witness` is mirrored.
67+
68+
- **Retracted surface (R-2026-05-18).** Graded-comonad framing,
69+
two-models, universal-property, conservativity. The mechanised
70+
laws survive upstream (and so does the model-independence
71+
theorem), but the *framing* is retracted; the companion does not
72+
reproduce any of it.
73+
74+
- **Higher type-theoretic structure.** UIP-strength claims
75+
(full Σ-pair equality under injectivity, `A ↔ Echo(const y0)`,
76+
contractible fibres), propositional truncation (the
77+
(epi, mono) collapse of the image factorisation), and HoTT
78+
identification types beyond decidable equality. The proof-relevant
79+
*upper* of each pair is what's mirrored, in line with the
80+
`--safe --without-K` discipline upstream.
81+
82+
- **Ordinal-lane work (`Ordinal/Buchholz/*`).** The Slice-3 + Slice-4
83+
rank-mono umbrella, `RankPow*`, head-Ω inversion, joint-bplus
84+
scaffolds — all live in echo-types's ordinal pillar, separate
85+
from the echo functor / residue / thermodynamics core this
86+
companion mirrors. Adding ordinal shadows would require a new
87+
`Bord` carrier in Julia and a redesigned scope agreement. Not
88+
in v0.3.0; out-of-scope for the companion's stated discipline.
89+
90+
### Honest-bound discipline (Tier 3)
91+
92+
The four v0.3.0 audience-facing modules ship explicit "what is
93+
NOT proved" lists upstream — `EchoSecurity` is type-level
94+
no-section, NOT bytes-zeroed / side-channel-safe / tamper-evident;
95+
`EchoProbabilisticSupport` is support tracking, NOT measure
96+
theory / coupling / extraction; `EchoDifferential` is perturbation
97+
tracking, NOT ε-DP / Lipschitz / noise calibration. The Julia
98+
testsets preserve this scope in their comments. Consumers should
99+
not promote a green test to a real-world security or privacy
100+
claim — those need additional structure beyond the finite shadow.
53101

54102
Scope limits are inherited honestly: the thermodynamics is a
55103
**finite-domain bound *shape*** in arbitrary natural units — not
@@ -82,11 +130,20 @@ about itself.
82130

83131
## Status
84132

85-
`v0.1.0`, local development. **Not registered** in the Julia General
86-
registry and intentionally **not** part of the
87-
AcceleratorGate→KnotTheory→Skein→KRLAdapter registration chain — it is
88-
a standalone companion, registered only on its own merit if and when
89-
that is warranted.
133+
`v0.3.0`, local development. The v0.1.0 surface (`Echo`,
134+
`EchoResidue`, `EchoFiberCount`, `EchoThermodynamics`) and the
135+
v0.2.0 Tier-1+Tier-2 canonical-identity spine are preserved
136+
unchanged; v0.3.0 adds executable shadows of the Tier-3
137+
audience-facing spine that landed upstream on 2026-05-27/28
138+
(`EchoProvenance`, `EchoSecurity`, `EchoProbabilisticSupport`,
139+
`EchoDifferential`) plus the cementing-negative `EchoLLEncoding`
140+
(LL shallow-encoding gap with paired source-side no-section).
141+
Test suite: **253 passing assertions across 18 testsets**, each
142+
the finite shadow of a named Agda lemma. Registered as
143+
`EchoTypes` in the hyperpolymath professional registry; **not**
144+
registered in the Julia General registry and intentionally **not**
145+
part of the AcceleratorGate→KnotTheory→Skein→KRLAdapter chain — it
146+
is a standalone companion.
90147

91148
## Licence
92149

0 commit comments

Comments
 (0)