paperbot · PL 论文追踪

全部论文 待读 收藏

P2 Recurrence extraction for functional programs through call-by-push-value

通过 Call-by-Push-Value 为函数式程序提取递推式
POPL 4(POPL)2019匹配度 3/10 · 论文属于程序分析与形式语义,关注函数式程序运行时间递推式的自动提取,与用户画像中的PL/程序分析背景有较弱关联;但未涉及LLM/Agent、浮点程序分析或贝叶斯程序分析,与当前核心交叉方向匹配度低。引用 20 inbox
G. A. Kavvos, Edward Morehouse, Daniel R. Licata, Norman Danner
crossref: 2026-09-10

AI 速览

一句话:以 Call-by-Push-Value 为中间语言,从高阶递归函数式程序自动提取运行时间递推式,并给出指称代价语义。

程序复杂度分析常通过提取并求解反映运行时间的递推式来完成。本文提出一种从高阶递归函数式程序语法中自动提取递推式的方法:所得递推式本身是带递归的 call-by-name 语言程序,可按输入规模显式计算运行时间。为统一处理 call-by-name 与 call-by-value 两种求值策略,作者采用 Call-by-Push-Value(CBPV)作为中间语言,使提取过程不依赖具体求值顺序。最后,论文用域理论为提取出的递推式建立指称代价语义,为递推式的意义与推理提供语义基础。

问题
如何从高阶递归函数式程序中自动提取以输入规模表示运行时间的递推式,并统一覆盖 call-by-name 与 call-by-value 求值策略。
方法
以 Call-by-Push-Value 作为中间语言,从程序语法提取递推式;递推式用带递归的 call-by-name 语言书写,并用域理论给出指称代价语义。
评估
评估以理论构建为主:说明该方法可统一覆盖两种求值策略,并为提取出的递推式发展域理论指称代价语义;摘要未报告实现或实验评估。
原文摘要(Abstract)

The main way of analysing the complexity of a program is that of extracting and solving a recurrence that expresses its running time in terms of the size of its input. We develop a method that automatically extracts such recurrences from the syntax of higher-order recursive functional programs. The resulting recurrences, which are programs in a call-by-name language with recursion, explicitly compute the running time in terms of the size of the input. In order to achieve this in a uniform way that covers both call-by-name and call-by-value evaluation strategies, we use Call-by-Push-Value (CBPV) as an intermediate language. Finally, we use domain theory to develop a denotational cost semantics for the resulting recurrences.

链接与引用

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

BibTeX
@article{paperbot573,
  title = {Recurrence extraction for functional programs through call-by-push-value},
  author = {G. A. Kavvos and Edward Morehouse and Daniel R. Licata and Norman Danner},
  journal = {Proceedings of the ACM on Programming Languages},
  volume = {4},
  number = {POPL},
  year = {2019},
  doi = {10.1145/3371083}
}