ラムダ計算の単純化


8

以下は、削減するのが難しいと感じているラムダ式です。つまり、この問題の対処方法を理解できません。

λメートルλszメートルsszλszszλszsz

私はこれで迷っています。

誰かが私を正しい方向に導くことができればそれはとても感謝されます

回答:


15

ラムダ項はβ縮約規則によって簡略化されます:

λバツMNβM[バツ:=N]

あなたは部分項を持っている場合、それはのように見えることを意味し、(と呼ばれる可約式は)あなたがでそれを置き換えることができますで、との代わりに。交換しばしば呼ばれるコント。(やような大文字は用語を示すために使用されます。)λバツMNM[バツ:=N]MNバツM[バツ:=N]MN

あなたの場合、最初の削減は次のようになります:

((λmn.(λsz.ms(nsz)))(λsz.sz)redex)(λsz.sz)β(λn.(λsz.(λsz.sz)s(nsz)))contractum(λsz.sz)
ここで、を置き換え。内にあることに注意してください。これはあまり便利ではありません(まだ許可されています)。バインドされた変数( -conversion)の名前を区別できるように変更すると、たとえば次のようになります。mλsz.szλszλszα

(λn.(λuv.(λsz.sz)u(nuv)))(λsz.sz)

いくつかのメモ:

  • 置換は自由変数にのみ適用されます。バインドされた変数は常に元のままです。
  • 直接置換できない場合もあります。たとえば、は下でバインドされているため、を代入することはできません。あなたは取得したい用語の意味を変更します。したがって、最初にバインドされた変数の名前を最初に変更する必要があります。たとえば、に変更してから、を安全に置き換えてを取得できます。ウィキペディアの記事では、置換の正式な定義を示し、バインドされた変数の名前を変更する必要がある場合を示しています。x:=yλy.xyyλλy.yyλz.xzx:=yλz.yz
  • ラムダは右に関連付けられるため、はです。λsz.szλsλzsz
  • アプリケーションは左側に関連付けられるため、はです。バツyzバツyz

1

ラムダの抽象化と削減を表現する別の方法。入力の順序に基づいて、文字による用語の代わりにインデックスが使用されます。抽象化は[]で囲まれています

(λmn.(λsz.ms(nsz)))(λsz.sz)(λsz.sz)
m -> 1, n -> 2, s -> 3, z -> 4
(λmn.(λsz.ms(nsz))) = [1 3 (2 3 4)]
(λsz.sz) = [1 2]
[1 3 (2 3 4)][1 2][1 2]  
[[1 2] 2 (1 2 3)][1 2]   ;1 was replaced with [1 2], remaining terms decremented
[[1 2] 1 ([1 2] 1 2)]    ;1 was replaced with [1 2], remaining terms decremented
[1 ([1 2] 1 2)]          ;1 2 was replaced by 1 ([1 2] 1 2)]
[1 (1 2)]                ;1 2 was replaced by 1 2
(λmn.m(mn))

上記の表記は、ラムダ抽象化を表現するための、よりコンパクトで明確な方法です。複合抽象化は自動的に単一の正規形に変換され、アルファ変換は必要ありません。

バインドされた用語には単一の正のインデックスが使用されます。負のインデックスはキルタームに使用されます。負のインデックスは、大きさが小さい順に最後に配置されます。

I = λx.x = [1]
K = λxy.x = [1 -2]
KI = λyx.x = [2 -1]
S = λxyz.xz(yz) = [1 3 (2 3)]

SをKに適用:

[1 3 (2 3)][1 -2]
[[1 -2] 2 (1 2)]  ;1 was replaced with [1 -2], remaining terms decremented
[[.2 -1] (1 2)]   ;reducing: 1 replaced by .2*, -2 decremented (in magnitude) 
[2 -2 -1]         ;(1 2) bound terms become kill terms due to -1.
[2 -1] = KI       ;-2 kill term is void due to surviving 2 term

* the . notation signifies the bound term is from the outer abstraction 
  and must be used to prevent decrementing and double replacement of the
  term until the substitution of all terms in the abstraction is complete.

[2 -1][anything] ;applying KI to anything
[1] = I          ;yeilds I, therefor SK[anything] = [1] = I

KをKに適用:

[1 -2][1 -2]
[[1 -2] -1]  ;kill terms are absorbed and also increase the magnitude of bound terms
[2 -3 -1]    ;applying this result to anything yields K.
[2 -3 -1][anything]
[2 -1]

1
コメント/モチベーションを少し追加してください。
フォンブランド2013年

1
答えには説明がないため、Sodukoパズルのようなものです。あなたの代表は何ですか?削減ルールは何ですか?
デイブクラーク

3
次に、答えでそれを行います。「編集」をクリックして編集できます。
ラファエル

これは、この表記のためのインタープリターコンソールのWebベースバージョンです。それは削減ステップを示しませんが、私がそれに投げることができたすべてについて正しく評価します。私はそれについてフィードバックを得ることに興味があります。
dansalmo 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.