この答えの要点は、Turing Machinesがプログラムできるすべてのものを模倣できること、そして無限オブジェクト上で、無限オブジェクトのプログラム計算を行うことです。
これは、回答を正当化する一般的な理論的フレームワークよりも、特定の質問に焦点を当てた2番目の回答であり、質問のより一般的なタイトルに回答するには間違いなく必要です。これは、OPの質問に対する私の以前の回答と完全に互換性があります。両方とも、正確にはアルゴリズムとは何ですか。そしてチューリングマシンはある時点で無限のものを想定していますか?、私がより理論的な文脈を発展させた答え。これは両方の質問に答えると見なされるかもしれません。
すべてのチューリングが計算モデルを完了できるように、チューリングマシンは無限大を処理する機能を備えていますが、列挙可能な無限大しかありません。私たちの問題は、この無限大の一部しか観測できないことですが、観測できる部分は無限なので、全体を考慮する必要があります。
もう1つの問題は、有限に指定されたエンティティのみを処理できることです。実は、私たちが知っている科学の構造全体は、有限に指定されていないエンティティを考慮すると、定義の一貫性をチェックすることができなくなり、定義が何であるかさえ知ることができなくなります。有限の時間。
そのような共用体で許可されるものを適切に有限に制限できない限り、無限共用体でのクロージャが必要なセットを定義するという事実にいくぶん類似した別の基本的な問題がある可能性があります。しかし、私はこの問題を完全に理解しているとは思いません。
私が言ったように、チューリングマシンは無限を処理する能力を持っています。私は、そのような基本的なトピックについて何を話しているのかを知っているはずの、いくつかのハイレップユーザーのよく賛成された他の回答と矛盾しています。
問題は、チューリングが理論的目的を達成するために非常に基本的な計算モデルを選択したことです。シンプルなほど良い。それは、プログラミングの機械語とほぼ同じ、より高度で洗練された計算モデルです。つまり、高水準のプログラミングで意味をなす概念を認識できないような、非常にあいまいなものです。実際のところ、TMは機械語と同様に、直接表現できる以上に多くのことを模倣できます。
さらに、チューリングマシンのこれらの制限を実際に誰も信じておらず、多かれ少なかれエキゾチックな機能を備えた多くの種類のTMが考案されています。いくつかの無限のセットが呼び出された場合は帰納的可算 TMが実際に無限の計算を必要としない列挙(の表現)そのメンバーは、(見ることができるので、それはある列挙子としてチューリングマシンにホップクロフト・ウルマン1979、167ページ)。:もちろん、我々は有限の計算通りのような質問に答えるであろうと、常にエンコードすることができるものですが23 のR D
それらの列挙によるセットのメンバー?しかし、正しい答えが得られたときに人工的に停止される無限計算として実装されることもよくあります。
実際、すべてが有限であるがTMに制限がないと述べているすべてのユーザーは、Turing Machinesを標準定義で検討していることを非常に注意深く追加しています。問題は、標準的な定義が理論を単純化するための単なるデバイスであるということですが、計算構造を理解しようとするときはほとんど無関係です。
実際には、計算で重要な唯一のことは、すべてが計算可能な方法で有限に指定されなければならないことであり、有限であることではありません。
チューリングマシンは有限のオブジェクトでなければならないことを前提としています。しかし、それは真実ではありません。読み取り専用で、すべての整数値の表形式の関数が含まれる2番目のテープを使用して、制限なしにチューリングマシンのモデルを定義できます。それは無限です。しかし、そのテープの内容が計算で指定されている限り、追加の計算能力を購入することはありません(計算能力は、それが有限に指定されていることを意味します)。追加のテープは、他のテープに埋め込まれたTMマシンで置き換えることもでき、追加のテープで探すのではなく、回答を提供します。より高いレベルから、違いは見えません。
実用的な実現の観点からは、fact
チューリングマシンで階乗を計算し、それらを追加のテープに集計することができますが、別のTMは追加のテープから集計された階乗を使用し、集計がまだ欠けているときは常に最初のTMで待機しますエントリ。しかし、2台目のマシンは、テープの内容が最終的に無限であると想定しています。集計マシンは常に動作する必要はありませんが、テーブルからデータが要求され、そこにデータが見つからない場合は常に計算を再開する必要があります。
質問に戻ると、無制限の整数と無限テーブルの主な違いは、整数が有限で無制限であるが、有限時間で完全に計算されることだけです。無限テーブルは無期限に計算され、有限ですが、それでも無限に成長し続けます。それは問題ではありませんが、違いです。無限オブジェクトは有限近似によってのみアクセスできますが、無限です。計算可能な無理数は、この意味で、少なくとも2進数として表現するための無限のオブジェクトです。
すべてのアルゴリズムは、いくつかの数学的理論の文脈で定義されています。そして、無限テーブルと一緒のテーブルルックアップはアルゴリズムです。ただし、これは、各整数引数に対して公理化される関数の値を(集中的ではなく)広範囲に指定する、有限に定義された無限の公理のセットを持つ数学理論のアルゴリズムです。(前の質問に対する私の回答を参照してください)。そうすれば、理論の公理に証明可能な真のステートメントを常に追加できるため、そうすることは常に正当です。
現在の質問で再現されているように、Usulのステートメントは私の意見では正しくありません(すべてが定義の問題でもあります)。あなたが再現しなかった彼の回答における彼の結論は、無限テーブルの使用は、アルゴリズムの不均一なモデル、異なるマシンのコレクション、およびそのようなものによってのみ実装できるため、アルゴリズムと見なすことができないということです任意の入力サイズの「全体」の問題を解決するために実装できる「有限の記述がない」を使用します「これは間違っています。別個の定義のドメインを持つ独立したマシンへの彼のパーティショニングは、物事を行うには間違った方法です。正しい方法は、適切に収束できる、より大きな定義のドメインを持つ一貫したマシンの無限シーケンスを持つことです。これは、質問に答える無限機械に当てはまります。これは、Dana Scottによって定義された計算の意味論の数学的理論の1つの本質的な目的です。適切な数学的装置を使用すると、無限表現(eまたはπ)、またはすべて計算可能な無限データ構造。(この質問に対する私の最初の回答を参照してください)。
このような無限エンティティを実際に計算する方法は、遅延評価、任意の時点で必要な部分だけを計算し、さらに必要になったときに残りの部分の計算を再開することです。これはfact
、テーブルからさらにデータが必要なときはいつでも、テーブルに格納される階乗計算をマシンで遅延計算することにより、上記で提案されたものとまったく同じ
です。
ある意味では、遅延評価は実際には有限のコードに基づいているため、コードスペースは有限でなければならないという(DanielVの回答の)主張を裏付けるように見えます。しかし、計算可能性はエンコーディングの普及ゲームであるため、とりわけ、コードとデータを区別することは、常に見ている人の目にはほとんど常にあります。実際、多くの最新のプログラミング言語は、値の意図的仕様
と拡張仕様をあまり区別せず、Dentotational Semanticsは実際には「2 + 2」と「4」を区別しません。セマンティクスとは、「Xとは」などの質問をするときに私たちが話していることです。
静的とも見なされるコードの有限性のこのビューは、無限のテーブル(コードの一部と見なされる)が、データとして使用される無制限の整数と等しい基礎で見られないもう1つの理由です。しかし、それは、メタプログラミング、再帰言語、およびeval
関数の使用における既知のプログラミングの実践を生き残ることができないもう1つの幻想です。これらの言語では、コンピューターが実行されている限り、実行中のプログラム自体によって制限なしにコードを拡張できます。確かに、独自の移行ルールを変更し、制限なく数を増やすチューリングマシンを検討することができます。これは、ユニバーサルチューリングマシンの動作にかなり近いものです。
理論的なフレームワークを設計する場合、単純さと目立ちやすさや表現力の間には常に緊張があります。単純さにより、特に特定のプロパティを証明したり、他のフレームワークに還元したりする場合に、フレームワークの分析がしばしば単純になります。しかし、エンコードする必要のある高レベルの概念を表現することはしばしば不便です。Turing Machinesを使用してプログラミングするのではなく、より表現力があり目立つ高水準言語を使用してプログラミングします。同時に、セマンティックの等価性に基づいて、コードとデータの区別などのいくつかの障壁を取り払う場合があります。チューリングマシンは単純に見えますが、基本的な定義をはるかに超える可能性があります。