一句话:提出合成式多方会话类型方法,直接以全局协议LTS检查进程,无需投影与局部类型,兼具表达力与组合性。
多方会话类型(MPST)为验证并发系统的安全性与活性提供了严格基础,但现有方法面临两难:基于投影的经典技术具有组合性却表达力有限,而依赖非组合的全局模型检测的技术表达力更强却扩展性差。本文提出“合成式”(synthetic)方法,其核心是一个直接针对全局协议规约验证各进程的类型系统,该规约一般表示为标记迁移系统(LTS),全局类型仅是其特例,从而避免引入中间局部类型和投影。作者证明该类型系统虽概念上更简单,却能处理此前组合式技术无法覆盖的一系列挑战性协议基准,并进一步推广至任何“行为良好”的LTS规约,支持标准全局类型语法无法表达的协议。整个框架的定理与大量示例已在Agda中形式化并机器验证,且实现了VS Code扩展原型。
Multiparty session types (MPST) provide a rigorous foundation for verifying the safety and liveness of concurrent systems. However, existing approaches often force a difficult trade-off: classical, projection-based techniques are compositional but limited in expressiveness, while more recent techniques achieve higher expressiveness by relying on non-compositional, whole-system model checking, which scales poorly. This paper introduces a new approach to MPST that delivers both expressiveness and compositionality, called the synthetic approach. Our key innovation is a type system that verifies each process directly against a global protocol specification, represented as a labelled transition system (LTS) in general, with global types as a special case. This approach uniquely avoids the need for intermediate local types and projection. We demonstrate that our approach, while conceptually simpler, supports a benchmark of challenging protocols that were previously beyond the reach of compositional techniques in the MPST literature. We generalise our type system, showing that it can validate processes against any specification that constitutes a “well-behaved” LTS, supporting protocols not expressible with the standard global type syntax. The entire framework, including all theorems and many examples, has been formalised and mechanised in Agda, and we have developed a prototype implementation as an extension to VS Code.
DOI 原文 · arXiv · PDF(开放获取) · DBLP
@article{abs-2511-22692,
title = {A Synthetic Reconstruction of Multiparty Session Types},
author = {David Castro-Perez and Francisco Ferreira and Sung-Shik Jongmans},
journal = {Proceedings of the ACM on Programming Languages},
volume = {10},
number = {POPL},
year = {2026},
doi = {10.1145/3776692}
}