私は型なしラムダ計算の実装をプログラミングするのに数週間を費やしました。ラムダ微積分:捕捉回避の再帰的定義
私は、ウィキペディアで与えられた置換の定義にうまく収まる、置換を避けるキャプチャのための再帰的な定義を定式化していると思います。
誰かが私のために正しいのかどうかを確かめることができたら、私は本当に感謝しています。なぜなら、この定義がめったに使われない理由を説明しているからです。
ウィキペディアの定義:
x[x := N] ≡ N
y[x := N] ≡ y, if x ≠ y
(M1 M2)[x := N] ≡ (M1[x := N]) (M2[x := N])
(λx.M)[x := N] ≡ λx.M
(λy.M)[x := N] ≡ λy.(M[x := N]), if x ≠ y, provided y ∉ FV(N)
私の追加の定義は、キャプチャ回避を強制します
y' ∉ (FV(N) ∪ FV(M))
M' ≡ M[y:=y']
ありがとうございます。 実際に私の表現をDe Brujin Index形式に変換してから、式を出力するときに通常の形式に変換していましたが、ベータ還元後の名前の一貫性を保つことができなかったので、この方法に戻りました。 このルールがフリー変数を追跡する必要がある理由はわかりませんが、操作上のセマンティクスを記述して理解しているかどうかを確認します。 – James
@Jamesもしあなたがそれを追跡していないなら、前と後の表現が同じことを意味するという保証はありません。あなたが微積分の健全性を証明しようとするかどうかは明らかです。 – HuStmpHrrr