0
私はラムダ計算を理解し、素晴らしいarticleを読もうとします。 8ページ、表現があるにラムダ計算を減らす方法
:
(λy.(x(λx.xy)))
私は、
(λy.(x(λx.xy))) t
をt
と左の最も外側の(λy)
を代用するつもりならば、結果は可能でしょうか?
x(λx.xy)
私はラムダ計算を理解し、素晴らしいarticleを読もうとします。 8ページ、表現があるにラムダ計算を減らす方法
:
(λy.(x(λx.xy)))
私は、
(λy.(x(λx.xy))) t
をt
と左の最も外側の(λy)
を代用するつもりならば、結果は可能でしょうか?
x(λx.xy)
私はyはすでに、すべてのyがtで置換される入力\ yにバインドされているので、構文
(\y -> x (\x-> x y))
(\y -> x (\x-> x y)) t
x (\x -> x t)
をのhaskellするためにそれを書き換える自由を取りました。
編集:無料のxを含む場所がtの場合は、以下のコメントに記載されているように、このスコープ内のバインドされたxの名前を「フレッシュ」な名前に変更することが重要です。これは現在意味のない名前です。我々は
let t = \t -> x t
を言うならば、適切な置換はpigworker
で述べたように、いくつかのz
は無料のxを隠し防ぐために、私たちのバウンドのxを交換するために、新鮮な識別子として新鮮さのために選択されている
x (\z -> z (\t -> x t))
ようになります。 t。
上記の減少によって、tのxの自由出現が間違って取得されます。 \ x - > x tはより安全に\ z - > z tになります。ここで、zは新鮮さのために選択されています。 – pigworker