-
(λx.(λy.yx))(yy)
(λy.yx)[x : = (yy)] = λy.y(yy)
die freien y in (yy) werden fälschlich gebunden.
- deswegen
(λx.B)A→βB[x : = A] nur,
falls
x
fvar(A).
- Lösung: vorher lokal umbenennen (
λy.yx→αλz.zx)
dann
(λx.(λy.yx))(yy)→α(λx.(λz.zx))(yy)→βλz.z(yy)
- das falsche Binden muß auch hier verhindert werden:
Umbenennung von x in y bei:
λx.xy
λy.yy
- ähnlich bei Refactoring (inline method, rename variable)