スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

中の人の徒然草456 ヒルベルトプログラムと不完全性定理はなじみ深いと思った夜

 昨日、仕事後に、以前から気になっていた、ゲーテルの不完全性定理と、ヒルベルトの功利主義について調べました。それでわかったのですが、どうやら、情報技術者が普段考える事が100年以上前に考えられていたようです。
 プログラミングはバイナリで成り立ちます。それ故、その仕様の整合性をテストする方法は、自己記述性に関係しています。何故ならば、結局はバイナリの塊であるプログラムの意味が、お客様が望むものなのかと、仕様そのものの無矛盾性は、システム屋ならば誰しも考える事でしょう。それがより厳密な形で、100年以上前にすでに考えられていたというのは、非常に驚きです。ヒルベルトとゲーデルは一流の情報技術者でもあったのでしょう。今生きていたら、きっとスーパーハッカーと呼ばれているでしょう。
 その中で興味を引いたのは、当時の数学者たちが集合論と微分積分に疑問を持っていたという点です。私も初めて集合論と微分積分を見たとき「あれ定義が足りないぞ」と思いました。微分積分については、高校生の時、極限の定義があまりにも曖昧だと感じました。「限りなく近づくとき」とか、言いたいことはわかりますが、数学的な表現でないと思ってしまいました。後でεーδ論法を知り、「これですっきしりた」と思いました。集合論についても、論理が正しいことは直観でわかりましたが、集合演算と属するという定義、および集合論そのものの定義が曖昧だと感じました。そして、パラドックスを見たとき、「やはりそうなるな」と思いました。当時の数学者も同様の事を考えていたと知り、遠いと思っていた数学者たちに親近感がわきました。
 自己記述性で一番わかりやすいのは、「私は嘘つきだ」という嘘吐きのパラドックスです。これは、真偽どちらにしても矛盾が生じるとのことです。その考え方は非常に面白いのですが、人間の論理が矛盾しているのではなく、ただ単に問題そのものの定義が足りないと思いました。
 というのも、嘘吐きという定義が明示されていないからです。嘘というのは、真実と違う事だと思います。そして、嘘吐きというのは、真実と違う事を言う人だと思うのですが、この定義が曖昧です。真実と違う事と言っても、どの程度の事を言うのでしょうか?1ミリも真実を漏らさずに、正確に表現することなのでしょうか?真実を言わないというのは、期間と頻度はどの程度を想定しているのでしょうか?仮に一生だとするのであれば、1ミリも真実から外れずにしゃべれる人間なんて存在しませんから、「人間は全て嘘吐き」であるという事になります。もう少し条件を緩くするのであれば、10回に1回程度真実と違う事を言ってもよいのでしょうか?そもそも、真実と違うといっても、人間が1ミリの狂いもなく真理を語るという行為をできるはずがありません。従って、うそつきのパラドックスが、自己矛盾に陥るのは、人間の限界ではなく、ただ単に定義が足りないだけなのです。
 一般の人はそんなこと生活に関係がないと思うでしょう。でも、システム屋をしていると、よく遭遇します。というのも、お客様の要望に曖昧性や矛盾がある場合が多いからです。ですから、嘘吐きのパラドックのように、問題文そのものの、厳密性と無矛盾性を考えるのが習慣になっています。
 しかしながら、クロネッカー方式の厳密性ではありません。あの考えは、有限にこだわりすぎて、逆に真実から遠のいています。何故ならば、自然界のものは全て無限だからです。一見曖昧に見えるカントール風の表記も、情報技術の厳密性に必要です。情報技術では、曖昧なものも含むものを、自己記述性で判定します。つまり、論理間の整合性だとか、現実とのマッチ具合だとかを判定しています。
 この件で思うのは、「公理が硬直している時点で間違い」だという事です。人間が考える真実なんて、時が変われば変わってしまいます。天動説と地動説のように、真が偽に、偽が真になるなんてことよくあることです。従って、自己記述がある理論とは、自己改変性がなければなりません。人間が目指すものは、「不変の真理」ではなく、「動的で時代に応じて変化する整合性があるもの」だと私は思います。私は常に自分が間違っている、もしくはよりよいアイデアが出現することを前提に考えますから、発明には自己改変性を入れて考えます。
 例えば、私が考えた情報集合論の正式な公理は二つだけです。「何らかの手段で人間が認識できるものが存在する。それを情報と呼ぶ。」です。これは自明で真です。これを否定するのであれば、「どんな手段を用いても人間が認識できるものはない」になりますから、真と決定してもよいかと思います。何故ならば、認識できるものがないのであれば、人間という存在そのものがないといっているのと同じになるからです。それに、この文章自体読めませんし、人類がここまで生存しているというのもあり得ません。ちなみに、もう一つの公理は、「人間が何らかの形で表せるものを情報集合と呼ぶ。」です。機械的に言えば、命名できるか否かにより決まります。情報集合論は「考えるを考える学問」なので、考えるためには、対象に名がなければならないからです。これは、対象を区分もしくは特定できなければ、対象について考えられないという事です。考える対象がわからなければ、対象を分析できないというのは、自明で真だと思います。なお、この時の対象とは、「○○以外」も指しています。すなわち、間接的命名も含みます。例えば、非数値集合といった時点で名前がついているのと同じです。
 情報集合論の無矛盾性の判定は、条件満たすものがあるか否かで考えます。もし、条件を見たす情報集合が一つもなければ、その構築した公理体系は偽となります。例えば、偶数でもなく奇数でもない自然数という条件の情報集合があったとします。この条件にマッチする情報は有りません。この時、自分が考えた情報集合の塊をさかのぼり、条件や適用順序を修正すればよいだけ(これが自己改変性)になります。このようにすれば、情報集合論で、学問そのものを比較したり、置換したり、合成したり、とどんな操作も可能となります。
 数学と人間の歴史(私が読んだ本はここから入っていた)を読んで思ったのは、人間の有限性を謙虚に認め、自己の理論が否定されることを認める勇気がなければ、人類は進化しないという事です。クロネッカーは、自分と違う理論を攻撃し続けました。そうした、人間の排他性が真実から遠ざけているのでしょう。ゲーデルの不完全性定理は、謙虚さや変化を認める勇気の大切さを再確認させてくれると思いました。
スポンサーサイト

テーマ : 情報処理技術
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

インドリ

Author:インドリ
みなさん、はじめまして、
コンニチハ。

ボクは、無限の夢(infinity dream)を持つネタ好きな虹色の鳥インドリ(in dre)です。
色々な情報処理技術を啄ばむから楽しみにしてね。

http://twitter.com/indori
は別人による嫌がらせ行為です。
私とは関係ないので注意して下さい。
次はなりすましブログなどをするかもしれませんが、ここ以外でブログをするつもりがないので、ここ以外にインドリのブログがあったとしても無視してください。


何度言っても分からない人がいるので、ここにコメント欄へ書き込むときの注意事項を書きます。


一、社会人としてのマナーをわきまえましょう。
一、妄想に基づく書き込みを止めてください。
一、暴言の類は書かないで下さい。
一、某誹謗中傷サイトの書き込みは彼らの妄想に基づく書き込みですから無視して、ここへ書き込まないで下さい。
一、コメント書く前に他のコメントよく読んでから行って下さい。
一、言いがかかり等の行為を禁止します。
一、その他常識的に考えて迷惑なコメントはしないで下さい。


以上のルールを守れない人のコメントは削除します。



利用上の注意
ここに紹介してある文章およびプログラムコードは正確であるように心がけておりますが、内容を保証するものではありません。当サイトの内容によって生じた損害については、一切の責任を負いませんので御了承ください。


執筆したCodeZineの記事


【VB.NETで仮想CPUを作ろう】

  1. VB.NETで仮想CPUを作ろう
  2. レジスタの実装
  3. 仮想CPUのGUI化
  4. テストドライバの改良
  5. CPUの基礎動作の実装
  6. MOV命令の実装
  7. ADD命令実装
  8. SUB命令実装
  9. INC命令&DEC命令の実装と命令長
  10. MLU命令の実装とModR/Mについて
  11. DIV命令の実装とイベント設計について
  12. 機械語駆動式 関数電卓を作ろう!
  13. 機械語駆動式 関数電卓を作ろう! 解答編(前半)
  14. 機械語駆動式 関数電卓を作ろう! 解答編(後半)


【仮想ネットワーク実装でTCP/IPを学ぼう】
  1. TCP/IPの基礎と勘所
  2. ネットワークアクセス層の勘所
  3. インターネット層の勘所
  4. トランスポート層の勘所
  5. アプリケーション層の勘所
  6. セキュリティの基礎と仮想ネットワークの仕様
  7. GDI+と独自プロトコルの定義



【並列化】
インテル Parallel Studioを使って並列化プログラミングを試してみた
並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」


【TBBシリーズ】
  1. インテル スレッディング・ビルディング・ブロックの概要
  2. インテルTBBから学ぶループの並列化
  3. スレッドセーフとインテルTBBのコンテナ
  4. インテルTBBのスレッドクラス


【OpenMPシリーズ】
  1. OpenMPの基礎構文
  2. OpenMPの実行時ライブラリと並列ループ
  3. OpenMPのメモリモデルとfork- joinモデル

最近の記事
最近のコメント
月別アーカイブ
カテゴリ
Ada (9)
COBOL (5)
C (9)
C++ (11)
C# (370)
D (25)
Java (8)
Perl (1)
Ruby (14)
PHP (2)
Boo (2)
Cobra (2)
LISP (6)
F# (33)
HTML (0)
XHTML (0)
CSS (0)
XML (0)
XSLT (0)
Scala (4)
WPF (0)
WF (2)
WCF (0)
LINQ (4)
MONO (5)
Linux (0)
MySQL (0)
ブログ内検索
リンク
最近のトラックバック
RSSフィード
ブロとも申請フォーム

この人とブロともになる

QRコード
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。