@@ -26,19 +26,25 @@ SessionAsFunction {p} (Select S1 S2) q = SessionAsFunction S1 q ⊎ SessionAsFun
2626-- Simplified echo over session types (avoiding universe issues)
2727SessionEcho : ∀ {p} → (q : Party) → Session p → Set
2828SessionEcho 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
3535AliceSendEcho : 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
4450DyadicEcho : ∀ {p} → Session p → Set
@@ -50,12 +56,19 @@ AliceSendWithProvenance = Alice , AliceSendEcho
5056
5157-- Bob's receive protocol with provenance
5258BobReceiveWithProvenance : 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 ⊤.
5665ProvenancePreservation : ∀ {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
6174EchoSafe : ∀ {p} → Session p → Set
0 commit comments