paperbot · PL 论文追踪

全部论文 待读 收藏

P2 Commuting Conversions and Join Points for Call-by-Push-Value

Call-by-Push-Value 的交换转换与 Join Points
OOPSLA 10(OOPSLA1)2026匹配度 2/10 · 该论文属于纯 PL 形式语义与编译器 IR 优化研究,关注 CBPV 的交换转换、A-规范化与 join point,并给出 Lean 机械化证明;但未涉及用户当前核心方向中的静态分析、LLM/Agent、浮点程序分析或贝叶斯程序分析。它与形式化方法/编译器 IR 有弱关联,但距离研究画像核心较远。引用 0 inbox
Jonathan Chan, Madi Gudin, Annabel Levy, Stephanie Weirich
crossref: 2026-09-10

AI 速览

一句话:为 CBPV 识别交换转换,定义 CCNF 并给出基于 A-规范化的单遍翻译,用 join point 避免代码复制并证明求值等价。

本文研究 Levy 的 call-by-push-value(CBPV)语言中的交换转换(commuting conversions)。CBPV 通过区分值和计算并显式指定执行顺序,可同时包含 call-by-name 与 call-by-value,并适合作为编译器 IR;其替换求值语义支持组合式推理,βη-等价已用于证明编译器优化,但不能验证 A-规范化等编译 pass 所需的交换转换。作者识别出 CBPV 的交换转换,定义交换转换范式(CCNF),给出基于 A-规范化的单遍翻译,并借鉴 Maurer 等人的显式 join point 构造避免代码复制。作者证明良类型翻译后程序求值结果不变,所有结果在 Lean 4 中机器化验证。

问题
CBPV 中的 βη-等价不能验证 A-规范化等编译优化所需的交换转换,因此需要为 CBPV 明确交换转换并建立保持求值行为的变换与范式。
方法
识别 CBPV 的交换转换,定义交换转换范式 CCNF,设计基于 A-规范化的单遍翻译,并采用显式 join point 构造避免代码复制;所有证明在 Lean 4 中机器化。
评估
证明良类型的翻译后程序与原程序求值结果相同,并在 Lean 4 中机器化验证全部结果。
原文摘要(Abstract)

Levy's call-by-push-value (CBPV) is a language that subsumes both call-by-name and call-by-value lambda calculi by syntactically distinguishing values from computations and explicitly specifying execution order. This low-level handling of computation suspension and resumption makes CBPV suitable as a compiler intermediate representation (IR), while its substitution evaluation semantics affords compositional reasoning about programs. In particular, βη -equivalences in CBPV have been used to justify compiler optimizations in low-level IRs. However, these equivalences do not validate commuting conversions , which are key transformations in compiler passes such as A-normalization. Such transformations syntactically rearrange computations without affecting evaluation order, and can reveal new opportunities for inlining. In this work, we identify the commuting conversions of CBPV, define a commuting conversion normal form (CCNF) for CBPV, present a single-pass transformation into CCNF based on A-normalization, and prove that well-typed, translated programs evaluate to the same result. To avoid the usual code duplication issues that also arise with A-normal form, we adapt the explicit join point constructs by Maurer et al. [2017] . Our results are all mechanized in Lean 4.

链接与引用

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

BibTeX
@article{paperbot3802,
  title = {Commuting Conversions and Join Points for Call-by-Push-Value},
  author = {Jonathan Chan and Madi Gudin and Annabel Levy and Stephanie Weirich},
  journal = {Proceedings of the ACM on Programming Languages},
  volume = {10},
  number = {OOPSLA1},
  year = {2026},
  doi = {10.1145/3798210}
}