Prerequisites. Direct starred prerequisites: Chapter 21. No later core chapter depends on this route.
Three pairwise-dual channels need not compose into one coherent conversation. For three channels directed 𝐵 →𝐴, 𝐶 →𝐵, and 𝐴 →𝐶, consider 𝑃𝐴=𝑘𝐵𝐴?(𝑥);𝑘𝐴𝐶!⟨𝑣⟩;𝟎,𝑃𝐵=𝑘𝐶𝐵?(𝑦);𝑘𝐵𝐴!⟨𝑣⟩;𝟎,𝑃𝐶=𝑘𝐴𝐶?(𝑧);𝑘𝐶𝐵!⟨𝑣⟩;𝟎. Every channel has one sender and one receiver with the same payload type, yet the parallel composition has three leading inputs and no step. Multiparty session types begin from a global protocol and project one local view per participant. Asynchronous execution adds queues, so the proof must also relate messages already sent to actions not yet received.
This chapter uses Honda, Yoshida, and Carbone for the historical global/local architecture and its motivating obstruction [HYC16]. It does not use their flawed projection argument as the owner of subject reduction. That theorem belongs to the repaired, mechanized calculus of Tirore, Bengtson, and Carbone [TBC25].
The repaired asynchronous calculus
Let 𝑝,𝑞,𝑟 range over roles, 𝑘 over explicit queue addresses, and 𝑠𝑝 over a session located at role 𝑝. The load-bearing process forms are 𝑃,𝑄::=𝟎∣𝑃∣𝑄∣(𝜈𝑠̃𝑠)𝑃∣𝑠𝑝[𝑘]!⟨𝑒⟩;𝑃∣𝑠𝑝[𝑘]?(𝑥);𝑃∣𝑠𝑝[𝑘]◃ℓ;𝑃∣𝑠𝑝[𝑘]▹{ℓ𝑖:𝑃𝑖}𝑖∈𝐼∣𝑠[𝑘]::̃ℎ∣⋯. A tilde denotes a finite sequence: ̃𝑠 is the located session family bound with 𝑠, and ̃ℎ is one queue’s item sequence. A queue item is a value, delegated endpoint, or label annotated by its sender. A send appends to 𝑠[𝑘]; the matching receive consumes only the head item whose sender is the expected role. Session initiation creates the finite family of queues declared by the requester. Definitions, conditionals, and structural congruence complete the process dynamics.
Closed, contractive global and local types are 𝐺::=𝑝→𝑞:𝑘⟨𝑈⟩.𝐺∣𝑝→𝑞:𝑘{ℓ𝑖:𝐺𝑖}𝑖∈𝐼::=∣𝜇𝑡.𝐺∣𝑡∣𝖾𝗇𝖽,𝑇::=!𝑘⟨𝑈⟩.𝑇∣?𝑘⟨𝑈⟩.𝑇::=∣𝑘⊕{ℓ𝑖:𝑇𝑖}𝑖∈𝐼∣𝑘&{ℓ𝑖:𝑇𝑖}𝑖∈𝐼::=∣𝜇𝑡.𝑇∣𝑡∣𝖾𝗇𝖽. The paper’s restriction on recursion rejects every subexpression 𝜇𝑡0.𝜇𝑡1…𝜇𝑡𝑛.𝑡0. This prevents projection from manufacturing an unguarded local loop.
Projection is a partial function 𝐺 ↾𝑟. For a value action its defining equations are 𝑝→𝑞:𝑘⟨𝑈⟩.𝐺↾𝑝=!𝑘⟨𝑈⟩.𝐺↾𝑝,𝑝→𝑞:𝑘⟨𝑈⟩.𝐺↾𝑞=?𝑘⟨𝑈⟩.𝐺↾𝑞,𝑝→𝑞:𝑘⟨𝑈⟩.𝐺↾𝑟=𝐺↾𝑟(𝑟∉{𝑝,𝑞}). For a nonempty branch 𝑝 →𝑞 :𝑘{ℓ𝑖 :𝐺𝑖}𝑖∈𝐼, the sender and receiver receive the corresponding internal and external choices. If 𝑟 ∉{𝑝,𝑞}, the projection is defined only when there is one local type 𝑇 such that ∀𝑖∈𝐼.𝐺𝑖↾𝑟=𝑇;𝑝→𝑞:𝑘{ℓ𝑖:𝐺𝑖}𝑖∈𝐼↾𝑟=𝑇.(𝑃𝑙𝑎𝑖𝑛−𝐵𝑟𝑎𝑛𝑐ℎ) Thus this calculus uses plain common projection, not a full merge that unions different offered-label sets. Recursion is projected homomorphically when the guardedness restriction above is satisfied. A global type is projectable when this partial calculation is defined for every role occurring in it.
Referenced from 2 locations
An action 𝑎 has participants 𝖿𝗋𝗈𝗆(𝑎),𝗍𝗈(𝑎) and address 𝖼𝗁(𝑎). Write 𝖨𝖨(𝑎,𝑏):=[𝗍𝗈(𝑎)=𝗍𝗈(𝑏)],𝖨𝖮(𝑎,𝑏):=[𝗍𝗈(𝑎)=𝖿𝗋𝗈𝗆(𝑏)],𝖮𝖮(𝑎,𝑏):=[𝖿𝗋𝗈𝗆(𝑎)=𝖿𝗋𝗈𝗆(𝑏)∧𝖼𝗁(𝑎)=𝖼𝗁(𝑏)]. The brackets denote truth values.
The dependency judgments on a nonempty action word are generated by 𝖨𝖨(𝑎0,𝑎1)𝖨𝗇𝖣𝖾𝗉(𝑎0,𝑎1)𝐼−𝐵𝑎𝑠𝑒 𝖨𝖮(𝑎0,𝑎1)𝖨𝗇𝖣𝖾𝗉(𝑎1,…,𝑎𝑛)𝖨𝗇𝖣𝖾𝗉(𝑎0,𝑎1,…,𝑎𝑛)I−Step, 𝖨𝖮(𝑎0,𝑎1)∨𝖮𝖮(𝑎0,𝑎1)𝖮𝗎𝗍𝖣𝖾𝗉(𝑎0,𝑎1)O−Base 𝖨𝖮(𝑎0,𝑎1)∨𝖮𝖮(𝑎0,𝑎1)𝖮𝗎𝗍𝖣𝖾𝗉(𝑎1,…,𝑎𝑛)𝖮𝗎𝗍𝖣𝖾𝗉(𝑎0,𝑎1,…,𝑎𝑛)O−Step. Let 𝑎0,¯𝑎,𝑎1 be a segment of any trace of 𝐺 with 𝖼𝗁(𝑎0) =𝖼𝗁(𝑎1). The type 𝐺 is linear when some subsequence of ¯𝑎 makes 𝖨𝗇𝖣𝖾𝗉(𝑎0,¯𝑎,𝑎1) derivable and some, possibly different, subsequence makes 𝖮𝗎𝗍𝖣𝖾𝗉(𝑎0,¯𝑎,𝑎1) derivable. Both dependencies are required.
Referenced from 3 locations
The global and local labelled semantics are asynchronous. A later interaction may move beneath an earlier one when it does not involve the blocked receiver; a local action may move beneath an output on a different queue address. With these rules, full projection both simulates and reflects global transitions. The pinned Coq development names the directions harmony_sound and harmony_complete.
Write 𝐺 ↓1ℓ when the paper’s relaxed barb relation exposes label ℓ; beneath a branch, it suffices that one continuation can perform ℓ. The predicate 𝗎𝗇𝗌𝗍𝗎𝖼𝗄(𝐺) is coinductively generated by the exact condition ∀ℓ.𝐺↓1ℓ⟹∃𝐺′.𝐺ℓ→𝐺′∧𝗎𝗇𝗌𝗍𝗎𝖼𝗄(𝐺′). A global type is coherent exactly when it is projectable, linear, and unstuck. A local environment is coherent when it is the full projection of such a global type. A local-environment/queue-specification pair is coherent when some path function decomposes a coherent projected environment into precisely that pair.
Referenced from 2 locations
The three global clauses are independent. Without projectability, a role absent from a choice can be asked to guess its continuation. Without linearity, two senders can race to put differently typed values at the same address. For the paper’s counterexample 𝑝→𝑞:𝑘1{ℓ1:𝑞→𝑟:𝑘2⟨𝖡𝗈𝗈𝗅⟩.𝖾𝗇𝖽,ℓ2:𝑝→𝑟:𝑘2⟨𝖡𝗈𝗈𝗅⟩.𝖾𝗇𝖽}, the relaxed barb sees the second branch’s 𝑝-to-𝑟 action, but the true global semantics cannot move that action because its rule requires the same labelled move in every branch. This is a failure of unstuckness, not a wrong-queue-head definition. Sender and label agreement at concrete queue heads instead follows from queue typing and the coherent decomposition. In the mechanization the ingredients are represented by projectable, LinearCo, and goodG; the process typing judgment is OFT.
Write Γ ⊢𝐷𝑃 ▹𝐶Δ;𝑄 for the paper’s typing judgment: shared assumptions Γ, definitions 𝐷, process 𝑃, session/channel environment Δ, and queue specification 𝑄, under the explicit channel inventory 𝐶. The rules type each process prefix against the corresponding local action and type each concrete queue against 𝑄. Parallel composition splits linear session obligations; restriction checks a whole coherent session rather than hiding unrelated endpoints.
For example, the value-output rule and the matching queue rule have the following local shape; the omitted shared premises are unchanged. Γ⊢𝑒:𝑈Γ⊢𝐷𝑃▹𝐶Δ,𝑠𝑝:𝑇;𝑄Γ⊢𝐷𝑠𝑝[𝑘]!⟨𝑒⟩;𝑃▹𝐶Δ,𝑠𝑝:!𝑘⟨𝑈⟩.𝑇;𝑄T−Send Γ⊢𝑣:𝑈Γ⊢𝐷𝑠[𝑘]::̃ℎ▹𝐶Δ;𝑄Γ⊢𝐷𝑠[𝑘]::(̃ℎ⋅𝑝!𝑣)▹𝐶Δ;𝑄⋅(𝑘,𝑝,𝑈)T−Queue. A send step uses T-Send on the process before the step and T-Queue on the appended sender-tagged item afterward. The session environment advances from !𝑘⟨𝑈⟩.𝑇 to 𝑇, which is the send case used in the preservation proof.
Suppose Γ ⊢𝐷𝑃 ▹𝐶Δ;𝑄, the runtime specification is coherent as Δ0, and 𝑃 ⟶𝐷𝑃′. Then there exist Δ1,Δ′,𝑄′ such that the reduct is typed as Γ ⊢𝐷𝑃′ ▹𝐶Δ′;𝑄′, its runtime specification is coherent as Δ1, and either Δ0 =Δ1 or Δ0ℓ→Δ1 for one global interaction ℓ. The paper also proves structural-congruence preservation and the specialization to empty linear environments.
Referenced from 3 locations
Proof of Theorem 59.4 — Repaired subject reduction
Proof. Induct on the process reduction. Send, delegation, and selection transfer a typed item to the corresponding queue; receive, session receive, and branch use queue typing and environment decomposition to identify the head item and advance its local action. Initiation uses full projection and the projection theorem to create the local family and empty queues. Conditional and definition steps use expression preservation and substitution. Contextual steps rebuild restriction or parallel typing; structural congruence uses its separate invariance theorem. For a communication that completes a global interaction, projection harmony and the coherent global witness—including its coinductive unstuckness premise—produce Δ0ℓ→Δ1; administrative and one-sided queue steps leave Δ0 unchanged. Linearity gives the dependency fact needed when two actions mention the same explicit queue address. ◻
This theorem is subject_reduction_final in the pinned Coq source; its empty-context specialization is subject_reduction_empty, and structural invariance is OFT_cong. The printed theorem, proof dependencies, and identifiers all belong to the ECOOP 2025 calculus.
A typed process with coherent queues is not a communication-error structure, and every reduct remains so.
Referenced from 2 locations
Proof of Corollary 59.5 — Communication safety
Proof. The paper first proves syntactic exclusion of error structures, then applies Theorem 59.4 after each step. The corresponding Coq identifiers are 𝙴𝚛𝚛𝚘𝚛_𝚜𝚝𝚛𝚞𝚌𝚝,𝙾𝙵𝚃_𝚗𝚘𝚝_𝚎𝚛𝚛𝚘𝚛_𝚜𝚝𝚛𝚞𝚌𝚝,𝙾𝙵𝚃_𝚗𝚘𝚝_𝚎𝚛𝚛𝚘𝚛_𝚜𝚎𝚖. ◻
Communication safety excludes a wrong value type, sender, or label at a receive. It does not establish progress, general deadlock freedom, freedom from orphan messages, fair delivery, multiparty compatibility, termination, or liveness. A coherent typing premise can also be destroyed by manually assembling endpoints or queues not obtained from one admitted global type.
★★☆ Give three small global types, each violating exactly one of projectability, linearity, and unstuckness. For the last, use the two-branch type displayed above: exhibit its relaxed barb and show why no matching true global transition exists.
Referenced from 3 locations
A complete three-party execution
Use four distinct addresses 𝑘1,𝑘2,𝑘3,𝑘4 for 𝐺𝗌𝖺𝗅𝖾=𝐵→𝑆:𝑘1⟨𝖨𝗍𝖾𝗆⟩.𝑆→𝐾:𝑘2⟨𝖣𝖾𝖻𝗂𝗍⟩.𝐾→𝑆:𝑘4{𝗈𝗄:𝑆→𝐵:𝑘3{𝖽𝗈𝗇𝖾:𝖾𝗇𝖽},𝗇𝗈:𝑆→𝐵:𝑘3{𝖽𝗈𝗇𝖾:𝖾𝗇𝖽}}. Its projections are 𝑇𝐵=!𝑘1⟨𝖨𝗍𝖾𝗆⟩.𝑘3&{𝖽𝗈𝗇𝖾:𝖾𝗇𝖽},𝑇𝑆=?𝑘1⟨𝖨𝗍𝖾𝗆⟩.!𝑘2⟨𝖣𝖾𝖻𝗂𝗍⟩.𝑘4&{𝗈𝗄:𝑘3⊕{𝖽𝗈𝗇𝖾:𝖾𝗇𝖽},𝗇𝗈:𝑘3⊕{𝖽𝗈𝗇𝖾:𝖾𝗇𝖽}},𝑇𝐾=?𝑘2⟨𝖣𝖾𝖻𝗂𝗍⟩.𝑘4⊕{𝗈𝗄:𝖾𝗇𝖽,𝗇𝗈:𝖾𝗇𝖽}. Abbreviate successive residuals by 𝐵0,𝐵1,𝐵2, 𝑆0,…,𝑆4, and 𝐾0,𝐾1,𝐾2, with 𝐵0 =𝑇𝐵, 𝑆0 =𝑇𝑆, 𝐾0 =𝑇𝐾, and each successor obtained by deleting the displayed outer action. In queue order (𝑘1,𝑘2,𝑘4,𝑘3), the accepting execution is the following fully annotated trace: action(𝐵,𝑆,𝐾)(𝑞1,𝑞2,𝑞4,𝑞3)initial(𝐵0,𝑆0,𝐾0)(𝜖,𝜖,𝜖,𝜖)𝐵!𝑘1𝗂𝗍𝖾𝗆(𝐵1,𝑆0,𝐾0)(𝗂𝗍𝖾𝗆𝐵,𝜖,𝜖,𝜖)𝑆?𝑘1𝗂𝗍𝖾𝗆(𝐵1,𝑆1,𝐾0)(𝜖,𝜖,𝜖,𝜖)𝑆!𝑘2𝖽𝖾𝖻𝗂𝗍(𝐵1,𝑆2,𝐾0)(𝜖,𝖽𝖾𝖻𝗂𝗍𝑆,𝜖,𝜖)𝐾?𝑘2𝖽𝖾𝖻𝗂𝗍(𝐵1,𝑆2,𝐾1)(𝜖,𝜖,𝜖,𝜖)𝐾⊕𝑘4𝗈𝗄(𝐵1,𝑆2,𝐾2)(𝜖,𝜖,𝗈𝗄𝐾,𝜖)𝑆&𝑘4𝗈𝗄(𝐵1,𝑆3,𝐾2)(𝜖,𝜖,𝜖,𝜖)𝑆⊕𝑘3𝖽𝗈𝗇𝖾(𝐵1,𝑆4,𝐾2)(𝜖,𝜖,𝜖,𝖽𝗈𝗇𝖾𝑆)𝐵&𝑘3𝖽𝗈𝗇𝖾(𝐵2,𝑆4,𝐾2)(𝜖,𝜖,𝜖,𝜖) Each row names the transition and advances exactly one residual type. A send appends a sender-tagged item; a receive checks and removes the head. The refusal branch has the same shape with 𝗇𝗈 at 𝑘4. Every address is used by exactly one global action, so the same-address premise in definition 59.2 never arises and linearity holds vacuously. At the outer branch, both continuations project at 𝐵 to the same 𝑘3&{𝖽𝗈𝗇𝖾 :𝖾𝗇𝖽}. Equation (Plain-Branch) therefore proves projectability without importing a full-merge operator. The protocol deliberately does not tell 𝐵 which bank branch was taken.
★★☆ Extend both continuations of 𝐺𝗌𝖺𝗅𝖾 so that, after the 𝖽𝗈𝗇𝖾 notification, 𝐵 sends a receipt address to 𝐾. Give the three projections and insert both asynchronous queue steps in the displayed trace. Explain why extending only the 𝗈𝗄 continuation would violate (Plain-Branch) at 𝐵.
Referenced from 3 locations
From protocols to choreographic programs
Pirouette changes the object of study from an asynchronous global protocol to a typed, executable choreography [HG21]. Its local language is a parameter, not silently assumed to be the lambda calculus. The interface requires decidable equality of locations; expressions with capture-avoiding substitution and its equations; a closed class of values that do not step; unique typing with variables, Booleans, exchange, weakening, strengthening, and substitution; and, for relative soundness, Boolean inversion, local preservation, and local progress.
Let 𝑝,𝑞 range over locations, 𝑒 over local expressions, 𝑑 over synchronization labels, and 𝑋 over choreography variables. The load-bearing grammar is 𝐶::=𝗋𝖾𝗍𝑝(𝑒)∣𝑋∣𝑝⟨𝑒⟩→𝑞;𝐶∣𝗂𝖿𝑝(𝑒){𝐶1}{𝐶2}∣𝑝⟨𝑑⟩→𝑞;𝐶∣𝗅𝖾𝗍𝗅𝗈𝖼𝖺𝗅𝑝(𝐶1;𝐶2)∣𝖿𝗎𝗇𝗅𝗈𝖼𝖺𝗅𝑝(𝐶)∣𝖿𝗎𝗇𝗀𝗅𝗈𝖻𝖺𝗅(𝐶)∣𝖺𝗉𝗉𝗅𝗈𝖼𝖺𝗅𝑝(𝐶,𝑒)∣𝖺𝗉𝗉𝗀𝗅𝗈𝖻𝖺𝗅(𝐶1,𝐶2). A communication binds the received value as the newest local variable at 𝑞. A local function binds a local variable at its named location. A global function binds one choreography variable. Applying a global function performs a synchronization before capture-avoiding substitution of its choreography argument.
Referenced from 3 locations
For three distinct locations 𝐴,𝐵,𝐶, set 𝐹:=𝖿𝗎𝗇𝗀𝗅𝗈𝖻𝖺𝗅(𝐴⟨𝗂𝗍𝖾𝗆⟩→𝐵;𝑋),𝑉:=𝐵⟨𝖽𝗈𝗇𝖾⟩→𝐶;𝗋𝖾𝗍𝐶(0). The higher-order call has the complete principal calculation 𝖺𝗉𝗉𝗀𝗅𝗈𝖻𝖺𝗅(𝐹,𝑉)𝐺𝑙𝑜𝑏𝑎𝑙−𝐴𝑝𝑝⟶𝐴⟨𝗂𝗍𝖾𝗆⟩→𝐵;𝐵⟨𝖽𝗈𝗇𝖾⟩→𝐶;𝗋𝖾𝗍𝐶(0). The step substitutes 𝑉 for 𝑋; the leading synchronization prevents one endpoint from entering the substituted choreography before the others have finished evaluating the global function and argument.
A choreography’s small-step semantics carries a block set: a location whose pending action is blocked cannot be used by an out-of-order step, while independent locations may compute or communicate past it. Communication is synchronous. A higher-order call performs a global synchronization before entering its body; that barrier is operational, not merely an EPP artifact.
The branch-knowledge obstruction is already visible in 𝐶𝖻𝗋𝖺𝗇𝖼𝗁:=𝗂𝖿𝐴(𝑏){𝐴⟨𝗈𝗄⟩→𝐵;𝐵⟨1⟩→𝐶;𝗋𝖾𝗍𝐶(1)}{𝐴⟨𝗇𝗈⟩→𝐵;𝐵⟨0⟩→𝐶;𝗋𝖾𝗍𝐶(0)}. Projection gives 𝐵 an offer from 𝐴 before its branch-specific send. A hand-written endpoint that sends 1 immediately omits that offer. If the two selections are deleted from the choreography, projection at 𝐵 must merge a send of 1 with a send of 0, and the partial merge is undefined. This is the deliberately faulty endpoint collection used by the executable comparison.
If the parameter local language has local preservation, choreography typing is preserved by a choreography step. If it additionally has Boolean inversion and local progress, every closed well-typed choreography is a value or can take a choreography step. Hence a sound local type system induces the relative soundness corollary.
Referenced from 2 locations
Proof of Theorem 59.7 — Pirouette relative type soundness
Proof. For preservation, induct on the choreography step. Local computation uses local preservation; communication uses the local substitution law and the typing substitution lemma; selection preserves the chosen continuation; an out-of-order step rebuilds the surrounding construct because its block-set side condition keeps the active locations independent. For progress, inspect the leading construct. Local progress advances a nonvalue expression, Boolean inversion chooses a conditional branch, and closedness rules out a free procedure variable. The communication and selection forms synchronize when their local data are values. ◻
The source proves the preservation and progress clauses separately before combining them into relative type soundness [HG21].
Endpoint projection maps a choreography to one control program per nonempty finite set 𝐿 of locations. A participant not deciding a branch projects the alternatives with a partial merge; merge retains their common behavior and combines compatible offers. Incompatible hand-written endpoints such as two observers expecting different unannounced branches have no common merge and are rejected. Write [[𝐶]]𝐿 ↓ when every required endpoint merge is defined, [[𝐶]]𝐿 ↑ for undefinedness, and ≤𝗇𝖽 for the report’s preorder that permits extra local nondeterminism. For a choreography 𝐶, write 𝖥𝖢𝖵(𝐶) for its free choreography variables and 𝖥𝖫𝖵𝑝(𝐶) for the free local expression variables at location 𝑝, with the binders in definition 59.6 removing the variables they bind. Define 𝖯𝗂𝗋𝖤𝗑𝗉𝗋𝖢𝗅𝗈𝗌𝖾𝖽(𝐶)⟺𝖥𝖢𝖵(𝐶)=∅ ∧ ∀𝑝.𝖥𝖫𝖵𝑝(𝐶)=∅. In the choreography typing judgment Γ;Δ ⊢𝐶 :𝜏, Γ assigns types to local expression variables at each location and Δ assigns types to choreography variables. Thus ⋅; ⋅ ⊢𝐶 :𝜏 is the closed instance of that judgment; the separate predicate above records syntactic closedness, which endpoint projection preserves across reduction.
For the technical-report calculus:
Local completeness is a disjunction. A choreography step either induces the corresponding local control step at ℓ, or [[𝑅]]ℓ ↑ and [[𝐶2]]ℓ ≤𝗇𝖽[[𝐶1]]ℓ. Global completeness additionally assumes every location named in the step result 𝑅 belongs to 𝐿, and retains its ≤𝗇𝖽 conclusion.
Local soundness lowers the projected communication, selection, local, and synchronization cases. The synchronization case already assumes LN(𝐶1)⊆𝐿and𝐿≠∅. Global soundness uses the same coverage premise. If the projected system takes a step to Π, it produces 𝐶2,𝑅 with [[𝐶2]]𝐿 ↓, [[𝐶2]]𝐿 ≤𝗇𝖽Π, [[𝑅]] =𝐿, and 𝐶1 ⟹𝐶2. No additional endpoint-equivalence conclusion is asserted.
Assume choreography typing has progress and preservation, 𝐿 ≠∅, LN(𝐶) ⊆𝐿, and 𝖯𝗂𝗋𝖤𝗑𝗉𝗋𝖢𝗅𝗈𝗌𝖾𝖽(𝐶), with ⋅; ⋅ ⊢𝐶 :𝜏. If EPP𝐿(𝐶) has reached Π, then either every location in Π contains a value or Π takes a system step.
Referenced from 4 locations
Proof of Theorem 59.8 — Pirouette projection card
Imported proof. The technical report proves local completeness and global completeness by induction on the choreography step, and proves soundness by induction on the projected-system step. Its deadlock-freedom argument combines that soundness simulation with choreography progress and preservation. The third clause retains all three boundary premises of the last Coq theorem: the location list is nonempty, every location in 𝐶 occurs in that list, and 𝖯𝗂𝗋𝖤𝗑𝗉𝗋𝖢𝗅𝗈𝗌𝖾𝖽(𝐶) holds. The result is deadlock freedom for systems reached from well-typed projection. It is not asynchronous queue liveness, arbitrary endpoint equivalence, failure recovery, or correctness of a network runtime. The exact theorem signatures and their substantial inductive proof development are imported from Hirsch and Garg’s endpoint projection metatheory [HG21]. ◻
★★★ Write a three-location choreography in which one location chooses a Boolean branch and informs a second by selection. In both branches the informed location sends branch-specific data to a third location. Project all three endpoints. Then delete the selection and show exactly which merge is undefined at the sender.
Referenced from 3 locations
Chapter seminar
The Kappa corpus at artifacts/ch59-mpst-choreography/ represents the sale protocol as a finite global AST, projects all three roles, and replays its sender-tagged FIFO transitions. A separate choreography AST projects control programs, regenerates them after a source change, and rejects missing branch knowledge. These are executable finite models of the two worked examples, not mechanizations of either theorem card or executions of the pinned Coq developments.
Suggested first pass.
Do exercise 59.4, exercise 59.5 before exercise 59.7.
★★☆ Derive all three projections of 𝐺𝗌𝖺𝗅𝖾 from the projection equations. At the outer bank choice, show the exact equality needed by Plain-Branch. Explain separately why linearity is vacuous rather than claiming that projectability establishes it.
Referenced from 4 locations
★★☆ For the accepting trace in section 59.2, prove by induction over its eight actions that each queue contains either no item or the unique sender-tagged item prescribed by the current outer local action. Identify the induction step that would fail if 𝑘2 =𝑘4.
Referenced from 4 locations
★★☆ Compare the MPST subject-reduction card with Pirouette global soundness. Name one premise and one conclusion that occur only on each side; then explain why neither theorem implies the other.
Referenced from 3 locations
★★★ Practical project.mpst-choreography-audit Run the corpus. Change one branch-specific value in the choreography and regenerate all endpoints. Then change only the corresponding hand-written sender endpoint and explain why comparison with the regenerated projection fails. Finally delete the informing selection and identify the undefined merge.
Referenced from 5 locations