論理NOT関数の2つの異なるラムダ式を見てきました。
それらの1つは、そのパラメーターを定数にtrue
、false
内部的に逆の順序で適用します。
もう1つは、返された関数に外部的に渡す代わりに、さらに2つのパラメーターをキャプチャし、逆の順序でをそれらに適用します。
そのうちもう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つの関数は既に拡張的に同等です(つまり、同じパラメーターに対して同じ結果が得られます)。または、拡張機能が同等であるかどうかがわからない場合でも、何らかの方法で他の関数に変換できる場合は、その方が良いでしょう。