「‍」 Lingenic

Call-by-Push-Value

(⤓.md ≡ ◇.md); γ ≜ [2026-10-22T141515.691, 2026-10-22T141515.691] ∧ |γ| = 1

Call-by-Push-Value

Origin. Paul Blain Levy, "Call-by-push-value: a subsuming paradigm" (TLCA 1999, Springer LNCS 1581, pp. 228–242), developed through his thesis (Queen Mary, University of London, 2001) into the book Call-By-Push-Value: A Functional/Imperative Synthesis (Springer, Semantic Structures in Computation, 2003); the journal statement of the subsumption is "Call-by-push-value: decomposing call-by-value and call-by-name" (Higher-Order and Symbolic Computation 19(4), 2006, pp. 377–414). The adjoint decomposition has a precedent in Nick Benton's mixed linear/non-linear logic LNL (CSL 1994), which split linear logic's ! into an adjunction; Levy's calculus does the same to the monad of Moggi's "Notions of computation and monads" (Information and Computation, 1991).

Models. A calculus with two kinds of type, under Levy's slogan "a value is, a computation does": value types classify data, computation types classify behaviour, and two shifts connect the kinds — F A, the computations that return a value of type A, and U B̲, the values that hold a suspended computation of type B̲. Call-by-value and call-by-name stop being rival languages and become two translations into this one, each a pattern of where the shifts fall. The decomposition is the point: Moggi's monad T is not primitive but the composite U F of an adjunction, and the finer structure is what a semantics of effects actually uses.

Formalism.

Types: value types A ::= U B̲ | ∑{i∈I} Aᵢ | 1 | A × A computation types B̲ ::= F A | A → B̲ | ∏{i∈I} B̲ᵢ (index sets finite or countable; underlining marks computation types)

Judgments: Γ ⊢ᵛ V : A for values, Γ ⊢ᶜ M : B̲ for computations; Γ holds value hypotheses only.

The shifts:

Γ ⊢ᵛ V : A ─────────────────── F-intro Γ ⊢ᶜ return V : F A

Γ ⊢ᶜ M : F A Γ, x : A ⊢ᶜ N : B̲ ───────────────────────────────── F-elim Γ ⊢ᶜ M to x. N : B̲

Γ ⊢ᶜ M : B̲ ──────────────────── U-intro Γ ⊢ᵛ thunk M : U B̲

Γ ⊢ᵛ V : U B̲ ──────────────────── U-elim Γ ⊢ᶜ force V : B̲

Reduction: force (thunk M) ⇝ M (return V) to x. N ⇝ N[V/x] (λx.M) V ⇝ M[V/x]

Functions: λx.M : A → B̲ is a computation; an application pushes its operand before the body runs. A → B̲ is a computation type because a function does something when applied.

Subsuming translations: call-by-value: (A → B)ᵛ = U(Aᵛ → F Bᵛ); a CBV term of type B becomes a computation of type F Bᵛ call-by-name: (A → B)ⁿ = U Aⁿ → Bⁿ; a CBN type becomes a computation type, and variables bind thunks Both preserve observable behaviour, and the standard CBV and CBN semantics factor through them.

Stack semantics: The CK-machine runs a pair ⟨M, K⟩ of a computation and a stack: application pushes an operand, λ pops one, M to x. N pushes the frame to x. N, return V pops it. Stacks are typed from one computation type to another and, in the models, denote algebra homomorphisms.

Adjunction semantics: A model is a value category and a computation category with a strong adjunction F ⊣ U, plus the products, sums and exponentials the types demand, with no coherence conditions (Levy, "Adjunction models for call-by-push-value with stacks", CTCS 2002; Theory and Applications of Categories 14(5), 2005, pp. 75–110). U F is Moggi's monad on values; the call-by-value translation lands in the Kleisli part of the adjunction and the call-by-name translation in the co-Kleisli part; computation types denote algebras in the Eilenberg–Moore semantics.

Polarization: Value types are the positives, computation types the negatives, and U and F are the shifts ↓ and ↑ — a focused proof is a CBPV typing derivation (Polarized Logic, Focusing).

Symbols.

SymbolUnicodeNameMeaning
⊣U+22A3Left tack / AdjointThe adjunction F ⊣ U
⊢U+22A2TurnstileTyping judgment
ᵛU+1D5BModifier letter small vMarks the value judgment
ᶜU+1D9CModifier letter small cMarks the computation judgment
→U+2192Rightwards arrowThe computation-type function space
×U+00D7Multiplication signProduct of value types
∑U+2211N-ary summationSum of value types
∏U+220FN-ary productProduct of computation types
∈U+2208Element ofIndexes the branches of sums and products
ᵢU+1D62Subscript small iBranch index
↑U+2191Upwards arrowPolarized logic's name for F
↓U+2193Downwards arrowPolarized logic's name for U
λU+03BBGreek small lamdaComputation-level abstraction
ΓU+0393Greek capital gammaContext of value hypotheses
⇝U+21DDRightwards squiggle arrowReduction
⟨U+27E8Left angle bracketOpens a CK-machine configuration
⟩U+27E9Right angle bracketCloses it
F—Returner shiftF A: computations returning a value of type A; the left adjoint
U—Thunk shiftU B̲: values holding a suspended computation; the right adjoint
T—The monadT = U F, Moggi's monad on value types
A—Value metavariableRanges over value types
B̲—Underlined metavariableRanges over computation types
1—Unit typeNullary product of value types
thunk, force—U intro and elimFreeze and unfreeze a computation
return, to—F intro and elimReturn a value; sequence on a returned value
K—StackThe CK-machine's evaluation context
::=—Grammar productionDefines the two type grammars

Metatheory. The subsumption is a theorem: Levy (1999; 2003) proves that the call-by-value and call-by-name translations preserve operational behaviour and that the known denotational semantics of each — for divergence, state, control, printing — factor through CBPV's, so one calculus carries the semantics previously built twice. The adjunction analysis sharpens Moggi: every monad arises from an adjunction, but the monadic metalanguage sees only the composite U F, while CBPV's syntax names the two halves, and the choice the monad leaves open — which resolution to compute in, with Kleisli initial and Eilenberg–Moore terminal (Monads) — is settled by the stack judgment, since stacks denote homomorphisms and force the algebra reading of computation types. The algebraic-effects account enters at the same place: an effect operation acts on every computation type because every computation type is an algebra, and a handler is a homomorphism out of a free one (Algebraic Effects). Under Curry–Howard the calculus is the term assignment of focused intuitionistic logic, the inversion and focus phases matching the two judgments; Focusing and Polarized Logic record the same structure from the proof-search and LC sides.

Applies to. The working metalanguage of effect semantics: monadic, adjunction-based and algebraic accounts of effects are stated over its value/computation split (Monads, Algebraic Effects). Compiler intermediate representations that separate data from control. The Curry–Howard face of focusing and polarization (Focusing, Polarized Logic). Adjoint and modal type theories, which generalize the U–F pattern to other adjunctions (Modal Type Theory). Semantics of call-by-value and call-by-name languages by translation. Dependent and graded extensions of effect typing.

Limitations. Call-by-need is not subsumed: forcing a thunk twice runs its computation twice and nothing in the calculus memoizes, so lazy evaluation with sharing needs an extension rather than a translation. Complex values — value terms built by case analysis on sums — complicate the equational theory, and Levy's development handles them with separate machinery. The calculus is intuitionistic: there are terms and stacks but no symmetric coterm syntax, so classical control is handled indirectly — Levy's treatment routes it through the separate Jump-With-Argument calculus — and the fully symmetric picture belongs to the polarized sequent calculi descended from λ̄μμ̃ (Lambda-Mu Calculus). And the fine grain is syntactic overhead: thunk, force, return and to make even effect-free programs more verbose than their λ-calculus originals, which is why CBPV serves as metalanguage and intermediate representation rather than surface language.

© 2026 Lingenic LLC