paperbot · PL 论文追踪

全部论文 待读 收藏

P2 Exact Recursive Probabilistic Programming

精确递归概率编程
OOPSLA 7(OOPSLA1)2023匹配度 4/10 · 论文属于概率编程与类型系统方向,讨论递归数据上的精确推断,与用户关注的贝叶斯程序分析仅有间接关联;它不涉及 ML/Agent 程序的静态分析,也没有 LLM/Agent 与形式化验证的交叉。引用 12 inbox
David Chiang, Colin McDonald, Chung-chieh Shan
crossref: 2026-09-10

AI 速览

一句话:提出一种概率编程语言,可自然表达递归数据上的递归,并通过类型保证的程序变换实现精确推断。

概率编程便于模块化地描述概率分布,但现有语言无法对递归数据上的递归调用进行精确推断,迫使程序员手工实现许多应用。本文提出一种概率编程语言,可自然表达多种递归,并执行精确推断。其核心是用与去函数化和再函数化相关的程序变换消除递归数据类型;线性类型系统保证变换正确,且若存在可行变换序列,贪心算法保证找到。实例上,概率下推自动机及其泛化易于表达,其多项式时间解析算法可自动导出。

问题
现有概率编程语言无法对递归数据上的递归调用做精确推断,导致许多应用需手工编码。
方法
设计支持广泛递归的概率语言,用以去函数化/再函数化相关的程序变换消除递归数据类型,并用线性类型系统保证变换正确、贪心算法选择变换。
评估
以概率下推自动机及其泛化为例,展示可自然表达并自动导出多项式时间解析算法。
原文摘要(Abstract)

Recursive calls over recursive data are useful for generating probability distributions, and probabilistic programming allows computations over these distributions to be expressed in a modular and intuitive way. Exact inference is also useful, but unfortunately, existing probabilistic programming languages do not perform exact inference on recursive calls over recursive data, forcing programmers to code many applications manually. We introduce a probabilistic language in which a wide variety of recursion can be expressed naturally, and inference carried out exactly. For instance, probabilistic pushdown automata and their generalizations are easy to express, and polynomial-time parsing algorithms for them are derived automatically. We eliminate recursive data types using program transformations related to defunctionalization and refunctionalization. These transformations are assured correct by a linear type system, and a successful choice of transformations, if there is one, is guaranteed to be found by a greedy algorithm.

链接与引用

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

BibTeX
@article{paperbot2016,
  title = {Exact Recursive Probabilistic Programming},
  author = {David Chiang and Colin McDonald and Chung-chieh Shan},
  journal = {Proceedings of the ACM on Programming Languages},
  volume = {7},
  number = {OOPSLA1},
  year = {2023},
  doi = {10.1145/3586050}
}