純粋なラムダ計算のクイン


13

純粋なラムダ計算のクインの例をお願いします。グーグルで見つけることができなかったことに非常に驚いた。馬のページには、多くの「実際の」言語のクインがリストされていますが、ラムダ計算のクインはリストされていません。

もちろん、これはラムダ計算のクインによって私が意味することを定義することを意味します。(私は非常に具体的な何かを求めています。)

Larkin and Stocks(2004)などのいくつかの場所では、「自己複製」式として引用されている次のように見えます:。これは、単一のベータ削減ステップの後、それ自体に還元され、なんとなく馬鹿げた感じを与えます。しかし、それは終了しないという点で非ウマのようなものです:さらなるベータ削減は同じ表現を生成し続けるので、通常の形式に決して縮小しません。私にとっては、クインはそれ自体を終了して出力するプログラムなので、そのプロパティを持つラムダ式が必要です。(λx.xx)(λx.xx)

もちろん、redexesを含まない式はすでに通常の形式になっているため、終了して出力されます。しかし、それはあまりにも簡単です。だから、私はそれが重要な解決策を認めることを期待して、次の定義を提案します:

定義(仮):ラムダ計算のクインは、ような形式の式です (は特定のラムダ計算式を表します)なる、または、正常形に還元変数名の変更、下にそれと同等のものの任意の入力。

(λx.A)
A((λx.A)y)Y(λx.A)y

ラムダ計算が他の言語と同等のチューリングであるとすれば、これは可能だと思われますが、私のラムダ計算は錆びているので、例を考えることはできません。

参照

ジェームズ・ラーキンとフィル・ストックス。(2004)「ラムダ計算における自己複製式」情報技術の研究と実践の会議、26(1)、167-173。 http://epublications.bond.edu.au/infotech_pubs/158


私の質問への答えではありませんが、私自身の将来の参照(および将来の訪問者)のために、wiki.haskell.org / Combinatory_logicへのリンクがあると便利です。
ナサニエル

馬は独自のソースコードを生成する必要があることに注意してください。それが表す関数を生成するだけでは不十分です。
PyRulez

@PyRulezラムダ式のソースコードは何ですか?文字のシーケンスの場合、ラムダ式で出力することは不可能です。そのため、あいまいさを恐れずに、ラムダ式でわずかに異なるものを意味する "quine"という単語を定義できます。一方、ソースコードをラムダ表現そのものと考えると、「ソースコード」と「それが表す関数」は同じものになります。だから私はここで大丈夫だと思う。
ナサニエル

文字列の教会エンコードがあります。ラムダ計算のクインは、それを表す文字列の教会エンコーディングを出力する必要があります。
PyRulez

もちろん、そのように定義すれば、それは難しくありません。この質問は別のものに関するものでした。
ナサニエル

回答:


8

あなたは、長期たいようM ΛをQMΛ

QMβQ

これ以上の制限は指定しません(たとえば、その形式や正規化の有無など)。それは間違いなく正規化してはならないことを示します。Q

  1. は通常の形式であると仮定します。選択します(定理がすべてのを保持する必要があるため、これを行うことができます)。次に、3つのケースがあります。M ≡は、xはMをQMxM

    • Q M A X AQは原子です。次に。これはに還元ではありません。aQMaxa
    • R S Q M R S X R S R S X R S Qは何らかのアプリケーションです。次に。は仮説による正規形であるため、も正規形であり、還元できません。(RS)QM(RS)x(RS)(RS)x(RS)
    • λ X A xはA M λ Q M λ X A X β A [ X / X ] A λ X A A A λ X AをQは何らかの抽象化(がでフリーであると想定される場合、簡単にするために、変数 abstractsに相当する選択できます)。次に。以来通常の形である、そうである。したがって、を減らすことはできません。(λx.A)xAMλQM(λx.A)xβA[x/x]AλバツAAAλバツA

    したがって、そのようなが存在する場合通常の形式にすることはできません。Q

  2. 完全性のために、仮定有する正規形ではなく、中に、すなわち、(おそらくそれが弱く正規である)正規形とよう: N β -nf N Q M Λ Q M β Q β NQ Nβ-nfNQMΛ

    QMβQβN

    その後でも削減シーケンスが存在しなければなら:ので、Q のx β Nは、xはβ NMバツQバツβNバツβN

    • Q β NをQバツβNバツあるという事実によって可能である。QβN
    • N β のxをNバツは -nfであり、は単なるアトムであるため、は正規化する必要があります。Nβバツ
    • が以外に正規化される場合、は2つの -nfsがありますが、これはチャーチ・ロッサーの定理の帰結では不可能です。(チャーチ・ロッサーの定理では、おそらく既にご存じのように、削減はコンフルエントであると本質的に述べられています。)N Qは、xはβをNバツNQバツβ

    ただし、上記の引数(1)ではは不可能であることに注意してください。したがって、が正規形であるという前提はられません。QNバツβNQ

  3. そのようなを許可する場合、非正規化でなければならないことは確かです。その場合、受け取る引数を排除するコンビネータを使用するだけです。デニスの提案はうまく機能します: その後、たった2つの -reductionsで: Q λ Z λ X λ Z X 、X λ X λ Z X 、X Q

    Qλzλバツλzバツバツλバツλzバツバツ
    Q Mβ
    QMλzλバツλzバツバツλバツλzバツバツM1βλバツλzバツバツλバツλzバツバツ1βλzλバツλzバツバツλバツλzバツバツQ

あなたはので、この結果は非常に、驚くべきことではないされて、本質的にそれが受け取る任意の引数をなくし用語を求めて、これは私が頻繁に見定点定理の直接的なアプリケーションとして言及したものです。


デニスの回答も受け入れることができれば、私はそれを受け入れますが、(もう少し学んで、完全に理解できた後)この回答が、この「クインコンビネーター」を実装できないことを本当に確信させたのです。通常形式のラムダ式。
ナサニエル

9

これは不可能です。なぜなら、クインは独自のコードを出力することになっており、純粋なラムダ計算には出力を実行する手段がないためです。

一方、結果の項が出力であると仮定すると、すべての正規形はクインです。

たとえば、ラムダ項は既に正規形であり、その出力が結果の正規形であると仮定すると、出力はです。したがって、 x。xはクインです。λ X X λ X X λバツバツλバツバツλバツバツ


2
それは興味深い点です。質問では、ラムダ計算で非自明なカインと見なすことができるものの定義を与えようとしました:任意の入力に適用されると、(変数名の置換まで)それ自体にベータ還元する関数。これは不可能かもしれませんが、少なくとも私には明らかではありません。
ナサニエル14

8

提案は次のとおりです。

を関数不動点として選択します。F = λ T λ Z T Af=λtλzt

これは、固定小数点コンビネーター、。A = Y F = λ X λ Z X 、X λ X λ Z X 、X Y=λgλバツg バツ バツ λバツg バツ バツA=Yf=λバツλzバツ バツ λバツλzバツ バツ

ここで、がクインであることを示します。実際、は減少するため、任意のに対して、ます。A λ Z Y λ Z A Y β A βλ Z A AAλzAyλzAyβAβλzA


これはかなりきちんとしていて、私がそれを尋ねたときに質問に答えているので、私はそれを受け入れないのは気分が悪い---残念ながら、私は欲しいものを指定する際にわずかな間違いを犯した。私は実際に、が 、ベータ削減ステップの後だけでなく、通常の形式に縮小されたときにになることを望んでいます。(理由については、更新された質問を参照してください。)これは、がredexを含むことができないことを意味します。λ Z A λzAyλzAA
ナサニエル14

1
ああ、私はかなり確信している。この場合、それは次の理由直感(ほとんどの証拠ではない)で、不可能である:あなたが欲しい、それはすべてのために仕事を持っているので、何の役割も果たしていないためにので、に自由であるべきではない。その場合、単に還元されます。ここで、をに減らします。ので、この最後の式は、正規形にすることはできません内部は再び減少することができます...Y Y A λ Z A Y A A λ Z A AyyyAλzAyAAλzAA
デニス

1
の「印刷」が再び命令であるため、この動作はそれほど驚くことではありません 。求めていることは、出力を実行しても何も印刷されない(定義上不可能である)ように、クインを求めることに似ています。λcalcあなたはlあなたはs
デニス14

ああ、あなたはもちろん正しい。私はそれを見るべきだった。より良い定義を求めるために、あなたの答えを受け入れるか、質問を編集するかどうかはわかりません。少し考えてみましょう。(終了する何かを求めている場合に、自明でない定義を与えることはまだ可能であると思われますが、どうすればよいかわかりません。)
ナサニエル14

そうは言ったが、(私はあなたがを意味すると仮定する)がで自由である必要はないというのは本当ですか?例えばはの線に沿った何かかもしれません。(擬似計算は、ラムダ計算の任意の式に等値演算子を定義することさえ可能かどうかわからないのですが、私はあなたが私が意味するものを見ると思います。)z A AzzAAif z==p then return q, otherwise return q
ナサニエル14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.