paperbot · PL 论文追踪

全部论文 待读 收藏

P2 A specification for dependent types in Haskell

Haskell 中依赖类型的规范
ICFP 1(ICFP)2017匹配度 2/10 · 该论文属于依赖类型与Haskell核心语义/Coq形式化方向,与用户关注的PL与AI/LLM交叉、Agentic程序静态分析、浮点程序分析或贝叶斯程序分析没有直接关系。虽涉及形式化验证,但并非利用LLM/Agent改进验证,也不是面向机器学习系统的分析。引用 61 inbox
Stephanie Weirich, Antoine Voizard, Pedro Henrique Azevedo de Amorim, Richard A. Eisenberg
dblp: 2026-09-10crossref: 2026-09-10

AI 速览

一句话:为 Dependent Haskell 提出核心语义与显式类型语言,并在 Coq 中形式化类型安全及相关定理。

论文为在 Haskell 中加入完整谱系依赖类型(Dependent Haskell)提出核心语义规范。该语义包含两个相关语言:一个带非终止、无关参数和等式抽象的 Curry 风格依赖类型语言,以及受 GHC Core FC 启发、适合 GHC 实现的显式类型类似物。作者在 Coq 证明助手中形式化类型安全及连接两种语言的关键定理。因与 Haskell 向后兼容,类型安全在非终止计算存在时仍成立;但与 Coq、Agda、Idris 不同,非终止使 Haskell 项语言不对应一致逻辑。

问题
如何为 Haskell 的完整谱系依赖类型扩展提供核心语义,并保证其类型安全、与 Haskell 向后兼容且适配 GHC 的非终止计算。
方法
设计 Curry 风格依赖类型语言及其显式类型类似物,用 Coq 形式化类型安全与两个语言间的关系定理。
评估
通过 Coq 机器化证明验证主要定理;结果表明类型安全在非终止下成立,且显式类型语言适合 GHC 实现。
原文摘要(Abstract)

We propose a core semantics for Dependent Haskell, an extension of Haskell with full-spectrum dependent types. Our semantics consists of two related languages. The first is a Curry-style dependently-typed language with nontermination, irrelevant arguments, and equality abstraction. The second, inspired by the Glasgow Haskell Compiler's core language FC, is its explicitly-typed analogue, suitable for implementation in GHC. All of our results---chiefly, type safety, along with theorems that relate these two languages---have been formalized using the Coq proof assistant. Because our work is backwards compatible with Haskell, our type safety proof holds in the presence of nonterminating computation. However, unlike other full-spectrum dependently-typed languages, such as Coq, Agda or Idris, because of this nontermination, Haskell's term language does not correspond to a consistent logic.

链接与引用

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

BibTeX
@article{WeirichVAE17,
  title = {A specification for dependent types in Haskell},
  author = {Stephanie Weirich and Antoine Voizard and Pedro Henrique Azevedo de Amorim and Richard A. Eisenberg},
  journal = {Proceedings of the ACM on Programming Languages},
  volume = {1},
  number = {ICFP},
  year = {2017},
  doi = {10.1145/3110275}
}