関数型言語のチューリングが完全なのはなぜですか?


22

主題に関する私の限られた理解はおそらく間違っていますが、これは私がこれまでのところ理解していることです:

  • 関数型プログラミングは、Alonzo Churchが策定したLambda Calculusに基づいています。

  • 命令型プログラミングは、教会の学生であるアランチューリングによって作成されたチューリングマシンモデルに基づいています。

  • ラムダ計算は、チューリングマシンと同じくらい強力で
    能力があります。つまり、計算能力は同等です。

関数型プログラミングがチューリングマシンではなくLambda Calculusに基づいている場合、なぜそれらの一部(またはすべて)がチューリング完全であると記述され、ラムダ完全などではないのですか?「チューリング完全性」という用語は、チューリングマシンにとって特別な意味がありますか、それとも単なる言葉ですか。

最後に、命令型言語がチューリングマシンに基づいており、コンピューターが基本的に無限メモリのないチューリングマシンである場合、現代のPCで機能するプログラミング言語よりもパフォーマンスが高いことを意味しますか?

その場合、ラムダ計算機と同等のものは何でしょうか?

これは3つの別個の質問のように見えますが、それらはすべて密接に関連しており、それぞれが最初の有効な質問である前の質問に依存しています。


6
答えではありませんが、ラムダ計算のすべてのバージョンがチューリング完全ではないことを述べました。単純型付きラムダ計算、および終了チェックに基づくCoqおよびAgdaのより強力なバージョンは、チューリング完了ではありません(決定可能な停止の問題があるため)。HaskellやSMLなどの厳密に型指定された言語は、typeの用語であるフィックスポイントコンビネーターで任意の再帰を許可することにより、これを回避し(a -> a) -> aます。
-jmite

「チューリング完全であると定義されている」と言うのはまったく間違っています。タイトルを変更してもらえますか?
アンドレイバウアー

@AndrejBauerは、タイトル編集をありがとう、私はそれが(だ理由として興味コンプリート回すと定義間違っていますか)?それは形容詞だからですか?定義するよりも説明するほうがいいでしょうか?
アブドゥル

1
@Abdulまあ、問題は「定義された」という言葉です。「関数型言語はチューリング完全として定義されている」と言うなら、「関数型言語」の定義または「チューリング完全」の定義は、関数型言語がチューリング完全であることを示していると言っています。実際のところ、どちらの定義もそれを言っていません。
タナースウェット

回答:


20

一言で言えば

命令型プログラミング言語をチューリングマシンおよびPCなどの通常のコンピューター(チューリングマシンではなくランダムアクセスマシン(RAM)に近い)に特徴付けるのは、保存するために変更できる明示的なメモリの概念です(中間結果) )。これは計算のオートマトンビューであり、計算が進むにつれて変化する可能性のある状態(有限状態制御とメモリコンテンツの両方を含む)の概念を備えています。

他のほとんどのモデルはより抽象的です。元の構造の一連の変換ステップとして計算を表現する場合もありますが、これらの変換は数学的意味のある種​​の一時的な宇宙に適用されます。これにより、参照透過性などのプロパティが保持され、数学的な分析が簡単になります。しかし、メモリのコンペトに依存する自然な物理モデルからは遠く離れています。

したがって、ソフトウェアは実際にはハードウェアから分離可能ではないため、以下で説明するより大きな意味を除いて、自然な機能マシンはありません。

計算可能性の尺度としてのチューリングへの言及は、おそらく、彼のモデルであるチューリングマシンがこの物理的実現可能性の制約に最も近く、それにより計算のより直感的なモデルになったという事実に由来します。

さらなる考慮事項

計算の多くのモデルがあり、最も一般的な方法で計算の概念をキャプチャするように設計されています。チューリングマシンには、実際にはさまざまなフレーバー、ラムダ計算(フレーバーも)、セミチューリライトシステム、部分再帰関数、組み合わせロジックが含まれます。

それらはすべて、計算を表現または実行するために数学者が使用するさまざまな手法のいくつかの側面をキャプチャします。また、ほとんどはプログラミング言語設計の基礎としてある程度使用されており(書き換えシステム用のSnobol、コンビネーター用のAPL、ラムダ計算用のLisp / Schemeなど)、現代のプログラミング言語でさまざまな方法で組み合わせることができます。

主要な結果の1つは、これらすべての計算モデルが同等であることが証明されたため、物理的に実現可能な計算モデルはこれらのモデルよりも多くのことを行うことができないというチャーチチューリングの論文につながります。計算モデルは、これらのモデルのいずれかと同等であることが証明され、したがってすべてのモデルと同等であることが証明できる場合、チューリング完全と呼ばれます。

名前は異なる場合があります。参照としてのチューリングマシン(TM)の選択は、おそらく、それがこれらのモデルの中で最も単純であり、人間が計算する方法を厳密に(単純に)模倣し、実装がかなり簡単である(限られた有限形式で)という事実によるものと思われます)物理デバイスとして、チューリングマシンがレゴセットで構築されている程度まで。基本的な考え方は数学的洗練を必要としません。この基準位置を与えたのは、おそらくモデルの単純さと実現可能性です。

Alan Turingがコンピューティングデバイスを作成した時点で、数学の基礎にとって重要な問題である計算可能性の正式な定義として役立つ他の提案が発表されました(Entscheidungsproblemを参照 )。チューリングの提案は、当時の専門家によって、計算可能性に関する既知の研究を最も説得力を持って包含するものであると見なされていました(Computability and Recursion、RI Soare、1996、section 3.2を参照)。さまざまな提案が同等であることが証明されましたが、チューリングの提案はより説得力がありました。[ユヴァル・フィルマスのコメントより]

ハードウェアの観点からは、コンピューターはチューリングマシンではなく、チューリング完全なランダムアクセスマシン(RAM)と呼ばれるものであることに注意してください。

純粋に命令型の言語(意味が何であれ)は、おそらくチューリングマシンなどの最も基本的なモデルに使用される形式、またはコンピューターのアセンブリ言語(バイナリコーディングをスキップ)です。どちらも読めないことで有名で、重要なプログラムを書くのは非常に難しい。実際、アセンブリ言語でさえ、機械語命令を直接使用する場合と比較して、プログラミングを少し簡単にするためのいくつかのより高いレベルの機能を備えています。基本的な命令モデルは物理的な世界に閉じられていますが、あまり有用ではありません。

これにより、すぐに高レベルの計算モデルが開発され、サブプログラムや関数呼び出し、メモリの場所の名前付け、名前のスコープ、数量化、ダミー変数など、さまざまな計算手法が既に何らかの形式で使用されています数学や論理、さらにはリフレクションなどの非常に抽象的な概念でさえも(Lisp 1958)。

プログラミング言語を命令、機能、ロジック、オブジェクト指向などのプログラミングパラダイムに分類することは、言語の設計におけるこれらの手法のいくつかの卓越性と、プログラムの一部のプロパティを強制するコンピューティング機能の有無に基づいていますまたは言語で書かれたプログラムの断片。

一部のモデルは、物理マシンに便利です。他のいくつかのアルゴリズムは、アルゴリズムの高レベルの記述により便利であり、記述されるアルゴリズムのタイプに依存する場合があります。一部の理論家は、アルゴリズムの非決定的仕様を使用することさえあり、それをさらに従来のプログラミング用語で翻訳することさえあります。しかし、必要に応じて各モデルを別のモデルに変換できる洗練されたコンパイラー/インタープリターテクノロジーを開発したため、ミスマッチの問題はありません(これもチャーチチューリングテーゼの基礎です)。

今、あなたは決してあなたのコンピューターを生のハードウェアと見るべきではない。非常に基本的な処理を行うブール回路が含まれています。しかし、その多くは、あなたが決して知らないコンピューター内部のマイクロプログラムによって駆動されます。次に、マシンをハードウェアの動作とは異なるように見せるためのオペレーティングシステムがあります。その上に、バイトコードを実行する仮想マシンと、PyvaやJathon、Haskellなどの高級言語があります。 、またはOCaml。バイトコードにコンパイルできます。

各レベルで、異なる計算モデルが表示されます。ハードウェアレベルをソフトウェアレベルから分離して、特定の計算モデルをマシンに割り当てることは非常に困難です。そして、それらはすべて相互変換可能であるため、究極のハードウェア計算モデルのアイデアはほとんど幻想です。

ラムダ計算機は存在します:ラムダ計算式を減らすことができるコンピューターです。簡単にできる広告。

特殊なマシンアーキテクチャについて

実際、ピーターテイラーの答えを補完し、ハードウェア/ソフトウェアの絡み合いをフォローアップして、特定のパラダイムによりよく適合するように特殊なマシンが製造され、そのパラダイムに基づいたプログラミング言語で基本ソフトウェアが記述されました。

これらには

基本的に、これらは必須のハードウェア構造でもありますが、特別なハーウェア機能またはマイクロプログラムされたインタープリターで緩和され、意図したパラダイムによりよく適応します。

実際、特定のパラダイムに特化したハードウェアは、長期的には成功していないようです。その理由は、バニラハードウェアにパラダイムを実装するためのコンパイルテクノロジがますます効果的になり、専用ハードウェアがそれほど必要なくなったためです。さらに、ハーウェアのパフォーマンスは急速に改善されましたが、改善のコスト(基本ソフトウェアの進化を含む)は、特殊なハードウェアよりもバニラハードウェアで簡単に償却できました。専門的なハードウェアは、長期的には競争できませんでした。

それでも、これに関する正確なデータはありませんが、これらのベンチャーは、マシン、メモリ、および命令セットアーキテクチャの進化に影響を与えるいくつかのアイデアを残したと思われます。


参照としてのチューリングマシンの選択は、それが実際に行われている範囲で、ほとんど歴史的に動機付けられています。
ユヴァルフィルマス

@YuvalFilmusそして、なぜそれが「計算可能性の満足できる定義」であったのですか?
babou

それがゲーデルの考えです。Bob Soareには、この問題に関してcs.uchicago.edu/~soare/Publications/compute.psにいくつかの言葉があります。
ユヴァルフィルマス

@YuvalFilmusこれは46ページです。私はそれがより満足すべきであるいくつかの理由を与えていることを意味します。彼らはナイーブかもしれません。成功を説明するより説得力のあるものがあれば、それは明確に言及している。
babou

セクション3.2をご覧ください。計算可能性の以前の定義がありましたが、説得力がありませんでした。チューリングのものは、少なくとも一部の主要な人々にとっては説得力のある最初のものでした。
ユヴァルフィルマス

21

チューリング完全は単なる名前です。必要に応じて、Abdul-completeと呼ぶことができます。名前は歴史的に決定され、多くの場合「間違った」人々にちなんで名付けられます。それは明確な基準を持たない社会学的プロセスです。この名前には、公式のセマンティクス以外の意味はありません。

命令型言語はチューリングマシンに基づいていません。それらはRAMマシンに基づいています。コンピューターはRAMマシンです。チューリングマシンは優れた理論モデルですが、実際のコンピューターのあまり良いモデルではありません。

基礎となるCPUがネイティブにサポートしていない場合でも、他のパラダイムに基づいたプログラミング言語は非常に成功する可能性があります。たとえば、プリンタはスタック言語を実行します。プログラミングには、マシンコード以上のものがあります。


「チューリングマシンは理論上の優れたモデルですが、実際のコンピューターのあまり良いモデルではありません。」無限のメモリ不足を除いて、実際のコンピューターに適したモデルではない他の理由は何ですか?また、関数型言語はラムダ計算に基づいていると考えるのは正しかったですか?
アブドゥル

5
λ

11
命令型言語は、Cで一定時間で配列アクセスを許可する傾向がありA[x]ます。チューリングマシンはこれを一定の時間で行うことはできません。そのため、理論的なコンピューターサイエンスでも、アルゴリズムの実行時間はチューリングマシンモデルではなく、RAMマシンモデルで分析されます。
ユヴァルフィルマス

14
実際、チューリングマシン実際のコンピューターに適しています。ただし、チューリングが論文を書いたとき、「コンピューター」はペンと紙で作業する人間の職務記述書でした。読み取り/書き込みヘッドはペンのモデルであり、テープは紙の無限のスタックのモデルです(小さなストリップにカットして接着するだけです)。アルファベットは、私たちのアルファベットのモデルです、そして有限の遷移は、頭の中で保持できる限られた量のルールのモデルです。
ヨルグWミッター

3
それが、地獄のチューリングがチューリング機械を選んだ理由について、私が今までに得た最高の洞察でした。私はいつも「なぜ彼がそのような安っぽい計算モデルを選んだのか」と疑問に思っていました。計算理論の発明が私に任されていたら(神が助けてくれます;私たちはそれほど遠くないでしょう)私はおそらく、まだより良い計算モデルを選んだと思いました。今、私は彼がどこから来たのかを知り、それははるかに理にかなっています。
ジェイク

10

「チューリング完了」とは、「チューリングマシンが計算できるものなら何でも計算できる」ことを意味するためです。


チューリング完全は、計算可能性の最初の哲学的に満足できる定義を思いついたチューリング(人)に敬意を表して命名することもできます。または、この概念を説明しているチューリングの論文に敬意を表して名前を付けることもできます。
ユヴァルフィルマス

1
@YuvalFilmus:アラン・チューリングのお母さんにちなんで命名できますが、ここでの主張はそうではないということです;
スティーブ・ジェソップ

@YuvalFilmusはそうかもしれません(ただし、私が知る限りではそうではありません)。しかし、用語の由来は二次的な重要性のみです。ここで重要なのは、この用語の意味です。
デビッドリチャービー

2
これは短くて甘いですが、多分少し短すぎます。チューリングマシンは何を行うのですか?まあ、彼らが「する」ことは、テープの読み取りと書き込みであり、ラムダ式はそうではありません。
セオドアノーベル

@TheodoreNorvellあなたのコメントは私が考えていたものに似ていると思います。ラムダ計算とチューリングマシンのパワーは同等であるが、メカニズムは異なることを知っていました(そして今では他にもあることを学びました)。それが単なる名前だった場合。
アブドゥル

6

あなたの質問の1つはまだ答えられていないようです:

その場合、ラムダ計算機と同等のものは何でしょうか?

A のLispマシン。LISP計算モデルに適合するように特別に設計されたハードウェア。ウィキペディアの記事では商用製品について説明していますが、大学の研究部長は彼のオフィスに手作りのものを持っています。


0

チャーチが発明したラムダ計算の形式の関数型言語は、チューリング完全であること証明されました。これは、ラムダ計算をチューリングマシンでの操作/計算に「削減」することにより、公開されている科学論文に見られる実際の数学的証明です。チューリング紙1936年以降、計算のさまざまな「包括的」モデルが提案/流通されました。すべてが同等であることはすぐにはわかりませんでした。それらが同等であるという証拠は、チューリングの論文の、1930年代後半と1940年代大まかに発表されました。

チューリングマシンは他のモデルより概念的に(ただし機能的には)シンプルではないため、チューリングの完全性が彼にちなんで名付けられた理由の重要な部分です。ラムダ計算などの他のアイデアはより抽象的で、主に数学/論理理論で始まりました。チューリングは理論機械を提案しました。「マシンは」文字通り「物理デバイス」。2つの異なる世界、応用と理論を結びつける/統合する、驚くべき概念的オブジェクト/構造。それは物理的な実体に新しい抽象的な意味を与えます、例えば「時間と空間」。数学者が「証明」の「技術」、「機械」、または「装置」を指すことは単なる偶然ではありません。チューリングは、彼の概念的な発明でこれらすべてを巧みに融合させました。その定義は非常に単純ですが、その分析は科学的/数学的思考の歴史でこれまでに見られた最も異常な緊急行動のいくつかを示しています。チューリングは、この重要性/力/可能性の多くを把握した最初の科学者/数学者でした。


言い換えれば、チューリングはチューリング完全性現象の重要性を最初に特定/「認識」したと言えるかもしれません。そして、CSはこの用語の使用を通じてこの記念碑的な成果を「認識」します。
vzn

バツ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.