Investor's wiki

チューリング完全

チューリング完全

チューリング完全とは、必要な命令とともに十分な時間とメモリが与えられれば、どんなに複雑であっても、あらゆる計算問題を解決できるマシンを指します。それらのほとんどはチューリング完全(C ++、Python、JavaScriptなど)であるため、この用語は通常、最新のプログラミング言語を説明するために使用されます。

##チューリングマシンとは何ですか?

現代のコンピューターの前に、アラン・チューリングは、いつの日か問題を解決できるマシンがあるだろうと仮定していました。このマシンはチューリングマシンとして知られるようになりました。

アランは自分のマシンを、バイナリコード(1と0)の形式で情報が書き込まれた長いテープとして想像しました。マシンには、各正方形を1つずつ読み取るテープに沿って移動する読み取り/書き込みヘッドもあります。コードはマシンに計算問題を要求し、テープは解決策を達成するために必要な長さになるでしょう。

ヘッドがテープに沿って移動すると、マシンはそれがどのように反応するかを管理する簡単な指示に従います。テープを読み取り、指示に従い、特定のアクションを実行して、テープが移動するときに新しいコードを記述します。この新しいコードパターンが問題の答えです。チューリングの架空のマシンは、コードで表現できる(そして計算可能な答えがあった)計算問題に答えることができます。

デバイスまたはプログラミング言語は、プログラムを実行するか、チューリングマシンが実行または解決できる問題を解決することにより、チューリングマシンを複製できる場合、チューリング完全であると見なされます。一方、デバイスまたはプログラミング言語がそれを実行できない場合、それはTuringIncompleteであると言われます。

単純な計算機は、数種類の計算しか実行できないため、TuringIncompleteであるシステムの例です。対照的に、プログラム可能な関数電卓(あらゆる種類の計算を実行できる)はチューリングマシンと見なすことができます。

##ブロックチェーンとチューリング完全性

ブロックチェーンテクノロジーの一部のアプリケーションはチューリング完全ですが、他のアプリケーションはチューリング不完全です。これは、実装されているスクリプトテクノロジによって異なります。たとえば、ビットコインで使用されるスクリプト言語は、その目的を果たし、複雑さが増すと問題が発生する可能性があるため、意図的にTuringIncompleteとして設計されています。シンプルに保つことで、開発者は、それが使用される限られた数の状況でどのように反応するかを高精度で予測できます。

一方、イーサリアムはチューリング完全ブロックチェーンとして構築されています。スマートコントラクトを構成する契約を理解する必要があるため、これは重要です。チューリング完全であることにより、イーサリアムは、まだ考えられていないものであっても、将来の合意を理解して実装することができます。言い換えれば、イーサリアムのチューリング完全性は、正しい命令、十分な時間、および処理能力があれば、コードベースを使用して事実上すべてのタスクを実行できることを意味します。