Lambda Calculusは特定のタイプの用語作成システムですか?


13

これで、教会 が単に型付きラムダ計算に関連付けられていたことがわかります。確かに、ラムダ計算についての誤解を減らすために、単純型付きラムダ計算を説明したようです。

ジョンマッカーシーがLispを作成したとき、彼はそれをラムダ計算に基づいていました。これは、「シンボリック式の再帰関数とその機械による計算、パートI」を発表したときの彼自身の承認によるものです。ここで読むことができます。

今、私たちはのコアであることを知っているのMathematicaでのLispライクなシステムが、その代わりにラムダ計算に純粋に基づいているの、それがされ用語書き換えシステムに基づきます。

ここで著者は次のように述べています:

Mathematicaは基本的に用語書き換えシステムです... Lispの背後にあるラムダ計算よりも一般的な概念です。

ラムダ計算は、はるかに一般的なカテゴリのごく一部であるようです。(これは基本的な概念であると考えられていたので、かなり目を見張るものがあります)。私はこれについてもっと読むことを試みています。

私の質問は次のとおりです。LambdaCalculusは特定のタイプの用語作成システムですか。

回答:


15

答えは、Term Rewrite Systemの意味に依存します。

これを導入した場合の概念用語書き換えシステム、またはTRSesは、今やいわゆる説明一次TRSesを、単にフォームの計算規則のセットであります

l→r

ここで、とrは次の形式の一次項です。lr

t:= バツ ∣ f(t1、…、tn)

ここで、変数であり、fはある関数記号いくつかの任意から採取するが、固定されたセットΣと呼ばれる、署名もそれぞれの引数の数固定、F ∈ Σを。バツfΣf∈Σ

そこのルールに課せられた共通の制限のカップル、例えばあるしかし、我々はここではそれらに行く必要はありません。Var(r)⊆Var(l)

この定義と、を有する通常のラムダ計算、ルール: (λ X 。T )U → T [ U / X ] 表現できない、コンストラクタ「としてλ」結合の発生XにおけるT(アプリケーションでも結構です)。可能な解決策の1つ、および書き換えシステム自体の理論よりも古い解決策は、各λの用語を別の種類の用語に変えることです。β

(λバツ。t) あなたは→t[あなたは/バツ]
λバツtλ

1つの方法は、有名なコンビネーター計算です。これは、シグニチャーΣ = { S 、K 、a p p }とルール a p p(a p p(K 、x )、y )→ x を 持つ書き換えルールです。a p p(a p p(a p p(S 、x )、y )、SKΣ={S、 K、app}

app(app(K、バツ)、y)→バツ
app(app(app(S、バツ)、y)、z)→app(app(バツ、z)、app(y、z))

de Bruijnインデックスと明示的な置換を持つラムダ項を含む、より直感的な別のエンコーディングがありますが、ここでは説明しません。


一次エンコードにもかかわらず、計算の縮約動作に関する技術的な問題は、バインダーを持つコンストラクターを含むようにTRSの概念を拡張することにより、より適切に対処されることが明らかになりました。これは、用語Higher Order Rewrite Systemsによってしばしば参照されます。用語は次の形式になりましたλ

t := バツ(t1、…、tn) ∣ f(バツ11…バツ私11。t1、…、バツ1n…バツ私nn。tn)

どこに再びが、現在は各X I jがされてバインドでT I。署名では、各引数によってバインドされる変数の数を指定する必要があります。今、私たちは書くことができるB S(X 。トン)を表す用語についてλ xと。トン。少しの作業で、適切な置換の概念を定義できます。f∈Σバツj私t私abs(バツ。t)λバツ。t

βηβ

したがって、左側はいくつかの素晴らしいサブセット、多くの場合「ミラーパターン」に制限されます。いくつかの厄介な驚きがありますが、1次の場合の結果の数は一般化します。

λ βη

λβ

app(abs(バツ。y(バツ))、z)→y(z)

定義と基本的な結果のかなりまともな概要は、NipkowとPrehoferによってここに示されています。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.