Call-by-value and call-by-name: A simple proof of a classic theorem

Dariusz Biernacki*, James McKinna, Filip Sieczkowski

*Corresponding author for this work

Research output: Contribution to journalArticlepeer-review

127 Downloads (Pure)

Abstract

One of the natural problems of operational semantics is to characterise the relationship between eager and lazy evaluation. In the context of -calculus, this is expressed by the classic theorem that call-by-value evaluation of a program to (weak-head) normal form can always be simulated by a call-by-name evaluation. While the statement and intuition behind it are simple and clear, naive attempts at proof famously fail: the result is usually established as a consequence of the more complex standardisation theorem. In this work, we develop and formalise a novel and lightweight inductive approach to tackle the problem of simulation between two semantics for a single calculus, but with different evaluation orders. We exercise our method on the classic call-by-value and call-by-name example and report on methodological takeaways suggested by our approach, in particular what effect the flavour of semantics chosen has on the proof.
Original languageEnglish
Article numbere23
JournalJournal of Functional Programming
Volume35
Early online date29 Oct 2025
DOIs
Publication statusPublished - 2025

Fingerprint

Dive into the research topics of 'Call-by-value and call-by-name: A simple proof of a classic theorem'. Together they form a unique fingerprint.

Cite this