The Session Abstract Machine (Extended Version)
本文提出会话抽象机 SAM,利用线性逻辑类型分析实现会话类型进程的机械化执行,可分离协调顺序与并发行为,并证明其对完整 CLL 会话演算的正确性。
2024-01-18 cs.PL
Minimal Session Types for the $π$-calculus (Extended Version)
本文在会话π演算中研究极小会话类型及其极小性结果,通过组合已知结果得到新结论,并开发优化方案且证明转换满足动态正确性。
2024-01-22 cs.PL
Logical Relations for Session-Typed Concurrency
Carnegie Mellon University(卡内基梅隆大学);Illinois Institute of Technology(伊利诺伊理工学院)
本文提出一种适用于一般递归会话类型的逻辑关系,用于证明进程的非干扰性,解决了非终止和并发带来的挑战,并展示了逻辑等价性在弱双射下的闭包性质。
2026-04-14 cs.PL
On the Monitorability of Session Types, in Theory and Practice (Extended Version)
在并发和分布式系统中,软件组件应该根据预定的协议和API进行通信,如果组件不遵守这些协议和API,系统的可靠性就会受到影响。此外,隔离和修复协议/API错误可能非常困难。已经提出了许多方法来检查通信系统的正确性,从编译时到运行时验证;在这些方法中,会话类型已被应用于静态类型检查和运行时监控。这项工作需要一个新的眼光在运行时验证的通信系统使用会话类型,在理论和实践中。在理论方面,我们开发了一种新的会话监控过程的形式化模型;通过它,我们制定并证明了会话类型的可监控性的新结果,连接它们的运行时和静态验证-在可靠性方面(即,监视器是否仅标记病态类型的进程)和完整性(即,是否所有类型不正确的进程都可以被监视器标记)。在实践方面,我们表明,我们的监控理论确实是可实现的:建立在我们的正式模型,我们开发了一个Scala工具包自动生成会话监视器。我们的可执行监视器可用于仪器黑盒过程中编写的任何程序设计语言,我们评估我们的方法的可行性与一系列的基准。
2021-05-22 cs.PL
Session Types With Multiple Senders Single Receiver (report version)
本文通过引入存在分支类型扩展了会话类型,以支持同步设置下多发送方单接收方的交互模式,并构建了保证类型安全、无死锁和保真性的类型系统,同时提供新通信类型系统保证动态交错多方会话进展性,最后将Rust多线程原语编码入该系统以验证其表达能力。
2023-10-20 cs.PL
Multiparty Session Types for Safe Runtime Adaptation in an Actor Language (Extended version)
人类的易犯错性,不可预测的操作环境以及硬件设备的异构性正在推动软件能够适应物联网或电信网络的需求。不幸的是,主流程序设计语言不容易允许软件组件通过发现、替换并与不是原始系统设计的一部分的组件通信来感测并响应于其操作环境,同时保持静态正确性保证。特别是,如果在运行时发现新组件,则不能保证其通信行为与现有组件兼容。我们通过使用具有显式连接操作的多方会话类型来解决这个问题,这是一种用于对分布式通信协议建模的类型形式。通过将会话类型与软件组件相关联,发现过程可以检查协议兼容性,并且在需要时正确地替换组件而不会危及安全性。我们提出的设计和实现的EnsembleS,第一个演员为基础的语言与自适应功能和静态会话类型系统,并将其应用到一个案例研究的基础上自适应DNS服务器。我们正式的类型系统的EnsembleS和证明的安全性良好的类型的程序,利用非经典的多方会话类型的最新进展。
2021-05-14 cs.PL
Speak Now: Safe Actor Programming with Multiparty Session Types (Extended Version)
University of Glasgow(格拉斯哥大学);Queen Mary University of London(伦敦大学女王玛丽学院)
Maty是首个支持静态多方会话类型和多会话Actor的编程语言,通过流敏感效果系统和事件驱动编程实现通信安全与系统容错。
2026-03-03 cs.PL
Soft Session Types (Long Version)
我们展示了如何系统的会话类型可以强制执行的所有类型的进程的相互作用是有界的。我们提出的类型系统是基于Lafont的软线性逻辑,并强烈的灵感来自最近的作品会话类型的直觉线性逻辑公式。我们的主要结果是存在的,对于每一个类型化的过程,一个多项式约束的长度上的任何减少序列从它开始,其任何减少的大小。
2012-01-03 cs.LO cs.PL
Synthesising Choreographies from Local Session Types (extended version)
设计和分析多方分布式交互可以通过全局视图(例如基于编排的方法)或通过组成可用的计算实体(例如服务编排)来实现。本文提出了一种类型化系统,它允许在某些条件下,从一组描述端点行为(即本地类型)的本地会话类型中合成编排(即多方全局类型)。
2012-04-11 cs.DC cs.PL
A Session Subtyping Tool (Extended Version)
会话类型正变得越来越流行,并已集成到几种主流程序设计语言中。然而,尽管许多程序设计语言考虑异步FIFO通道通信,但会话类型实现中使用的子类型概念是由Gay和Hole为同步通信定义的。这可能是因为有几个异步会话子类型的概念,这些概念通常是不可判定的,并且直到最近才提出了这些子类型的合理(但不完整)算法特征。但是,异步会话子类型的定义和相关算法背后的理论对于非专家来说不容易理解,这一事实也可能阻止进一步的集成。本文的目的,以及其中提出的工具,是使越来越多的知识机构异步会话子类型更容易访问,从而促进其集成在实际应用中的会话类型。
2021-04-28 cs.FL cs.PL
Statically Verified Refinements for Multiparty Protocols
随着分布式计算在现代变得无处不在,安全的分布式编程是一个公开的挑战。为了解决这个问题,多方会话类型(MPST)为消息传递并发提供了一个类型规则,保证了通信安全属性,如死锁自由。虽然最初MPST集中在通信方面,并采用一个简单的类型系统的通信有效载荷,在现实世界中的通信协议通常包含的有效载荷的约束。我们介绍了改进的多方会话类型(RMPST),MPST的扩展,通过细化类型的数据类型表示数据相关的协议。我们提供了一个RMPST的实现,在一个工具链称为会话 *,使用Scribble,多方协议描述工具链,并针对F*,面向验证的功能程序设计语言。用户可以在Scribble中描述协议,并使用从协议生成的精炼类型的API在F* 中实现端点。然后F* 编译器可以静态地验证细化。此外,我们使用一种新的回调风格的API生成方法,提供静态线性保证与控制反转。我们评估我们的方法与现实世界的例子,并表明,它几乎没有开销相比,一个天真的实现,同时保证从底层理论的安全属性。
2020-09-14 cs.DC cs.PL
Minimal Session Types (Extended Version)
会话类型是验证消息传递程序的一种基于类型的方法。它们已经被作为pi演算和Java等语言的类型系统进行了大量的研究。会话类型指定应通过通道交换什么以及何时交换。会话类型语言的核心是类型和进程中的构造,它们指定协议中的排序。这里我们研究最小会话类型,没有排序的会话类型。这可以说是会话类型的最简单形式。通过依赖于一个核心的进程演算会话和高阶并发(抽象传递),我们证明了每一个进程类型通常(非最小)的会话类型可以编译成一个进程类型与最小的会话类型。这意味着在进程和会话类型中都有顺序结构是多余的;只有进程中的顺序性是必不可少的,因为它可以精确地编码类型中的顺序性。我们的发展从Parrow的工作中汲取灵感,对非类型化过程的行为保持分解。通过铸造Parrow的结果在领域的类型化过程中,我们的结果揭示了一个概念上简单的制定会话类型和一个原则性的途径,会话类型集成到语言中,而无需排序的类型。
2019-06-12 cs.LO cs.PL
Design-by-Contract for Flexible Multiparty Session Protocols -- Extended Version
编排模型支持分布式编程中的构造纠正原则。此外,它们能够根据所需系统行为的全局规范自动生成正确的基于消息的通信模式。在本文中,我们扩展了理论的编排自动机,编排模型的基础上,有限状态自动机,有两个关键功能。首先,我们允许参与者只在编排自动机描述的某些场景中行动。虽然这看起来很自然,但文献中的许多编排方法,特别是编排自动机,禁止这种行为。其次,我们为通信配备了约束可以通信的值的断言,从而实现按契约设计的方法。我们提供了一个工具链,允许利用上述理论为TypeScript Web编程生成API。通过生成的API进行通信的程序通过构造遵循规定的通信模式,并且没有诸如死锁之类的通信错误。
2022-05-13 cs.PL
Session Type Inference in Haskell
我们提出了一个推理系统的一个版本的PI演算在Haskell的会话类型提出的本田等人。会话类型是非常有用的,如果检查通信行为良好。Haskell中的完整会话类型实现首先由Pucella和Tov提出,它是“半自动”的,因为类型表示的手动操作是必要的。我们给出了一个自动的类型推断的会话类型,通过使用一个更抽象的表示的会话类型的基础上的“德Bruijn水平”。我们展示了一个简单SMTP客户端的会话类型推断示例。
2011-10-19 cs.PL
Contrasting Deadlock-Free Session Processes (Extended Version)
本文比较了两种先前未对比的无死锁会话进程类型系统HCP和P,证明超序列设置不改变线性逻辑诱导的进程类别,并建立了二者类别间的联系,为并发静态避免死锁提供新见解。
2025-04-25 cs.PL
Hybrid Multiparty Session Types -- Full Version
多方会话类型(MPST)是分布式消息传递系统的规范和验证框架。系统的通信协议被指定为全局类型,通过端点投影从该全局类型获得局部类型的集合(局部流程实现)。全局类型是整个系统的单一规范实体,由一个完全了解通信协议的设计者指定。另一方面,分布式系统通常根据其组件来描述:不同的设计者负责为每个组件提供子协议。全球协议的模块化规范的问题已在文献中得到解决,但最先进的只集中在双输入/输出兼容性。我们的工作克服了这一限制。我们提出了第一个MPST理论的多方组成的分布式协议规范,是语义保持,允许组成两个或多个组件,并保留完整的MPST表现力。我们引入混合类型描述子协议相互作用,定义了一种新的兼容性关系,明确描述了一种算法组成多个子协议到一个良好的形式的全球类型,并证明组合保持投影,从而保留语义保证,如活性和死锁自由。最后,我们测试我们的工作对现实世界的案例研究,我们顺利地扩展我们的新的兼容性MPST与委托和显式连接。
2023-03-20 cs.PL
Context-Free Session Types for Applied Pi-Calculus
我们提出了一个二进制会话类型系统,使用上下文无关的会话类型的一个版本的应用π演算的阿巴迪等。al.,其中只能发送基本项、常量和通道。会话类型类似于BPA的过程术语,我们使用互模拟等价来表征类型等价。我们提出了一个定义在类型等价类上的约束类型系统,其中类型等价被构建到类型系统中。这两种类型的系统满足一般的健全性属性,这是建立一个呼吁通用会话类型系统的PSI演算。
2018-08-27 cs.LO cs.PL
Refinements of Futures Past: Higher-Order Specification with Implicit Refinement Types (Extended Version)
细化类型用支持自动验证的断言来修饰类型。与断言一样,细化仅限于范围内的绑定,因此不能表达更高阶的规范。Ghost变量规避了这一限制,但使用起来极其乏味,因为程序员必须在所有调用站点推测并解释它们的值。我们引入了隐式细化类型,它将幽灵变量转换为隐式的对和函数类型,让细化类型检查器在编译时自动合成它们的值。隐式细化类型进一步利用细化类型信息,允许它们用作轻量级验证工具,而不仅仅是作为自动化编程任务的技术。我们评估的实用程序隐式细化类型,显示它们如何使模块化的规范和自动验证的各种高阶的例子,包括有状态的协议,访问控制,和资源使用。
2021-05-05 cs.PL
Higher-order Context-free Session Types in System F
我们提出了一个扩展的系统F与高阶上下文无关的会话类型。功能类型与会话类型的混合已经被证明是类型等价形式化的一个挑战:而功能类型等价通常是基于规则的,会话类型等价通常遵循基于互模拟的语义方法。我们提出了一个统一的方法,处理功能和会话类型的等价性在一起。我们提出了三个概念的类型等价:基于语法规则的版本,语义bisimulation-based版本,和算法版本减少到简单的语法的互模拟的问题。我们证明了这三个概念相吻合,并得出一个可判定性结果的类型等价问题的高阶上下文无关的会话类型。
2022-03-24 cs.FL cs.LO cs.PL
Formalizing and Checking Thread Refinement for Data-Race-Free Execution Models (Extended Version)
当优化并发程序中的线程时(手动或由编译器完成),必须保证结果线程是原始线程的细化。大多数有效优化的理论都是根据程序代码上的有效语法转换或线程执行轨迹上的有效转换来制定的。我们提出了一个新的理论制定,而不是在同步操作的线程的状态,并表明它提供了几个优点:它支持更多的优化,并导致更有效和更简单的程序细化检查。我们开发的SC-DRF执行模型(使用锁同步)的理论,并表明其在编译器测试设置中的应用程序导致大的性能改善。
2015-10-24 cs.PL
Three Subtyping Algorithms for Binary Session Types and their Complexity Analyses
本文分析同步二元会话类型子类型化的三种算法:归纳树搜索算法及其优化版本仍为指数复杂度,并基于 XYZW-simulation 提出新的二次图搜索算法。
2024-04-08 cs.PL
Refinement Kinds: Type-safe Programming with Practical Type-level Computation (Extended Version)
这项工作介绍了新的概念,细化,我们开发的上下文中明确多态ML类语言与类型级计算。正如类型精化通过类型域中的值上的谓词所表达的理解原则来嵌入丰富的规范一样,种类精化通过种类域中的类型上的谓词来提供丰富的种类规范。通过利用我们强大的细化类规则,我们语言中的类型不仅用于静态地对程序表达式和值进行分类,而且还可以方便地作为树状数据结构进行操作,并通过对此类结构的逻辑约束来细化它们的类。值得注意的是,由此产生的类型和分类规则允许强大的类型反射,ad-hoc多态和类型元编程,这些通常在现代软件开发中发现,但通常不能在通用语言中以类型安全的方式表达。我们通过建立类型安全的标准元理论结果,并通过一个原型实现的一种检查器,类型检查器和解释器,我们的语言,验证我们的方法在形式上和实用。
2019-08-01 cs.PL
Implementing Linking in Multiparty Sessions (Extended Abstract)
在当今互联网时代,面向服务的编程(SOP)的快速增长是显而易见的,处理通信在SOP中至关重要。会话类型是一种形式主义,被提出来指定通信进程之间的交互。本质上,一个会话类型系统是一种类型系统,它被设计用来强制(通过类型检查)所涉及的进程根据指定为会话类型的选定协议进行通信。众所周知,线性逻辑在会话类型的研究中起着举足轻重的作用。例如,线性逻辑中的各种推理规则可以被解释为构造通道的方式(由通信进程用来发送/接收消息)。一个特别有趣的例子是线性逻辑中的切割规则,它可以被解释为连接两个匹配通道的末端以形成一个新通道的方法。这种形式的通道构造通常被称为链接或(双向)转发。我们将经典线性逻辑推广为经典线性多角色逻辑(LMRL),其中前者可以看作是后者只涉及两个角色的特殊情况。在LMRL中,有一个涉及多个序列(而不是恰好两个)的切割规则,我们称之为多方切割(mp-cut)。我们还制定了一个新的多方会话类型系统直接基于LMRL。在实现它时,我们需要找到一种对应于mp-cut的连接多个通道的方法。在本文中,我们描述了一种实现链接多方会话的设置共享内存。我们还描述了两个新的概念,双向链接与剩余和三路链接,这只能制定在设置多党会议。值得注意的是,二进制会话的链接可以被认为是为多方会话实现的特别优化的版本。
2018-10-29 cs.PL
Model Sketching by Abstraction Refinement for Lifted Model Checking (Extended Version)
在这项工作中,我们展示了如何使用验证和分析技术的模型家庭(软件产品线)的数字功能提供了一个有趣的技术,合成完整的模型从草图(即\具有孔的部分模型)。特别是,我们提出了一种方法,用于合成Promela模型草图使用特定于变量的抽象细化解除(基于家庭)模型检验。
2021-12-21 cs.LO cs.PL
Types and Terms Translated: Unrestricted Resources in Encoding Functions as Processes (Extended Version)
类型保持翻译是研究核心程序演算的有效工具。在本文中,我们开发了一个新的类型化翻译,连接顺序和并发演算,它是由类型系统控制资源消耗。我们的主要贡献是源语言,一个新的资源$λ$ -微积分与非确定性和失败,被称为\ulamf。在\ulamf中,资源被分为线性和不受限制的;故障是明确的,并且由这种区别引起。我们定义了一个基于交集类型的类型系统来控制资源和易失败的计算。目标语言是\spi,一种现有的会话类型的$π$演算,它是由线性逻辑和会话类型之间的Curry-Howard对应关系产生的。我们的类型化翻译包含了我们以前的工作;有趣的是,它将\lamrfailunres中的无限制资源视为\spi中的客户端-服务器会话行为。
2022-05-30 cs.LO cs.PL
Variability Abstraction and Refinement for Game-based Lifted Model Checking of full CTL (Extended Version)
可变性模型允许为各种配置有效地构建许多自定义模型变体。针对可变性模型的提升模型检验能够通过利用变体之间的相似性在单次运行中同时验证其所有变体。提升模型检验的计算成本仍然很大程度上取决于变量的数量(配置空间的大小),这通常是巨大的。在提升模型检验中,对抗配置空间爆炸问题的最有前途的方法之一是可变性抽象。在这项工作中,我们定义了一种新的基于游戏的方法,用于特定于变量的抽象和改进,用于对完整CTL进行提升模型检验,并在3值语义上进行解释。我们提出了一个直接的算法来解决一个3值(抽象)提升模型检验游戏。针对抽象变异模型的模型检验结果不确定的情况,提出了精化的概念,消除了不确定结果。这提供了一个迭代的增量可变性特定的抽象和细化框架,其中细化仅应用于存在不确定结果的情况,并且重用来自先前迭代的确定结果。
2019-02-14 cs.PL cs.SE
Towards deductive verification of MPI programs against session types
消息传递接口(MPI)是开发并行应用程序的事实标准消息传递基础设施。在第一版库规范发布20年后,基于MPI的应用程序现在通常部署在超级计算机和集群计算机上。这些用C或Fortran编写的应用程序表现出复杂的消息传递行为,因此很难静态验证重要属性,例如不存在死锁。我们的工作建立在会话类型,一个理论描述协议,在这方面提供正确的建设保证。我们注释MPI原语和C代码与会话类型的合同,写在语言的软件验证C。然后用软件验证器检查带注释的代码的正确性。我们提出了初步的结果,并讨论了未来的挑战,验证现实的MPI程序符合会话类型。
2013-12-10 cs.DC cs.LO cs.PL
Contextual Refinement of Higher-Order Concurrent Probabilistic Programs (Extended Version)
Aarhus University(奥胡斯大学);New York University(纽约大学);Amazon Web Services(亚马逊云科技)
本文提出Foxtrot,首个用于证明高阶并发概率程序上下文细化的高阶分离逻辑,结合了并发推理原理与概率推理原理,展示了其在对抗性von Neumann硬币和Sodium加密库中的应用。
2026-04-27 cs.LO cs.PL
Sums of Uncertainty: Refinements Go Gradual
静态类型函数式语言的一个长期存在的缺点是类型检查不能排除模式匹配失败(运行时匹配异常)。细化类型区分不同的数据类型值;如果用细化注释的程序通过了类型检查,那么模式匹配失败就变得不可能了。不幸的是,细化是类型的单一属性,这加剧了向非平凡程序添加细化类型的难度。渐进式类型化探索了如何在静态类型化和动态类型化之间渐进地移动。我们开发了一个类型系统的逐步总和,结合细化与不精确。然后,我们开发了一个双向版本的类型系统,它排除了过度的不精确性,并给出了一个类型导向的翻译到一个目标语言显式转换。我们证明了静态子语言不能有匹配失败,一个良好类型的程序仍然是良好类型的,如果它的类型注释不太精确,并使注释不太精确的原因目标程序失败后。其中一些结果与Siek et al.(2015)给出的渐进分型标准相对应。
2020-09-19 cs.PL
Specification and Inference of Trace Refinement Relations
现代软件是不断变化的。研究人员和实践者越来越意识到,如果验证工具通过组合和跨程序版本的分析来拥抱变化,那么它们可能会产生影响。关于程序之间相似性和差异性的推理可以追溯到Benton,他引入了基于状态的细化关系,Yang和其他人扩展了这种关系。然而,据我们所知,细化关系还没有被探索的痕迹。我们提出了一种新颖的理论,允许人们通过使用我们所谓的跟踪细化关系来对两个不同程序的片段如何随着时间的推移而表现出的相似性/差异进行组合推理。我们采取反应式的程序,并发现Kleene代数与测试(KAT)[Kozen]是一个自然的选择来描述的痕迹,因为它允许代数推理,并已内置的组成。我们的理论包括两个步骤的语义抽象从程序到KAT,然后我们的跟踪细化关系相关的行为(i)分类程序行为到跟踪类通过KAT相交和(ii)相关的原子事件/条件跨程序与KAT假设。接下来,我们描述一种合成算法,该合成算法通过探索两个程序的轨迹的子分区,迭代地将它们抽象为KAT表达式,通过自定义编辑距离算法发现关系,并应用上述策略(i)和(ii),来迭代地构建两个程序之间的轨迹细化关系。我们已经实现了这个算法{ \sc knotical},第一个工具能够合成跟踪细化关系。它使用InterProc和SymKAT在Ocaml中从头开始构建。我们已经证明,有用的关系,可以有效地生成一套37个基准,包括不断变化的数组程序,系统代码和Web服务器…
2019-03-18 cs.PL