Skip to content

Commit e983787

Browse files
Merge branch 'main' into claude/echo-types-theory-docs
2 parents f9d6076 + 9864b0a commit e983787

11 files changed

Lines changed: 416 additions & 915 deletions

proofs/agda/All.agda

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ open import EchoCategorical
2222
open import EchoScope
2323
open import EchoOrdinal
2424
open import EchoJanusBridge
25+
open import Dyadic
26+
open import DyadicEchoBridge
27+
open import EchoThermodynamics
28+
open import EchoStabilityTests
2529

2630
open import Ordinal.Base
2731
open import Ordinal.Closure
@@ -30,6 +34,7 @@ open import Ordinal.PsiSimple
3034
open import Ordinal.OmegaMarkers
3135
open import Ordinal.Buchholz.Syntax
3236
open import Ordinal.Buchholz.Closure
37+
open import Ordinal.Buchholz.Order
3338
open import Ordinal.Buchholz.Psi
3439
open import Ordinal.Buchholz.Examples
3540
open import Ordinal.Buchholz.WellFormed

proofs/agda/DyadicEchoBridge.agda

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,25 @@ SessionAsFunction {p} (Select S1 S2) q = SessionAsFunction S1 q ⊎ SessionAsFun
2626
-- Simplified echo over session types (avoiding universe issues)
2727
SessionEcho : {p} (q : Party) Session p Set
2828
SessionEcho q End =
29-
SessionEcho q (Send A S) = Echo (λ _ ⊤) ⊤
30-
SessionEcho q (Recv A S) = Echo (λ _ ⊤) ⊤
31-
SessionEcho q (Choice S1 S2) = Echo (λ _ ⊤) ⊤
32-
SessionEcho q (Select S1 S2) = Echo (λ _ ⊤) ⊤
29+
SessionEcho q (Send A S) = Echo {A = ⊤} (λ _ tt) tt
30+
SessionEcho q (Recv A S) = Echo {A = ⊤} (λ _ tt) tt
31+
SessionEcho q (Choice S1 S2) = Echo {A = ⊤} (λ _ tt) tt
32+
SessionEcho q (Select S1 S2) = Echo {A = ⊤} (λ _ tt) tt
3333

3434
-- Example: Echo over Alice's send protocol
3535
AliceSendEcho : SessionEcho Alice AliceSendsUnit
36-
AliceSendEcho = echo-intro (λ _ tt) tt
37-
38-
-- Protocol provenance: echo retains session structure
39-
ProtocolProvenance : {p} {S : Session p} {q : Party}
40-
SessionEcho q S Echo (λ _ ⊤) ⊤
41-
ProtocolProvenance echo = echo
36+
AliceSendEcho = echo-intro {A = ⊤} (λ _ tt) tt
37+
38+
-- Protocol provenance: echo retains session structure. For non-End
39+
-- sessions SessionEcho q S is already Echo {A = ⊤} (λ _ → tt) tt; for End it
40+
-- is ⊤ and we synthesize the canonical echo.
41+
ProtocolProvenance : {p} {S : Session p} {q : Party}
42+
SessionEcho q S Echo {A = ⊤} (λ _ tt) tt
43+
ProtocolProvenance {S = End} _ = echo-intro {A = ⊤} (λ _ tt) tt
44+
ProtocolProvenance {S = Send _ _} echo = echo
45+
ProtocolProvenance {S = Recv _ _} echo = echo
46+
ProtocolProvenance {S = Choice _ _} echo = echo
47+
ProtocolProvenance {S = Select _ _} echo = echo
4248

4349
-- Dyadic echo: session with echo-indexed provenance
4450
DyadicEcho : {p} Session p Set
@@ -50,12 +56,19 @@ AliceSendWithProvenance = Alice , AliceSendEcho
5056

5157
-- Bob's receive protocol with provenance
5258
BobReceiveWithProvenance : DyadicEcho BobReceivesUnit
53-
BobReceiveWithProvenance = Bob , echo-intro (λ _ tt) tt
59+
BobReceiveWithProvenance = Bob , echo-intro {A = ⊤} (λ _ tt) tt
5460

55-
-- Provenance preservation under session concatenation
61+
-- Provenance preservation under session concatenation. We synthesize
62+
-- a fresh echo at the concatenated session, since SessionEcho at a
63+
-- Send/Recv/Choice/Select head is always Echo {A = ⊤} (λ _ → tt) tt and at
64+
-- End it is ⊤.
5665
ProvenancePreservation : {p} {S1 S2 : Session p}
5766
DyadicEcho S1 DyadicEcho S2 DyadicEcho (S1 >>= S2)
58-
ProvenancePreservation (q1 , echo1) (q2 , echo2) = q1 , echo1
67+
ProvenancePreservation {S1 = End} _ (q2 , echo2) = q2 , echo2
68+
ProvenancePreservation {S1 = Send _ _} (q1 , _) _ = q1 , echo-intro {A = ⊤} (λ _ tt) tt
69+
ProvenancePreservation {S1 = Recv _ _} (q1 , _) _ = q1 , echo-intro {A = ⊤} (λ _ tt) tt
70+
ProvenancePreservation {S1 = Choice _ _} (q1 , _) _ = q1 , echo-intro {A = ⊤} (λ _ tt) tt
71+
ProvenancePreservation {S1 = Select _ _} (q1 , _) _ = q1 , echo-intro {A = ⊤} (λ _ tt) tt
5972

6073
-- Echo-safe dyadic protocols: protocols where echoes preserve safety
6174
EchoSafe : {p} Session p Set

proofs/agda/Echo.agda

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ module Echo where
44

55
open import Level using (Level; _⊔_)
66
open import Function.Base using (_∘_; id)
7-
open import Data.Product.Base using (Σ; _,_)
7+
open import Data.Product.Base using (Σ; _,_; _×_)
88
open import Relation.Binary.PropositionalEquality using (_≡_; refl; trans; cong)
99

1010
-- Echo_f(y) := Σ (x : A) , (f x ≡ y)
@@ -63,3 +63,35 @@ map-square :
6363
(square : x f' (u x) ≡ v (f x)) {y : B}
6464
Echo f y Echo f' (v y)
6565
map-square f f' u v square (x , p) = u x , trans (square x) (cong v p)
66+
67+
-- Composition isomorphism: the echo of g ∘ f at y is canonically
68+
-- equivalent to a Σ over an intermediate b : B of (Echo f b × g b ≡ y).
69+
-- This is the accumulation law from docs/echo-types/composition.md §1:
70+
-- composition does not weaken the intensional core, it accumulates
71+
-- witness structure. Both round-trips are definitional once the
72+
-- refl pattern has pinned the intermediate b to f x.
73+
74+
Echo-comp-iso-to :
75+
{a b c} {A : Set a} {B : Set b} {C : Set c}
76+
(f : A B) (g : B C) {y : C}
77+
Echo (g ∘ f) y Σ B (λ b Echo f b × (g b ≡ y))
78+
Echo-comp-iso-to f g (x , p) = f x , (x , refl) , p
79+
80+
Echo-comp-iso-from :
81+
{a b c} {A : Set a} {B : Set b} {C : Set c}
82+
(f : A B) (g : B C) {y : C}
83+
Σ B (λ b Echo f b × (g b ≡ y)) Echo (g ∘ f) y
84+
Echo-comp-iso-from f g (b , (x , refl) , p) = x , p
85+
86+
Echo-comp-iso-from-to :
87+
{a b c} {A : Set a} {B : Set b} {C : Set c}
88+
(f : A B) (g : B C) {y : C} (e : Echo (g ∘ f) y)
89+
Echo-comp-iso-from f g (Echo-comp-iso-to f g e) ≡ e
90+
Echo-comp-iso-from-to f g (x , p) = refl
91+
92+
Echo-comp-iso-to-from :
93+
{a b c} {A : Set a} {B : Set b} {C : Set c}
94+
(f : A B) (g : B C) {y : C}
95+
(r : Σ B (λ b Echo f b × (g b ≡ y)))
96+
Echo-comp-iso-to f g (Echo-comp-iso-from f g r) ≡ r
97+
Echo-comp-iso-to-from f g (b , (x , refl) , p) = refl

proofs/agda/EchoCNO.agda

Lines changed: 0 additions & 66 deletions
This file was deleted.

0 commit comments

Comments
 (0)