paperbot · PL 论文追踪

全部论文 待读 收藏

P2 Decidable subtyping for path dependent types

路径依赖类型的可判定子类型
POPL 4(POPL)2019匹配度 2/10 · 该论文属于类型系统与形式化验证方向,但核心是可判定子类型与机器验证证明,未涉及 LLM/Agent、静态分析工具、浮点程序分析或贝叶斯程序分析,与用户当前“AI 与 PL 交叉”的研究画像没有直接匹配。引用 13 inbox
Julian Mackay, Alex Potanin, Jonathan Aldrich, Lindsay Groves
crossref: 2026-09-10

AI 速览

一句话:为 Wyvern 定义两种路径依赖类型变体,实现可判定类型检查并给出机器验证证明。

路径依赖类型是 Scala 等语言中极具表达力的特性,可建模有界多态、名义子类型以及一等模块。已有工作证明了路径依赖类型在交类型和递归类型下的可靠性,但类型检查仍不可判定,这给依赖类型检查器结果的程序员带来困扰。本文针对面向对象语言 Wyvern(含路径依赖类型、递归类型与一等模块)定义了两个类型检查可判定的变体,并给出机器验证的可判定性证明。尽管引入了限制,这些方法仍能编码 Java 泛型的参数多态以及 Scala 模块系统的许多惯用法。

问题
路径依赖类型表达力强,但在含交类型和递归类型时类型检查仍不可判定,影响依赖类型检查器的编程实践。
方法
在 Wyvern 中定义两个受限变体,使类型检查可判定,并用证明助手给出机器验证的可判定性证明。
评估
通过机器化证明验证两个变体的可判定性,并论证其仍可编码 Java 泛型的参数多态与 Scala 模块系统惯用法。
原文摘要(Abstract)

Path dependent types have long served as an expressive component of the Scala programming language. They allow for the modelling of both bounded polymorphism and a degree of nominal subtyping. Nominality in turn provides the ability to capture first class modules. Thus a single language feature gives rise to a rich array of expressiveness. Recent work has proven path dependent types sound in the presence of both intersection and recursive types, but unfortunately typing remains undecidable, posing problems for programmers who rely on the results of type checkers. The Wyvern programming language is an object oriented language with path dependent types, recursive types and first class modules. In this paper we define two variants of Wyvern that feature decidable typing, along with machine checked proofs of decidability. Despite the restrictions, our approaches retain the ability to encode the parameteric polymorphism of Java generics along with many idioms of the Scala module system.

链接与引用

DOI 原文 · PDF(开放获取) ·

BibTeX
@article{paperbot554,
  title = {Decidable subtyping for path dependent types},
  author = {Julian Mackay and Alex Potanin and Jonathan Aldrich and Lindsay Groves},
  journal = {Proceedings of the ACM on Programming Languages},
  volume = {4},
  number = {POPL},
  year = {2019},
  doi = {10.1145/3371134}
}