Lecture V (§5) — Theorem 5.2 (Scott 1981, PRG-19) #
Theorem 5.2. For suitably typed λ-terms the following equation is true:
(λx₀, …, xₙ₋₁. τ)(σ₀, …, σₙ₋₁) = τ[σ₀/x₀, …, σₙ₋₁/xₙ₋₁].
This is the fundamental conversion (β-substitution) rule. Scott proves it by
induction on τ,
reducing to the one-variable case and using three "true equations" along the way.
In the
neighbourhood-system framework, where a term-in-context is an approximable map,
the one-variable
rule is exactly the computation law of curry/eval from Theorem 3.12, and the
inductive helper
equations are the corresponding combinator identities:
- β (one variable, in context). With
⟦τ⟧ = g : Γ × 𝒟ₓ → 𝒟', the termλx.τiscurry gand applying it to a constantσsubstitutesσforx:eval ∘ ⟨curry g, const σ⟩ = g ∘ ⟨I, const σ⟩(beta). - tuple.
(λx.⟨τ₀, τ₁⟩)(σ) = ⟨(λx.τ₀)(σ), (λx.τ₁)(σ)⟩(beta_tuple). - abstraction (Scott's
invstep).(λx.λy.τ)(σ)(y) = τ[σ/x]evaluated, i.e. the double-curry application law (beta_abs).
The base value law (λx.τ)(σ) = τ[σ/x] evaluated pointwise is
toElementMap_curry_apply.
Everything here is at the level of approximable maps; the map equation beta
uses the permitted
ext_of_toElementMap, the value equations are choice-free.
Theorem 5.2, base value law (Scott 1981, PRG-19). (λx.τ)(σ) = τ[σ/x]
evaluated: applying
the abstraction curry g (in free-variable context v) to x substitutes,
giving g(v, x).
Theorem 5.2 (Scott 1981, PRG-19) — β as a map equation. Substituting the
constant σ for
the bound variable: (λx.τ)(σ) = τ[σ/x], where the left side first abstracts
(curry g) then
applies to the constant σ, and the right side substitutes σ directly. Both are
approximable
maps Γ → 𝒟' and they are equal.
Theorem 5.2 (Scott 1981, PRG-19) — tuple case.
(λx.⟨τ₀, τ₁⟩)(σ) = ⟨(λx.τ₀)(σ), (λx.τ₁)(σ)⟩: abstraction distributes over a
tuple.
Theorem 5.2 (Scott 1981, PRG-19) — abstraction case (inv step).
(λx.λy.τ)(σ)(y) = τ[σ/x] evaluated at y: the double-curry application law. The
bound y is
carried inert past the substitution of σ for x, exactly Scott's
(λx.λy.τ)(σ)(y) = (λx.τ)(σ).