paperbot · PL 论文追踪

全部论文 待读 收藏

P1 Affine Monads and Lazy Structures for Bayesian Programming

用于贝叶斯编程的仿射单子与惰性结构
POPL 7(POPL)2023匹配度 5/10 · 论文属于贝叶斯/概率编程语言与单子语义,和画像中的“贝叶斯程序分析”方向有理论关联,且提供了 Haskell 库实现;但它不涉及静态分析、LLM/Agent 或浮点程序分析,与当前 PL↔AI 主线交叉较少。引用 12 inbox
Swaraj Dash, Younesse Kaddar, Hugo Paquet, Sam Staton
crossref: 2026-09-10

AI 速览

一句话:提出用于贝叶斯编程的仿射概率单子与惰性结构语义,给出适配惰性的推断方法及 Haskell 库 LazyPPL。

论文研究如何用流和惰性数据结构自然地表达无限维贝叶斯方法,如 Poisson、Gaussian、jump、Dirichlet 和 Beta 过程。关键语义思想受合成概率论启发:区分两个单子——支持惰性的仿射概率单子(T(1)≅1)和不支持惰性的交换非仿射测度单子;这一区分对可判定性很重要,并可在 quasi-Borel 空间模型中实现。为进行贝叶斯推断,作者提出专门适配惰性的新推断方法,并借助 Metropolis-Hastings-Green 方法证明其正确性。理论发展实现为 Haskell 库 LazyPPL,展示了流与惰性结构在无限维贝叶斯编程中的实用性。

问题
如何为无限维贝叶斯过程(如 Gaussian、Dirichlet 过程)提供支持流与惰性数据结构的概率编程语义与推断方法。
方法
区分支持惰性的仿射概率单子与非仿射测度单子,在 quasi-Borel 空间中建模,并设计适配惰性的 MCMC 推断方法。
评估
通过基于 Metropolis-Hastings-Green 方法的正确性证明,并实现 Haskell 库 LazyPPL 来展示该方法的可行性。
原文摘要(Abstract)

We show that streams and lazy data structures are a natural idiom for programming with infinite-dimensional Bayesian methods such as Poisson processes, Gaussian processes, jump processes, Dirichlet processes, and Beta processes. The crucial semantic idea, inspired by developments in synthetic probability theory, is to work with two separate monads: an affine monad of probability, which supports laziness, and a commutative, non-affine monad of measures, which does not. (Affine means that T (1)≅ 1.) We show that the separation is important from a decidability perspective, and that the recent model of quasi-Borel spaces supports these two monads. To perform Bayesian inference with these examples, we introduce new inference methods that are specially adapted to laziness; they are proven correct by reference to the Metropolis-Hastings-Green method. Our theoretical development is implemented as a Haskell library, LazyPPL.

链接与引用

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

BibTeX
@article{paperbot2047,
  title = {Affine Monads and Lazy Structures for Bayesian Programming},
  author = {Swaraj Dash and Younesse Kaddar and Hugo Paquet and Sam Staton},
  journal = {Proceedings of the ACM on Programming Languages},
  volume = {7},
  number = {POPL},
  year = {2023},
  doi = {10.1145/3571239}
}