NOTの2つのラムダ式の同等性


7

論理NOT関数の2つの異なるラムダ式を見てきました。
それらの1つは、そのパラメーターを定数にtruefalse内部的に逆の順序で適用します。

NOT=λx.xfalsetrue=λx.x(λt.λf.f)(λt.λf.t)

もう1つは、返された関数に外部的に渡す代わりに、さらに2つのパラメーターをキャプチャし、逆の順序でをそれらに適用します。x

NOT=λx.λt.λf.xft

そのうちもう1つは少しシンプルに見えます(また、バイナリでエンコードすると簡単です)。

だから私の質問はこれです:
これらの表現の一方からもう一方に私を連れて行くことができる変換はありますか?

それらは「拡張的に」同等である、つまり、どちらも同じ結果を生成することがわかります。しかし、アルファ変換、ベータ変換、エータ変換などの代数変換によって、どういうわけかそれを「証明」したいと思います。残念ながら、この場合これらのどれも私を助けることができません:Alphaは単に名前を変更するためのものです。ベータは関数呼び出しに対してのみ機能しますが、実際に何かを呼び出すまで、これらのすべての式では関数本体(ただし、式全体ではありません)で自由であるため、ここで削減できる関数呼び出しはありません。最も近いのはetaです。これは、拡張等価性と転送パラメーターに関連していますが、パラメーターが逆になっている場合、単純な転送ではなくなり、etaはここでは適用されないようです。バツNOT

不足している変換ルールはありますか?
(まあ、私は彼らが特別な理由から2つのギリシャ文字をスキップするだけではないでしょうね?)

PS:この質問は実際にはモデル1です。拡張機能は同等であるように見えるが、既知の簡約規則に関しては完全に異なるいくつかの異なる形式を持つ他の関数には他にも多くの定義があるためです。私はこの問題の最も単純な例を選びました。

編集:
私が知りたいことをより明確にするために、ここにnot関数の両方のバージョンの削減ステップを示す図があります:http : //sasq.comyr.com/Stuff/Lambda/Not.png

ご覧のとおり、どちらも実際には両方とも同じ結果になります(@Jonathan Gallagherが下で言っていたこととは対照的です)。これは、私がすでに知っていることです。それらは合流であり、したがって、Church-Rosserと同等です。しかし、私知らないのは、ある形式をnot別の形式に変換できる変換ルール(アルファ、ベータ、イータに類似)があるかどうかです。これにより、少なくとも他のいくつかの関数(ここではこれらの2つよりも複雑)も同等であるかどうかを確認できます。これは、可能な答えが2つ以上になる場合は難しい場合があります。私は別のものに1つの内包的定義を変換する可能性がありますいくつかの変換規則があるかどう私が知りたいときは、2つの関数は既に拡張的に同等です(つまり、同じパラメーターに対して同じ結果が得られます)。または、拡張機能が同等であるかどうかがわからない場合でも、何らかの方法で他の関数に変換できる場合は、その方が良いでしょう。


与えられた:あなたはだけでなく、のこれら二つのエンコーディングに何かを証明することはできませんが、あなたが証明したいことがあり、結果は次のようなものになるだろう、ブールラムダ項と同じ通常の状態に減らす必要がありますNOTのどのエンコーディングを選択しても、フォーム。fNOT f trあなたe false
Tpecatte 2013

うーん、すごい...両方の削減の合流点を示すためにチャーチ・ロッサーの定理を使用することを提案しますか?しかし、何らかの変革が伴う可能性があることを示唆していませんか?(たぶんまだ発見されていないものもあるでしょう)
SasQ

変換が必要かどうかはわかりませんが、合流とは、どちらを選択しても問題にならないことを意味します。これはチャーチ整数と同じです。整数を定義するために2つのパラメーターを交換できます。どちらも有効であり、「評価」されたときに何らかの形で同等ですが、変換を使用して同等ではありません。
Tpecatte 2013

回答:


3

2つのNOTフォームが一般に同等でないことを証明するために必要なことは、それぞれが適用されると、次のような異なる結果を返すという用語を見つけることです。

NOT1λバツバツ=λバツバツλtλffλtλftλバツバツ=λバツバツ

NOT2λバツバツ=λバツλtλfバツftλバツバツ=λtλfft


-3

最初のものをnot1と呼ばず、2つ目をnot2と呼びます。次に、以下があります。

not1MβMfalsetrue
そして
not2Mβλtf.Mftηλt.MtηM

今、私たちがそれを仮定すると

M=true
次に、上部の削減ではfalseが返され、下部の削減ではtrueが返されるので、識別を行うと奇妙な結果が得られるようです。

エラーが発生したためです。私の知る限り、その方法でeta-reduceすることはできません。not2Mβλtf.Mft 大丈夫です、そしてあなたが知るまで、これは正しい通常の形です M。しかし、これはそうではありません:λtf.Mftηλt.Mt; あなたは取り除くことができませんλfこれは、下位機能アプリケーションの最後のパラメーターではないためです。同じパラメータでそのように削減された関数を呼び出すと、それは返されますMt、他のパラメータ(以前は f)、それは Mtfではなく Mft
SasQ 2013

私はあなたが間違っていると思います。Etaは書き換えなので、合同である必要があります-置換とコンテキストの下で閉じられます。これにより、指定された削減が可能になります。必要に応じて、他の方法で行うこともできます。セットするS=λfMf。その後λtStηS そして再び、 λfMfηM
ジョナサンギャラガー

1
@JonathanGallagher: λtfMft として読む必要があります λtλfMftそして、ではないとしてλt.(λf.(Mf))t。あなたは括弧を間違えました、それがあなたがあなたが実行できると思う理由ですη-削減。
Andrej Bauer

ああ。そうですか。説明していただきありがとうございます。私の応答は間違っています。
ジョナサンギャラガー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.