計算理論の分野へのラムダ計算の貢献は何ですか?


85

私はラムダ計算を読んで「それを知る」だけです。これは、チューリングマシンとは対照的な代替の計算形式と考えています。これは、関数/リダクションを使用して物事を行う興味深い方法です(粗雑に言えば)。いくつかの質問が私をしつこく続けます:

  • ラムダ計算のポイントは何ですか?なぜこれらすべての機能/削減を経るのですか?目的は何ですか?
  • その結果、私は疑問に思っています:ラムダ計算はCSの理論を前進させるために正確に何をしましたか?その存在の必要性を理解する「アハ」の瞬間を持つことができるのは、どのような貢献でしたか?
  • なぜラムダ計算はオートマトン理論のテキストに含まれていないのですか?一般的なルートは、さまざまなオートマトン、文法、チューリングマシン、複雑度クラスを通過することです。ラムダ計算は、SICPスタイルのコースのシラバスにのみ含まれています(おそらくそうではありませんか?)。しかし、私はそれがCSの中核カリキュラムの一部であることはめったにありません。これは、それほど価値がないことを意味しますか?たぶんそうではなく、私はここで何かを見逃しているかもしれません

関数型プログラミング言語はラムダ計算に基づいていることは知っていますが、プログラミング言語ができる前に作成されたため、それを有効な貢献とは考えていません。それでは、理論への応用/貢献について、ラムダ計算を知っている/理解しているポイントは本当に何ですか?


6
関連する一連の回答は、 -calculusとTMのパワーの違いを説明しています。cstheory.stackexchange.com / questions / 1117 / λ
Suresh Venkat


5
ある意味では、その貢献はフィールドの作成でした。教会が最初にラムダ計算を考案したことを忘れないでください。しかし、最初は計算の普遍的なモデルとは見なされていませんでした。
ダンヒューム14年

私の中心的な研究Functional Programmingでは、Haskellと少しのLispについて議論しました。それの後継はPrinciples of Programming Languages、MLを使用し、ラムダ計算を導入したでした。いくつかの答えが示すように、それはラムダ計算が実際に属している場所です。プログラミング言語、タイピングなどに関するクラスで
Shaz 14年

この質問は似ているのTM&ラムダ計算との関係&もラムダ計算の過去の優先順位について議論
vzn

回答:


96

λ -calculusには2つの重要な役割があります。

  • これは、シーケンシャルで機能的な高次の計算動作の単純な数学的基盤です。

  • これは、構成的論理における証明の表現です。

これは、Curry-Howard通信とも呼ばれます。共同で、 -calculus(Turingマシンでは共有されない)の代数的感覚によって強化された、証明および(順次、関数、高次)プログラミング言語としての -calculusの二重のビューは、ロジック、数学の基礎、プログラミング間の技術移転。この転送は、例えばホモトピー型理論などでまだ進行中です。特に、一般的なプログラミング言語の開発、特にタイピングの分野は、なしでは考えられません λ λ λ λλλλ-計算。ほとんどのプログラミング言語は、 -calculusの直接の子孫であるLispおよびML(たとえば、Lispのガベージコレクションが発明された)にある程度の負債を負っています。 -calculusの影響を強く受ける2番目の作業は、 対話型証明アシスタントです。λλ

優秀なプログラマーになるために、またはコンピューターサイエンスの理論家になるために、 -calculus を知っている必要がありますか?いいえ。型、検証、および高次機能を備えたプログラミング言語に興味がない場合は、恐らくそれほど有用ではない計算モデルです。特に、複雑性理論に興味がある場合 、基本的な縮小ステップは強力であるため、 -calculusはおそらく理想的なモデルではありません。任意の数のコピーを作成するため、 λ λはX M N β M [ N / X ] N β λ λ M N M Nをλλ

(λx.M)NβM[N/x]
Nβは、計算の微視的コストを説明する非現実的な基本概念です。これが、理論Aが -calculusにあまり夢中にならない主な理由だと思います。機械組成のない自然な概念が存在しないので、逆に、チューリングマシンが持つ一方で、プログラミング言語の開発のためにひどく心に強く訴えるようではありません場合-calculus、およびプログラムをしているし、そうである。計算のこの代数的見方は実際に実際に使用されるプログラミング言語に関連しており、多くの言語開発は、新しいプログラム構成演算子の検索および調査として理解できます。λλMNMN

-calculusの歴史の百科事典的な概要については、Lambda-calculusの歴史とCardoneとHindleyによる組み合わせ論理を参照してください。λ


8
これはとてもいい答えです。
スレシュヴェンカト

9
-reduction の「非現実性」に関して:Beniamino AccattoliとUgo Dal Lagoは最近、標準の縮小戦略(たとえば、左端-外端)の標準形への -stepsの数が不変の複雑さであることを示す驚くべき結果を証明しました。測定します。これは、 -reduction 自体の実装が高価であっても、削減数のカウントは非現実的な複雑さの尺度ではないことを意味します(たとえば、クラス定義には影響しません)。β β PβββP
ダミアーノマッツァ14年

5
@DamianoMazzaこれは新しい結果であるため、理論Aの歴史に影響を与えることはできませんでした。さらに、この結果は一部の削減の概念にのみ当てはまると思います。IIRC Aspertiの論文P = NP、共有までは、J.-Jの意味で「最適な」削減戦略がある場合、PとNPが崩壊することを示しています。徴収。
マーティンバーガー14年

6
@MartinBerger:もちろんです。私のコメントは削減の複雑さに関する情報を追加することを意図したものであり、理論Aへの影響の欠如に関するあなたの声明を「修正」することではありません。ところで、Accattoliとダルラーゴの結果は通常、最左外側のために保持している -reduction(参照、 P.2、C.2、その紙のL.11)。それがとても興味深い(そして言及する価値がある)理由です。Aspertiの結果は、あなたが言うように、レビー最適削減であり、これは削減戦略ではありません(特に、最左端はレヴィ最適ではありません)。β ββββ
ダミアーノマッツァ14年

27

私が思うに -calculusがこの分野に多くの方法で貢献してきましたし、まだそれに貢献しています。以下に3つの例を示しますが、これは網羅的なものではありません。私は -calculusの専門家ではないので、確かにいくつかの重要な点を見逃しています。λλλ

  • まず、私は、関数の正確な同じセットを表すために判明計算の異なるモデルがの原点でだったと思うチャーチ=チューリングのテーゼ、および -calculusはチューリングマシンとと一緒に、大きな役割を果たした -recursive機能。μλμ

  • 第二に、関数型プログラミング言語に関して、私は有効でない貢献として理解していません。基本的に、計算のすべてのモデルは、コンピューターサイエンスで何かが起こるずっと前に発明されました。したがって、 -calculusは、ある意味でチューリングマシンに直交する計算の別のビューをもたらしました。これは、プログラミング言語の分野(計算理論の分野の一部)で非常に有益です。λ

  • 最後に、より具体的な例として、専用言語を使用して複雑度クラスを特徴付けることを目的とした暗黙的計算複雑度について考えます。Bellantoni-Cookの定理などの最初の結果は再帰関数の観点から述べられましたが、最近の結果では -calculusの語彙とテクニックを使用しています。詳細およびポインター、またはDICEワークショップの議事録については、暗黙の計算の複雑さのこの短い紹介を参照してください。λμλ


20

他のすべての回答で言及された -calculus の基本的な役割とは別に、何かを追加したいと思いますλ

ラムダ計算はCSの理論を前進させるために正確に何をしましたか?

並行性理論はCSの1つの分野であり、Martin Bergerが言及した構成の見方に大きな影響を受けていると思います。もちろん、 -calculus自体は並行言語ではありませんが、その「代数的精神」は現代のプロセス計算の定義と発展に浸透しています。プロセス代数は、オートマトンやチューリングマシンよりも -calculusの子孫であり、一般に、同時実行理論はインポートなしでは今日のものではない、と言うのは公平だと思います-微積分。λ λλλλ

並行性に加えて、答えの1つで言及されている暗黙的な計算の複雑さ(ICC)を見ることができてうれしいです(これは私が個人的に関与している分野です)。ただし、これまでのところ、ICCはプログラミング言語以外のCS理論や、非常に限られた方法でのソフトウェア検証では使用できません。これは、より一般的な状況の例です。 -calculusの根底にあり、「理論B」に支配的な計算のモジュラー、構成、高度に構造化されたビューは、「理論A」の興味深い問題に対する洞察をほとんどもたらさないようです。 。なぜこれがそうなのかは、私にとって興味深い反省であると同時にイライラする問題です。(関連する議論については、この質問を参照してください)。λ

(補足として、証明理論(Curry-Howard)との深いつながりのおかげで、 -calculusはCSの「適切な」外でも、特に集合論で興味深い応用があります。私は特にジャン=ルイ・クリヴィネによって2000年代初頭から開発された研究プログラムである古典的実現可能性に関する最近の研究をほのめかします(現在、アレクサンドル・ミケルなど、彼のWebページで見つかった講義は、このテーマの優れた紹介です)。モデル理論の観点から、古典的な実現可能性は、コーエンの強制の「非可換」一般化と見なされ、強制では取得できない集合理論のモデルを生成します)。λ


2
並行性理論についての良い点:K. Hondaとその同僚が主に追求している相互作用システムの型の開発は、実質的には、対話型システムの型として -calculiの型を言い換えることです。これをすべて機能させる重要なブリッジは、プロセスとしての Milnerの関数で、からへの変換を提供します。これはすでに逆の技術移転につながりました。MLに似たプログラミング言語のほとんどのHoareロジックは、型付きの -fragmentsのロジックとして生まれ、その後、Milnerのエンコーディングを介してプッシュバックされました。λ π πλλππ
マーティンバーガー14年

5
自分でクローンを作成できる場合は、BLLと実現可能性を使用してP / NPを調べるために複製を作成します。論理関係は「自然な証明」ではないようであり、線形型の規律により相対化できないことが保証され、BLLのポリタイム完全性定理により、見逃したアルゴリズムのクラスがあるかどうかを心配することを避けることができます。線形性と表現理論の関係は、GCTへの接続も示唆しています。しかし、これがすべてあなたが興味をそそられイライラしている理由だと思います。:)
ニールクリシュナスワミ14年

1
@NeelKrishnaswamiさん、BLL(有界線形論理)と自然な証拠に関連する資料を読んでください。
マーティンバーガー14年

Re B vs. A:ラムダ計算は、同じ計算をよりよく構造化することについてのみですが、たとえば、より良いアルゴリズムを生成することはできません。結果の切り取りとサブ式プロパティにより、一次型のプログラムは、一流の関数なしで記述できます。ただし、カットの削除はコードの複製に対応します。したがって、コピーと貼り付けを十分に行う場合は、高階関数は必要ないことがわかります。(レイノルズの非機能化により、コピーと貼り付けさえ回避できますが、これはグローバルな変換であるため、コンパイラーに任せたほうがよいでしょう)。
ブレイザーブレード14年

逸話的に言えば、私のコメントはアルゴリズム主義者によるプログラミングに動機付けられています。彼は素晴らしいですが、彼は私が望んでいるよりもはるかに抽象的ではないようです。私はそれが一般的だと主張しているわけではありませんが、アルゴリズムを記述する際にコードの抽象化はしばしば必要ない/強調されていないと主張しています。(パーティション関数をインライン化するクイックソートの実装数を検討してください—受け入れられないことがわかりました)。
ブレイザーブレード14年

13

あなたの質問には多くの側面からアプローチできます。歴史的側面と哲学的側面を脇に置いて、あなたの主な質問に対処したいと思います。

ラムダ計算のポイントは何ですか?なぜこれらすべての機能/削減を経るのですか?

ブール代数、関係代数、一次論理、型理論、または他の数学的形式主義/理論のポイントは何ですか?答えは、彼らのデザイナーが何らかの目的で作成したとしても、彼らには固有の目的がないということです。ブール代数の基礎を構築するとき、ライプニッツは、特定の哲学的プロジェクトを念頭に置いていました。ブールは彼自身の理由でそれを研究しました。関係代数に関するde Morganの研究も、彼のさまざまなプロジェクトによって動機付けられました。パースとフレーゲには、現代の論理を作成する独自の動機がありました。

要点は、ラムダ計算を作成するときに教会が持っていた理由が何であれ、ラムダ計算のポイントは開業医ごとに異なります。

  • 誰かにとっては、計算について話すのに便利な表記法です。チューリングマシンの代替品など。

  • 別の人にとっては、より洗練されたプログラミング言語(McCarthy、Stanleyなど)を構築するための強固な数学的基礎です。

  • 第三者にとっては、自然言語とプログラミング言語(Montague、Fitch、Kratzerなど)のセマンティクスを提供するための厳密なツールです

ラムダ計算は、それ自体で勉強する価値がある正式な言語だと思います。型付けされていないラムダ計算では、「Yコンビネータ」と呼ばれるこれらの小さな獣が存在するという事実と、再帰関数を定義し、決定不能性の証明を非常にエレガントで単純にする方法を学ぶことができます。単純に型付けされたラムダ計算直観主義論理のタイプとの間に密接な対応があるという驚くべき事実を学ぶことができます。探求すべき興味深いトピックは他にもたくさんあります(たとえば、ラムダ計算のセマンティクスをどのように指定する必要がありますか?ラムダ計算をFOLのような演ductiveシステムに変換するにはどうすればよいですか)。


Hindley&SeldinのIntroduction to Combinatorsとλ–Calculusを参照してください。BarendregtのThe Lambda Calculusは聖書です。したがって、Hindley&Seldinに夢中になっている場合は、意味論的および構文的な性質のトピックがたくさんあります。


6
私はこの「独自の目的のため」の議論を買っているわけではありません。数学的形式のポイントは、ある概念の理解を明らかにすることです。解明されるものは時間の経過とともに発展する可能性がありますが、形式論が何らかのアイデアについてより明確に考えるのを助けない限り、通常は消滅します。その意味で、ラムダ計算が、TMに包含されない方法で計算の概念をどのように解明するのかを確認することは有効です。
サショニコロフ14

1
縮小や置換を計算とは考えずにラムダ計算を研究できると思います。私が正しいなら、それが実際に可能であれば、計算にまったく興味がなくても、ラムダ計算に興味を持つことができます。しかし、コメントありがとうございます。機会があればすぐに答えを編集しようとします。
湖南ロストミアン14年

@SashoNikolov —「TMに包含されない方法で。」定義では、LCとTMは同等なので、それは不可能です。一方で表現または証明できるものはすべて、もう一方で表現できます(逆も同様です)。したがって、それらはお互いを冗長にします(両方とも一般的な再帰理論、さらにもう1つのTMに相当する形式主義で行います)。それは、TM自体を除くすべてのTM同等システムを捨てるべきだということですか?私はそう言うつもりはありません。なぜなら、TMで表現する方がTMで表現する簡単な場合もあるからです。これは、計算可能性について話すための別の方法です。
ガブリエルL.

1
ガブリエル 文全体を読むと、「ラムダ計算はどのようにTMに包含されない方法で計算の概念を解明するのか」と言います。正式に同等の2つの数学的な定義は、同じ基本概念を異なる補完的な方法で解明する可能性があります。私のコメントは、TMの観点ではなく、ラムダ計算の観点から計算可能性を表現することにより、どのような明快さが得られるのかを尋ねるのが妥当であることを意味しました。これは、正式な同等性に関するものではありません。
サショニコロフ

わかった-何とかそこのキーワードを見逃した。返信いただきありがとうございます。
ガブリエルL.

12

チューリングは、数学は、有限のセットから選択された読み取り/書き込み記号の組み合わせに還元され、有限の数の精神的な「状態」を切り替えることができると主張しました。彼は、チューリングマシンでこれを具体化し、テープ上のセルにシンボルを記録し、オートマトンが状態を追跡します。

ただし、チューリングのマシンは、この削減の建設的な証拠ではありません。彼は、「効果的な手順」はチューリングマシンによって実装できると主張し、ユニバーサルチューリングマシンが他のすべてのマシンを実装できることを示しましたが、数学を実装する一連のシンボル、状態、および更新ルールを実際には与えませんでした彼が主張した方法で。言い換えると、彼は数学を書き留めるために使用できる記号の標準セットを備えた「標準チューリング機械」を提案しなかった。

一方、ラムダ計算はまさにそれです。教会は、数学を書き留めるために使用される表記法を統一しようとしていました。LCとTMが同等であることが示されたら、LCを「標準チューリングマシン」として使用でき、誰でもプログラムを読むことができます(理論的には;))。

さて、なぜLCをTM方言としてではなく、プリミティブとして扱うのかを尋ねることができますか?答えは、LCのセマンティクスは表示的なものであるということです。LCの用語には「固有の」意味があります。教会の数字があり、加算、乗算、再帰などの関数があります。これにより、LCは(形式的な)数学の実践方法と非常によく一致します。

一方、TMプログラムのセマンティクスは操作可能です。意味はマシンの動作として定義されます。この意味では、テープの一部を切り取って「これは追加です」と言うことはできません。これは、コンテキストに依存しているためです。テープのそのセクションにヒットするときのマシンの動作は、マシンの状態、長さ/オフセットなどに依存します。引数の数、結果に使用されるテープの量、以前の操作がテープのそのセクションを破損したかどうかなど。多くの(命令型)アルゴリズムは擬似コードとして提示されます。


5

他の答えは良いです、ここでは、他のメッシュとのメッシュがさらに明確になる可能性があることを考慮するための追加の角度/理由がありますが、古い起源は時間の経過でいくらか失われるため、明確に心に留めるのは難しいかもしれません:

歴史的な優先順位!

ラムダ計算が導入された、少なくとも早くも1932以下の参照に:

  • A.教会、「論理の基礎のための一連の仮定」、Annals of Mathematics、シリーズ2、33:346–366(1932)。

チューリングマシンに導入された1936〜ラムダ計算は数年によってTMの出現に先行して、!

  • チューリング、AM(1936)。「計算可能な数について、Entscheidungs問題への応用」。ロンドン数学会の議事録。2(1937)42:230–265。doi:10.1112 / plms / s2-42.1.230

つまり、基本的な答えは、ラムダ計算が多くの点でTCSの究極のレガシーシステムであるということです。言語の新しい開発はそれほど進んでいませんが、Cobolとほぼ同じ方法で行われています。導入された最も初期のチューリング完全計算システムであるように見え、チューリング完全性の基本的な考え方よりも前のものです。ラムダ計算、チューリング機械、および事後対応問題が同等であり、チューリングの等価性の概念と教会チューリング論文を導入したことを示したのは、後の遡及分析のみでした。

ラムダ計算は、数学の定理や論理式の派生などとして表現するという点で、論理中心の POV からの計算を単に研究する方法です。また、計算と再帰の間の深い関係、および数学的帰納法とのさらなる密結合を示しています。

これはやや注目に値するファクトイドです。なぜなら、コンピューティングの(少なくとも理論上の)起源は基本的に論理/数学であり、デイビスが著書のEngine of Logic / Mathematicians and the originsコンピューター。(もちろん、ブール代数の起源と基本的な役割は、その概念的な歴史的枠組みをさらに強化します。)

したがって、劇的に、ラムダ計算はコンピューティングの起源を探求するための教育的タイムマシンに少し似ているとさえ言うかもしれません!


1
補遺、ラムダ計算も、ゲーデルズthmの主要なインスピレーションであったホワイトヘッド/ラッセルのプリンキピア数学の影響を強く受けていたようです。この研究の一部は、「アルゴリズム」が正確に(数学的に)定義される前に、アルゴリズムの解決策を求めた世紀の変わり目であるヒルベルトの10番目の問題にも触発されました
vzn 14年

btw / clarification / iiuc実際にPostによって研究されたのはPost正規システムであり、明らかに、より単純なPost Correspondence Problemは特別なケースです。また、3つの主要なシステムすべて(TM、ラムダ計算、ポスト正準システム)の互換性/等価性の証明を支援することにより、チューリングの完全性(その名前の下ではなく)の概念の開発に貢献したKleeneでした。
vzn 14年

参照チャーチ=チューリングのテーゼの歴史の多くの歴史的な詳細/相互関係をトレースウィキペディア
vzn

4
Cobolの比較で気分を害することはありません。
ニールトロント14年

-2

私はちょうどこの投稿に出会ったばかりで、私の投稿がかなり遅い日(年!)にも関わらず、多分私の「ペニーの価値」が役に立つかもしれないと思いました。

大学でこのテーマを勉強している間、私はこの問題について同様の考えを持っていました。だから、私は講師に「なぜ」という質問を投げかけ、その答えは「コンパイラー」だった。彼女がそれを言及するとすぐに、削減の背後にある力と、それをどのように操作するのが最善かを評価する技術が、なぜそれがなぜかつ今でも潜在的に有用なツールであるかという全体の目的を突然作りました。

それは、いわば私の「あは」の瞬間でした。

私の意見では、高レベルの言語、パターン、オートマトン、アルゴリズムの複雑さなどは、それらを手元の「タスク」に関連付けることができるため、しばしば役立つと考えています。一方、lamdba calculusは少し抽象的すぎるようです。ただし、低レベルの言語で作業する人はまだいます-ラムダ計算、オブジェクト計算、およびその他の関連する形式化は、平均的なプログラマが恩恵を受ける新しい理論と技術を理解し、おそらく開発するのに役立つと思います。確かに、それはおそらくその理由のためのコアモジュールではありませんが、(私が述べた理由のために)コンピューティングの選択されたキャリアパスに不可欠であるかもしれない奇妙な少数-学者以外-があるでしょう。


コンパイラの "aha"とは何ですか?
PhD 14

あなたの最後の段落は完全に投機的なようであり、「コンパイラ」という単語が質問に答える理由を実際に説明することはありません。
デビッドリチャービー14

@PhD:プログラムの実行時にはベータ削減と置換は使用されませんが、最適化コンパイラ内部で使用されます。それはありませんラムダ計算の主要な重要性が、それは非常に具体的なアプリケーションです。
ブレイザーブレード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.