抽象マシンとコンピューターアーキテクチャ間のギャップを埋める?[閉まっている]


11

抽象マシン(Turingマシンなど)とコンピューターアーキテクチャ(仮想マシンのアーキテクチャ、Von Neumannのアーキテクチャを含む)の間には常に繋がりがありません。だから、私はそれらがどのように関係しているか知りたいですか?一方が他方にどのように影響しますか?参考文献も歓迎します。ありがとう。


7
チューリングマシンは計算可能性について推論する理論的なコンピューターサイエンスモデルです。同様に、ラムダ計算は計算のためのコンピューターサイエンスモデルですが、プログラミング言語の設計で実用的なアプリケーションを見つけました。ラムダ計算、チューリングマシン、および実際のコンピューターは、計算できるものに関しては互いに同等ですが、動作方法は完全に異なります。特に、これらの計算の理論モデルは、実際のハードウェアが効率的にできることを説明していません。
アモン

2
@amonあなたはすでにほとんどの答えを書いているように見えますが、なぜそれをコメントで「無駄にする」のでしょうか?

他の人が指摘したように、「コンピューター」にはいくつかの数学モデルがあります。言語(部分再帰関数、ラムダ計算)に近いもの、ハードウェアに近いものです。必要に応じて、RAMマシン(Wikipediaリンク)をご覧ください。Turingマシンよりも実際のハードウェアに近いです。
ロレンツォデマテ

回答:


23

チューリングマシンおよび類似の「マシン」は計算のモデルであり、次のような問題を調査することを目的としています。

  • 計算できるもの
  • 問題の複雑さのクラス
  • 複雑度クラス間の関係
  • 何かを計算するさまざまな方法の等価性

そのためには、マシン自体をできるだけシンプルにする必要があります。プログラマの利便性や厄介な実装の懸念は重要ではありません。これらは数学的なオブジェクトであり、それらのために直接書かれたプログラムは非常に少ないからです。

逆に、仮想マシンアーキテクチャと実際のシリコンベースのマシンアーキテクチャは、特定のプログラムの実行に集中してます。マシンは、上記の懸念に厳密に必要なものよりも複雑に作られており、興味深いことをするための命令がより少なく(そしてより明白に)なります。理解しやすい(そして効率的に実装できる)必要があるため、それほど複雑ではありませんが、より複雑です。

したがって、2つのアプローチは基本的に対立しています。どちらもコンピューターサイエンスの分野に属しているだけでなく、お互いにあまり関係がありません。



4
@Timもちろん、Turingマシンを出発点として抽象マシンの概念を紹介し、その後、より有用な抽象マシンにすぐに進むと思います。

4

主な関係は、物理構造の理論構造をシミュレートできることです。

物理的なものが理論的なものすべてに対応できるという事実は、理論的な機械の理論的なテストと分析が現実世界で実装可能であると認識される能力をもたらします。

停止の問題は、チューリングマシン上で解決不可能であることが示された完璧な例です。したがって、チューリングマシン上で証明することにより、チューリングマシンの法則を遵守する実際のマシン上では解決できないことがわかります。

数えることで物事を合計することと、紙に書くことでそれを行うことの違いです。数えることの現実は、紙の上で合計することと同じルールを満たしていることが証明されています。したがって、物の物理的なカウントをシミュレートすると、結果は現実の世界に適用できると認識されます。したがって、結果を出すために物理的なお金をカウントする必要なく、カウントを精神的にシミュレートすることにより、2つのキャンディーバーがどれくらいの費用がかかるかがわかります。

人々は現在、「量子チューリングマシン」として知られる理論モデルの分析とテストを行って、量子コンピューティングマシンで利用できる機能を確認しています。モデルの物理的なバージョンが非常に高価で、まれであり、現在の実装がまだ非常に不足している場合、人々はこれらのモデルで作業することは理にかなっています。理論モデルは、物理的な実装が改善されたときに何ができるかを示すために使用されます。


1

これらは、スペースシャトルが、あなたがあなたの息で膨らませてから手放し、飛び去るのを見るバルーンに関係しているのとほぼ同じ方法で関係しています。

何かを反対方向に推進するために一方向に何かを追い出すという基本原則があります。

それが類似点の終わりです。


1

理論上の機械は、実世界の計算と数学の間のギャップを埋めていると思います。チューリングマシンは、実世界のアーキテクチャまたはプログラミング言語をシミュレートするのに十分強力で、簡単にシミュレートできるほど単純であり、最も重要なことには、合理的な単純な数学的推論と証明の対象となるほど単純です。


1

計算の定義は「コンピューターが行うこと」ではないことを知っておくことが重要です。計算はコンピューターよりも前のものです。コンピュータには、計算タスクを定義するためではなく、計算タスクを支援するために作成されたため、名前が付けられました。

したがって、チューリングマシンはコンピューターの動作に関するものではありません。問題が計算可能かどうか、つまり、公式の論理的/数学的プロセスによって解決できるかどうかです。そのプロセスの実装方法については何も述べていません。それが計算可能であるならば、それは十分な時間が与えられ、鉛筆と紙との人間によって解決することができ、または持つコンピュータまたは(これは重要なことである)を持つすべてのことを示すことができるシステムチューリング完全

したがって、チューリングマシンは2つの非常に重要なことを行います。

  1. 問題/タスクの計算可能性のテストを提供します。
  2. 計算可能なタスクを計算できるかどうかを示すテストをシステムに提供します。

最初の点は、現実世界の実装に気を取られることなく問題について考えることを可能にします。チューリングマシンには無限のリソースがあるため、実際のハードウェアは無関係な詳細(「メモリまたはストレージスペースが不足するとどうなりますか?」など)で人々を混乱させることが多いため、これは良いことです。証明可能な理論的解決策をチューリングマシン用に開発できます。その後、誰かが行う必要があるのは、それを特定のアーキテクチャで動作するものに変換することだけです。

2番目のポイントは、多くの異なるテストを実行することなく、実装の機能を検証することを可能にします。チューリングマシンをシミュレートできる場合、チューリングマシンでできることは何でもできます。Turing Machinesは計算可能なものをすべて計算できるため、計算も可能です。

つまり、チューリングマシンと真に実用的なコンピューターアーキテクチャ(仮想アーキテクチャも含む)との関係は、計算できるという1つのことです。

Von Neumannのアーキテクチャは、効果的な汎用電子デジタルコンピューター用のデザインテンプレートを作成する試みでした。チューリングの仕事は、その有効性の証拠を提供しました


-1

考えてみると、アーキテクチャは抽象的なマシンです。彼らは、注意深く作られたシリコンの塊がどのように「振る舞うべきか」を説明しています。アーキテクチャとチューリングマシンの違いは、アプローチの根本的な変化よりも規模の問題です。

チューリングマシンの利点は、チューリングマシンを使用して非常に簡単に実行できる便利な証明のセットがあることです。チューリングマシンをシミュレートするのに十分な強力なマシンであれば、チューリングマシンで可能な問題を解決できることを証明するのは簡単です(duh)。ただし、Computable関数を定義すると、さらに興味深いものになります。計算可能な関数には多くの互換性のある定義があることがわかります。すべての動作を計算可能な関数として定義できる場合、チューリングマシンでシミュレートできます。

したがって、LISPスタイルのプログラムを直接サポートするアーキテクチャと、手続き型のx86のようなアーキテクチャがあるとします。あなたの友人は、「LISPの方が表現力が高いので、x86では書けないこのマシンでプログラムを書くことができる」と主張しています。これはカウンターするのは残酷です(特に、おそらく十分なLISPを知らないので)。ただし、チューリングマシンのようないくつかの抽象的なマシンを悪用することができます。

  • LISPマシンは派手な場合もありますが、できることはすべてラムダ計算に還元できます。あなたの友人は熱心にうなずきます。ラムダ計算は、関数型プログラマにとってはちょっとしたカルトなことです。
  • 私のx86は派手かもしれませんが、それができることはすべて登録マシンに還元できます。もう一度、あなたの友人からの質問はありません。レジスターは、現代のコンピューター理論においては非常に優れています!
  • 任意の登録マシンは、その登録マシンをシミュレートするチューリングマシンとしてモデル化できます。今あなたの友人は、なぜあなたがパンチテープ時代に戻っているのか疑問に思っています。
  • また、ラムダ計算機をチューリングマシンに縮小することもできます。*あなたの友人は反対しますが、あなたは彼らを教会チューリングの論文に向け、彼らは恥ずかしげに頭を垂れます。
  • したがって、私のx86ボックスは、あなたの派手なLISPベースのマシンができることなら何でもできます!

もちろん、他にもたくさんの例があります。ConwayのGame of Lifeはチューリング完全であることが証明されました。つまり、理論的にはコンピューターでできることなら何でもできるということです。これを行う最も簡単な方法は、Lifeにチューリングマシンを構築することでした。これは、抽象マシンと呼ばれるものがリテラルアーキテクチャとして扱われる場合のケースになるためです。Lifeの計算可能性の主張が抽象モデルの助けなしではどれほど難しいか想像できます(Lifeが計算可能であることを証明するためだけに、キャッシュピークを備えたx64をモデリングしていないのは確かです!)


最後に、アーキテクチャと抽象マシンの大きな違いは、アーキテクチャは通常パフォーマンスに関係しているということです。アーキテクチャは、どれだけ速く何かを実行できるかを知りたいと思っています。抽象マシンは、できる限り知っているだけで満足する傾向があります。フォンノイマン状態マシン用に開発されたユニバーサルコンストラクターについて考えます。UC 機能することを証明するのに十分であり、著者が実際にそれを見るのに十分な計算能力を持っていなかったことを決して忘れないでください。

アーキテクチャがどれだけ速く動作するかを実証するための価格体系は、すべてを計算できることを証明するのが非常に難しい場合が多いということです。そのために、アーキテクチャはすぐに戻り、抽象的なマシンの使用を開始します。


1
あなたの与えられた推論の例は技術的に正しくありません-チューリングマシンが登録マシンまたはx86マシンができることをすべてできると述べる場合、x86マシンが登録マシンまたはチューリングマシンができることをすべてできるということを必ずしも意味しませんできる。反例として、任意の有限オートマトンもチューリングマシンに還元できますが、明らかにラムダ計算またはLISPと同等ではありません。方向性が重要です-「私のx86ボックスは、お手持ちのLISPベースのマシンでできることなら何でもできる」と述べたい場合、x86から​​Turingではなく、Turingからx86に減らす必要があります。
ペテルス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.