paperbot · PL 论文追踪

全部论文 待读 收藏

P2 A Dependent Type Theory for Meta-programming with Intensional Analysis

支持内涵分析的元编程依赖类型理论
POPL 9(POPL)2025匹配度 3/10 · 论文属于纯类型论与元编程基础,涉及开放代码分析与类型安全代码生成,与静态分析/形式化基础有间接关联;但未涉及 LLM/Agent、ML 系统、浮点程序分析或贝叶斯程序分析,也不在用户核心研究交叉点上。引用 5 inbox
Jason Z. S. Hu, Brigitte Pientka
crossref: 2026-09-10

AI 速览

一句话:提出 DeLaM 分层模态依赖类型理论,支持开放代码的引用、组合、递归分析与类型安全代码生成。

论文提出 DeLaM,一种面向 Martin-Löf 类型论(MLTT)元编程的依赖分层模态类型理论。DeLaM 分为三层:无计算的 MLTT 静态语法对象层、带计算行为的纯 MLTT 层,以及支持引用开放代码、组合和递归分析的元编程层;代码对象也可在元编程层执行。随层级上升,表达力严格增强:代码对象仅描述静态语法,而计算发生在 MLTT 层与元编程层。该工作为同时支持类型安全代码生成与代码分析的元编程提供依赖类型基础,并用 Kripke 逻辑关系证明弱规范化与可转换性判定性。

问题
如何在 Martin-Löf 类型论中为元编程提供统一的依赖类型基础,使其既能类型安全地生成代码,又能对开放代码进行内涵分析与递归分析。
方法
提出 DeLaM 分层模态依赖类型理论,将静态语法对象、带计算的 MLTT 与元编程层分离,支持开放代码的引用、组合、递归分析和执行,并通过 Kripke 逻辑关系建立元理论。
评估
论文以理论证明为评估:证明 DeLaM 的弱规范化性以及可转换性(convertibility)的可判定性。
原文摘要(Abstract)

In this paper, we introduce DeLaM , a dependent layered modal type theory which enables meta-programming in Martin-Löf type theory (MLTT) with recursion principles on open code. DeLaM includes three layers: the layer of static syntax objects of MLTT without any computation, the layer of pure MLTT with the computational behaviors, and the meta-programming layer, which extends MLTT with support for quoting an open MLTT code object, composing, and analyzing open code using recursion. We can also execute a code object at the meta-programming layer. The expressive power strictly increases as we move up in a given layer. In particular, while code objects only describe static syntax, we allow computation at the MLTT and meta-programming layer. As a result, DeLaM provides a dependently typed foundation for meta-programming that supports both type-safe code generation and code analysis. We prove the weak normalization of DeLaM and the decidability of convertibility using Kripke logical relations.

链接与引用

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

BibTeX
@article{HuP25,
  title = {A Dependent Type Theory for Meta-programming with Intensional Analysis},
  author = {Jason Z. S. Hu and Brigitte Pientka},
  journal = {Proceedings of the ACM on Programming Languages},
  volume = {9},
  number = {POPL},
  year = {2025},
  doi = {10.1145/3704851}
}