チューリング完全とは何か?

このQ&Aのポイント
  • チューリング完全とは、あらゆる計算を行うことができるプログラムの性質です。
  • チューリング完全なプログラムは、FORTRANやC言語、Java、JavaScriptなどで記述されることがあります。
  • 一方、チューリング不完全なプログラムは、制約があるため、あらゆる計算を行うことができません。例えば、TeXやHTML、SQLなどが挙げられます。
回答を見る
  • ベストアンサー

チューリング完全とは何か?

プログラムのチューリング完全性とか万能チューリング機械ってあるじゃないですか。これって、どんな挙動のプログラムでも1言語で書けるって事ですか? 色々と調べてみたのですが、どのサイトもどの資料も説明が難しかったので、ここで質問してます。私の認識は下の通りです。 チューリング完全のプログラムは、FORTRAN、C言語、Java、JavaScriptなど。 チューリング不完全のプログラムは、TeX、HTML、SQLなど。 要するに、 TeXは数式や楽譜の作成くらいの機能に制限されている。その一方で、FORTRANは数学的計算は勿論、3Gゲームや通販サイトなどFORTRAN1言語だけで何でも出来て、ありとあらゆるシステム構築に使えるって事ですか? チューリングは、戦前イギリスの数学者の名前。彼は次の命題の証明をした。どんな複雑なコンピューターシステムでも中身を分析すれば、四則演算や条件分岐や反復など数種類の小さな基本的システムパーツの組合せになっている。FORTRANやC言語はこれを全て含んでいるから、FORTANは何でも出来る。一方、SQLは惜しいがチューリング完全に必須の基本的システムパーツが数種類だけ欠けていて、限界がある。SQLオンリーでゲームを作ろうとすれば、テトリスくらいなら出来るけど、ぷよぷよを作ろうとすれば別の言語を足す事になる。 正しいですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

私の認識にも間違いがあるかもしれませんが。 チューリング完全とは「チューリングマシンで実現できる」と言っているだけで、実際に何が「チューリングマシンでできる」かには言及していません。 よって > FORTRANは数学的計算は勿論、3Gゲームや通販サイトなどFORTRAN1言語だけで何でも出来て、ありとあらゆるシステム構築に使える 「数学的計算」「3Gゲーム」「通販サイト」などが作れるかどうか、と「チューリング完全」かどうかとは、直接の関係はありません。 > TeXは数式や楽譜の作成くらいの機能に制限されている 文章書くだけの人には馴染みが無いかもしれませんが、TeXにはプログラミング言語としての一面があり、これはチューリング完全になっています。 http://ja.wikipedia.org/wiki/Brainfuck このような、とても実用には使えない言語でも「チューリング完全」です。 また、チューリングマシンは、無限長の記憶領域を持ち、処理時間という概念はありません。 対し、現実のコンピュータは、記憶領域は有限であり、ある程度の処理時間が必要です。 チューリングマシンで「解ける」ことが判っている問題でも、現実のコンピュータではメモリが足りない、あるいは、計算時間が非現実的である、ということが沢山あります。 http://www.youtube.com/watch?v=Q4gTV4r0zRs 少し前に話題になった「組合せ爆発」の動画ですが、この「全ての経路を求める」問題は、正方形の分割数がいくつであろうとも、チューリングマシンを使って解を求めることができます。 しかし、実在のコンピュータで解く場合には、10x10で25万年かかっている、ということで「現実的には解けないのと一緒」と言えます。最後に出てきた高速のアルゴリズムでも、100x100等は「現実的には解けないのと一緒」でしょう。

five_163
質問者

お礼

さんきゅー

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

表現に微妙な気はするけどだいたいあってる. でも, 最後の段落はたぶん「構造化定理」だろうから, チューリングは関係ないと思うよ. ちなみに TeX でオセロはできる.

five_163
質問者

お礼

さんきゅー

関連するQ&A

  • プログラミング言語がたくさんある理由

    数学関係学科の大学生3年生女子です。 数学では論文の作成にTeXを使うので、学校で少しやっています。 そのほか少し興味があり独自にpythonの勉強をしています(さわりだけですが 笑) プログラミング言語では、そのほかにBASICやCとか耳にします。 R,というのもプログラミング言語なのかもしれませんが、少し調べると、COBOLとかFORTRANなんて言語もあるそうで、そもそもなんでこんなにプログラミング言語があるんでしょうか?

  • コンピューターシステムのXMLへの還元について

    現在のコンピューターシステムはチューリングマシンなど完全な数学的記述に還元できますが、 それはあまりに人間にとっては分かりづらいものになってしまうと思います。 最終的に機械語に関連付けられているXMLを用いれば XMLのみでシステムの設計ができるようになります その方が現今の多種多様の言語を混在しているよりいいと思いませんか

    • 締切済み
    • XML
  • Fortranによるオブジェく志向プログラミング

    私は、ずっと、手続き型のプログラミングをやってきて、言語はFortranであり、そのプログラミングの内容は四則計算、ループ、分岐、ファイル入出力みたいなものに限定されていました。 ところが、最近はじめて知ったのですが、Fortranの2003ぐらいになるとオブジェクト指向プログラミングに対応していてクラス、メソッド、インスタンスなどのような概念が出てきたようです(だいぶ前からあったのかもですが、最近まで知りませんでした)。 そこで2つ質問なのですが、従来使っていた手続き型のプログラムはすべて原理的にオブジェクト指向プログラムに移行可能なのでしょうか。無理に移行しなくてもいいとは思いますが、そういう越境のようなことができるのかということですが(手間だけかかって時間の無駄かもしれませんが、訓練という価値はあります)。そして、最終的にはプログラミングというものがすべてオブジェクト指向に収斂してしまうということになるのでしょうか。 もう1つはFortranでオブジェクト指向プログラムができるという場合、バージョンとかそれに応じた仕様とかでその度合いに違いがあるのでしょうか。今までFortranで手続き型のプログラミング(四則計算等)をやっていたのでコンパイラの選択による違いに大差ないという感じでした(あまり方言がないとか)。オブジェクト指向ということになると”これはできるけど、あれはできない”とか際どい問題があるように思います。C++とかJavaの参考書に載っていたようなことがFortranで本当にどこまでできるのかという疑問です。これが明確にならないとただでさえ難しいオブジェクト指向プログラムで私のアルゴリズムにミスがあるのか、アルゴリズムは問題ないけどコンパイラがそれに対応してないという問題の区別がつかなくなると思うのですが。 Fortranのオブジェクト指向の解説本を見たことがないのでお尋ねしました。よろしくお願いします。

  • 物理シミュレーションをする時、どのくらいプログラミングの知識があればいいのか?

    物理学で自然現象をパソコンでシミュレーションするとき、プログラム言語はどのようなものを使うのでしょうか?よく知られたC言語やJava等は使わないのでしょうか?専門的なプログラム言語がいろいろあるのでしょうか? 今後パソコンで物理シミュレーションを行うことになったとき、プログラムに関してはどのくらいの知識があればいいのでしょうか? 基本的な本を見るとBasicやFortranを使ってシミュレーションの説明をしているものがありますが、このような基本的な言語も使えるようになったほうがよいのでしょうか? C言語やJava、VBなど一般的によく知られたプログラミング言語も覚えたほうがよいのでしょうか?

  • テトリスについて

    皆様、宜しくお願い致します。 私はハッキリ言って、全てのゲーム類の中で最もテトリスが大好きです! 色々何とかマスターとか種類もあるようですが、私が好きなのは、一番初代というか、昔からアーケードにあったあのテトリスです。 近所に1件だけ寂れたゲームセンターにそのテトリスがあるので、よく行くのですが、出来ることなら自分用に1台欲しいくらいです。 あのアーケードゲームをそのまま手に入れることって出来るのでしょうか? それか、まったく同じシステムであれば、ゲームボーイとか、ニンテンドーDSでもいいと思いますが、そんなものってありますか?? 昔やったことがあるゲームボーイのテトリスは、十字ボタンが回転で、A?ボタンが駒を下ろす仕組みだったと思います。 そういうのはアーケードと操作性が違うので嫌いなんです…。 もの凄くわがままだと思うのですが、同調して下さる方いましたら、よい方法教えていただけませんでしょうか? どうぞ宜しくお願い致します。

  • 万能な記述形態って何種類あるのでしょうか?

    プログラマをやっています プログラミング言語を見ていくと ・アセンブラ→C言語→Javaの流れ チューリングマシンから、よく使うものを文法として括り出してきた ・Lisp ラムダ算法をプログラミング言語に落とし込んだ ・Prlog 述語論理をプログラミング言語に落としこんさ という風に、それぞれ元になっているモデルが違いますが それぞれが万能な記述形態で、どんな計算でも出来る記述携帯になっています それで疑問に思ったのですが 他にも万能な記述形態として知られている算法というのは他に何種類あるのでしょうか? 大学の初等数学までしか知らない人間レベルで分かる解説サイトなどもあれば教えて下さい

  • J2EEと.NETについて。【初心者です】

    Webシステムの勉強をするためにJ2EEか.NETのどちらかを勉強しようと思っています。簡単なシステムを作ってみたいと考えています。まったくの初心者で、プログラムはFortranとC言語を少し使ったことがある程度なのですが、どちらから勉強したほうがいいでしょうか? 最近の動向や、習得難易度、必要な知識などにも言及していただけると、助かります。 よろしくおねがいします。

  • C初心者に課題をください。

    現在学校でC言語の勉強をしています。 自分のC言語の実力は、基本情報のC言語がちょっと理解できるぐらいです。 しかも、Cを読むのは慣れていますが、あまり書いたことはありません。 そこで、C言語の実力向上を図って、自分に課題を出していろんなプログラムを作って行きたいのですが、さっそく何を作ればいいのかわかりません。 過去に自分がこんなプログラムを作ったとか、よい案がありましたら何でもいいので是非教えてください。 大体の機能と、あればヒントとか教えてくれる程度でいいです。 例) どんなプログラム?:電卓 機能:入力例(500*3)→表示(1500) 四則演算ができる。 続けて演算子と数値を入力すると表示結果と計算する。 よろしくお願いします。

  • 中高年のソフト開発のプログラマは周りに結構いるものなの?

    当方は、 45歳のソフトウェアエンジニアで、 現役にプログラムをがりがり書いていたりするんだけど。 この年になると、管理者になって、プログラムを仕事で作ることは なくってくるのが普通だと思うんだけど。 実際のところ、どうなんだろうか? ちなみ、いまやっている仕事でがんがん使える、 プログラミング言語は、 C,C++,Perl,Java,PHP,EmacsLisp,FORTRAN,VisualBasic,Smalltalk, MUMPS,PL/SQL,VHDL,VerilogHDL,JavaScript, など、なんてものがあるんだけど。 ただし、COBOLの経験はないけど。

  • fortranプログラミングでの数値計算と可視化環

    現在fortran77により数値計算し、可視化する環境を探しています。素人なので、アドバイス頂ければ幸いです。 背景:matlabで既にプログラム済みファイルを、fortranで書き直したい。プログラムは数値計算をしてその結果をグラフ(2D,3D)で可視化する物。matlab環境では計算時間がかかる為、fortranで時間短縮したい。 環境:Win XPへ所有しているマイクロソフトビジュアルFortran77(Ver調査中。7年くらい前の物)をインストールして、それを使おうと考えています。 疑問:どうやって計算結果を可視化するか?ポストプロセッサーとして、gnueplotやmatlabを使用するのは可能だと思うがそれが一番効率的なのでしょうか?ビジュアルFortranには可視化ライブラリみたいな物があるのでしょうか? 不足情報あればアップいたします。初心者ですが、アドバイスを宜しくお願いします。 追伸:研究室の過去の資産の関係でFortranを考えています。多言語でのメリットもあれば教えて頂たいですが、基本古い言語使用に対する中傷「のみ」はご遠慮下さい。

専門家に質問してみよう