東方算程譚

Oriental Code Talk ── επιστημηが与太をこく、弾幕とは無縁のシロモノ。

目次

Blog 利用状況

ニュース

著作とお薦めの品々は

著作とお薦めの品々は
東方熱帯林へ。

あわせて読みたい

わんくま

  1. 東京勉強会#2
    C++/CLI カクテル・レシピ
  2. 東京勉強会#3
    template vs. generics
  3. 大阪勉強会#6
    C++むかしばなし
  4. 東京勉強会#7
    C++むかしばなし
  5. 東京勉強会#8
    STL/CLRによるGeneric Programming
  6. TechEd 2007 @YOKOHAMA
    C++・C++/CLI・C# 適材適所
  7. 東京勉強会#14
    Making of BOF
  8. 東京勉強会#15
    状態遷移
  9. 名古屋勉強会#2
    WinUnit - お気楽お手軽UnitTest

CodeZine

  1. Cで実現する「ぷちオブジェクト指向」
  2. CUnitによるテスト駆動開発
  3. SQLiteで組み込みDB体験(2007年版)
  4. C++/CLIによるCライブラリの.NET化
  5. C# 1.1からC# 3.0まで~言語仕様の進化
  6. BoostでC++0xのライブラリ「TR1」を先取りしよう (1)
  7. BoostでC++0xのライブラリ「TR1」を先取りしよう (2)
  8. BoostでC++0xのライブラリ「TR1」を先取りしよう (3)
  9. BoostでC++0xのライブラリ「TR1」を先取りしよう (4)
  10. BoostでC++0xのライブラリ「TR1」を先取りしよう (5)
  11. C/C++に対応した、もうひとつのUnitTestFramework ─ WinUnit
  12. SQLiteで"おこづかいちょう"
  13. STL/CLRツアーガイド
  14. マージ・ソート : 巨大データのソート法
  15. ヒープソートのアルゴリズム
  16. C++0xの新機能「ラムダ式」を次期Visual Studioでいち早く試す
  17. .NETでマンデルブロ集合を描く
  18. .NETでマンデルブロ集合を描く(後日談)
  19. C++/CLI : とある文字列の相互変換(コンバージョン)
  20. インテルTBBによる選択ソートの高速化
  21. インテルTBB3.0 によるパイプライン処理
  22. Visual C++ 2010に追加されたSTLアルゴリズム
  23. Visual C++ 2010に追加されたSTLコンテナ「forward_list」
  24. shared_ptrによるObserverパターンの実装
  25. .NETでマンデルブロ集合を描く(番外編) ── OpenCLで超並列コンピューティング
  26. StateパターンでCSVを読む
  27. 状態遷移表からStateパターンを自動生成する
  28. 「ソートも、サーチも、あるんだよ」~標準C++ライブラリにみるアルゴリズムの面白さ
  29. インテルTBBの同期メカニズム
  30. なぜsetを使っちゃいけないの?
  31. WPFアプリケーションで腕試し ~C++でもWPFアプリを
  32. C++11 : スレッド・ライブラリひとめぐり
  33. Google製のC++ Unit Test Framework「Google Test」を使ってみる
  34. メールでデータベースを更新するココロミ
  35. Visitorパターンで遊んでみたよ
  36. Collection 2題:「WPFにバインドできる辞書」と「重複を許す検索set」
  37. Visual C++ 2012:stateless-lambdaとSQLiteのぷち拡張
  38. 「Visual C++ Compiler November 2012 CTP」で追加された6つの新機能

@IT

  1. Vista時代のVisual C++の流儀(前編)Vista到来。既存C/C++資産の.NET化を始めよう!
  2. Vista時代のVisual C++の流儀(中編)MFCから.NETへの実践的移行計画
  3. Vista時代のVisual C++の流儀(後編) STL/CLRによるDocument/Viewアーキテクチャ
  4. C++開発者のための単体テスト入門 第1回 C++開発者の皆さん。テスト、ちゃんとしていますか?
  5. C++開発者のための単体テスト入門 第2回 C++アプリケーションの効率的なテスト手法(CppUnit編)
  6. C++開発者のための単体テスト入門 第3回 C++アプリケーションの効率的なテスト手法(NUnit編)

AWARDS


Microsoft MVP
for Visual Developer - Visual C++


Wankuma MVP
for いぢわる C++


Nyantora MVP
for こくまろ中国茶

Xbox

Links

記事カテゴリ

書庫

日記カテゴリ

やっちまってくれよー

インスパイア元 → やっちまったよー

ポアンカレ予想のドキュメンタリ、すげ面白かったっす。
この調子でいろいろ解説してほしいす。

計算機科学(あるいは論理学)にもおもろい定理があります。
有名ドコのひとつが「ゲーデルの不完全性定理」。
ぜひともこいつの解説番組こさえてほしい。

プログラムってば有限時間の計算ののち
何らかの答え(それが正しいかはともかく)を出して停止するか、
もしくは無限ループにはまって動き続けるかのいずれかですわね。

ソースコード(プログラム)を食わせると、そいつを実行したとき
有限時間で止まるか否かを判定するプログラム(停止判定プログラム)は書けるか?

ゲーデルの不完全性定理は
「どんなに巧妙に停止判定プログラムを書こうとも、
 そいつを出し抜くプログラムが存在する」
→「そんなもん書けるわきゃねぇ」
ことを理論的に証明しちゃいました。

リクツは簡単で、そんなのができたんなら自分自身を食わせてみます。
するとその結果が出てくるか、あるいはいつまでも動き続けるかを
有限時間内に判定し停止させることができんというのです。

「私は止まります」と出力されたとしても信じられませんよね。
「私は正直者だ」の真偽はトートロジー(自己言及)になってて判定できないのと同じ。

「私は止まりません」と判定されたら矛盾が生じます。
「私は止まりません」と出力して止まっちまったんだからウソツキぢゃん。

この結果から「自動バグ探しプログラムは作れない」ことが証明されるんす。
自分自身のバグを(有限時間で)見つけられないんですねー

投稿日時 : 2007年10月21日 3:24

コメントを追加

# re: やっちまってくれよー 2007/10/21 11:02 はつね

つまり、この結果から「オレさまは絶対正しい」というオレ様理論もありえないってことが理論的に証明されるってわけですねー。

# re: やっちまってくれよー 2007/10/21 12:36 επιστημη

ぁぃ、そのコードが完璧であればあるほど、自分自身の完璧さを証明できなくなります。

オレ様プログラムが正しくなければ「オレ様は正しい」を出力できます。
しかし、オレ様プログラムが正しくあろうと努力すればするほど「オレ様は正しい」と出力できなくなっていくのです。

# re: やっちまってくれよー 2007/10/21 20:43 IIJIMAS

ヒルベルトが探し求めていた”完全な数学体系”をゲーデルとチューリングが存在を否定したお話ですね。

プログラムで言えば”万能プログラム”ですね。そんなものはありません…。

この事実のおかげで数学者もプログラマも機械に仕事を奪われずに済みそうです。

# re: やっちまってくれよー 2007/10/21 22:17 επιστημη

それそれ。
「無矛盾な公理系は自らの無矛盾をその公理系内で証明できない」とかなんとか、そーゆーやつ。
# 秋の夜長、GEB(ゲーデル・エッシャー・バッハ)でも読みなおそっかな

# re: やっちまってくれよー 2007/10/21 22:35 ネットクラゲ

自分自身を判定した場合、
「私は止まりません」と判定するように仕組んでおいて、
出力後に永久ループに入るようにしておけばどうでしょう?(笑)

# re: やっちまってくれよー 2007/10/21 23:27 επιστημη

# ネタにマヂレス
ひとまず却下。
ここでの"出力"とは"停止時の計算機の状態"なので。

# re: やっちまってくれよー 2007/10/22 18:43 どっと納豆

学生時代ここらを勉強してたので、
ついいまさら反応してしまいます。

ゲーデルの不完全性定理が成り立つのは、
帰納的に無限を扱う公理系です。
あの懐かしい数学的帰納法の公理なんかがまずいわけで。
多少ずれますが、単純な述語論理では、
真偽判定アルゴリズムが存在します。
数学体系を公理系の1次元配列として完璧に作るのは、
まず無理ということですね。
実は公理系の1次元配列である必然性はないんですが。

現在では、素数とあのゼータ関数で数学体系を
作り直そうと考える数学者も結構いるようです。
でも難しすぎてついていけません。
とりあえず爆発的に進歩しているのは事実です。
私が勉強した範囲でも、こちらのほうが集合論より
はるかに深遠で美しい気がします。
でもチューリングマシンやラムダ計算のコンピュータに
応用できるとは思えませんが・・・。

# re: やっちまってくれよー 2007/10/23 10:27 επιστημη

> ゲーデルの不完全性定理が成り立つのは、
> 帰納的に無限を扱う公理系です。

えーと、ぶっちゃけ"ペアノの公理系"てーことすかね?

ペアノの公理系(おもきし省略版)
「"はじめ"と"その次"が定義され、その双方がNに属するならNを自然数と呼ぼう」

# re: やっちまってくれよー 2007/10/24 0:51 どっと納豆

ペアノの公理系には限らないです。
公理系もいろいろに表せますけど、
"はじめ"と"その次"が定義され、"それらだけ"にしよう、
というような公理系は、不完全性定理が成り立ちます。
なので、おっしゃってることは事実上正しいです。(オイ)

ペアノの公理系もそういうものですし、
集合論とかラムダ計算なんかも、
自然数と等価なものが構成できて、アウトです。
ほかにも探せばズルズル出てくると思います。
要するにほとんどダメかも。(笑)

ですけど、数学の基礎である命題論理や一階の述語論理は、
無矛盾かつ完全であることが証明されています。
記号論理学のテキストによく出てくるので、
すぐ証明が見つかると思います。

# re: やっちまってくれよー 2007/10/24 8:44 επιστημη

あー、帰納的に無限を扱う公理系たとえばペアノでは不完全性定理が成立し、
他の多くの公理系もペアノに毛の生えたよなもんだと。

# re: やっちまってくれよー 2007/10/24 9:09 どっと納豆

ええ、そんな感じで。

タイトル
名前
URL
コメント