私はウェブを検索してきましたが、やや矛盾した答えを見つけています。一部の情報源は、条件付き分岐と無条件分岐の両方がある場合にのみ、言語/マシン/あなたが持っているものはチューリング完全であると主張します(これは一種の冗長だと思います)。必要とされている。
ドイツのZ3とENIACについて読むと、ウィキペディアは次のように述べています。
ドイツの Z3 (1941 年 5 月に稼働中) は、コンラート ツーゼによって設計されました。これは最初の汎用デジタル コンピューターでしたが、すべての機能にリレーを使用していたため、電子的ではなく電気機械的でした。バイナリ演算を使用して論理的に計算しました。パンチテープでプログラムできましたが、条件分岐がありませんでした。チューリング完全性のために設計されたわけではありませんが、1998 年に発見されたように、偶然にもそうでした (ただし、このチューリング完全性を利用するには、複雑で巧妙なハックが必要でした)。
正確には、どのような複雑で巧妙なハックですか?
R. Rojas による 1998 年の論文 Abstract にも次のように記載されています (この論文はまだ読んでいないことに注意してください。IEEE からの抜粋です)。
1938 年から 1941 年の間に Konrad Zuse によって構築されたコンピューティング マシン Z3 は、パンチ テープにコード化された浮動小数点算術演算 (加算、減算、乗算、除算、および平方根) の固定シーケンスのみを実行できました。コンピューティングの歴史の観点から興味深い質問は、これらの操作が普遍的な計算に十分かどうかということです。この論文は、実際に、これらの算術命令を含む単一のプログラム ループで、特定の有限サイズのテープを使用する任意のチューリング マシンをシミュレートできることを示しています。これは、条件付き分岐と間接アドレス指定を純粋に算術的にシミュレートすることによって行われます。したがって、Zuse の Z3 は、少なくとも原則として、制限されたアドレス空間を持つ今日のコンピューターと同じくらい普遍的です。
要するに、SOers の皆さん、チューリング完全性のために正確に必要とされるタイプの分岐は何ですか? goto
無限のメモリを想定すると、またはjmp
分岐構造のみ (if
または構造なし)を持つ言語は、jnz
チューリング完全と見なすことができますか?