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. Our results are all mechanized in Lean 4.
Building similarity graph...
Analyzing shared references across papers
Loading...
Jonathan Chan
California University of Pennsylvania
Madi Gudin
Amherst College
Annabel Levy
University of Maryland, Baltimore County
Proceedings of the ACM on Programming Languages
University of Pennsylvania
University of Maryland, Baltimore County
Philadelphia University
Building similarity graph...
Analyzing shared references across papers
Loading...
Chan et al. (Fri,) studied this question.
synapsesocial.com/papers/69db36e64fe01fead37c4d80 — DOI: https://doi.org/10.1145/3798210
Synapse has enriched 5 closely related papers on similar clinical questions. Consider them for comparative context: