クレタ人の踵

AIならびにRobotに関する雑記。 世迷言など。

クレタ人の踵aibo Owner's WEBRINGに参加してます。
【ID:120 所有者:FebruaryMarch
[ 二つ前へもどる | 前へもどる | 次へ | 次の次へ ]
[ 前の5サイトを表示 | 次の5サイトを表示 | ランダムで移動 | リストを表示 ]

スポンサーサイト

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

コンピュータは人間のように考えられるか?[2]

コンピュータは人間のように考えられるか?[2]
数学をする万能チューリングマシン


関連
ロボットは心を持つか?
コンピュータは人間のように考えられるか?[1]

 チャーチのテーゼでコンピュータは考える、と言ってみたところで、このままでは単なるおまじないである。鰯の頭も信心だが、信心するにしてももう少し裏づけは欲しい。
 そんなわけで、とりあえず、数学をするアルゴリズムの具体例をひとつ取り上げてみたい。ところで、これを読んでいる方にお願いがある。今回は他の回に比べても格段に手抜きをするつもりなので、申し訳ないが「ゲーデル数」について自分で調べて欲しいのだ。これを説明するのはけっこう骨が折れるので、普通は本を一冊書くことになっている。とてもじゃないが、FMは、そんなめんどくさいことをやる気はない。今回必要なのはゲーデル数が数学のすべての命題と一対一対応で相互に変換可能であることだけである。興味のある人は不完全性定理とかゲーデルの他の業績について勉強してもらってもかまわないが、そこいらへんは個人の好みでどうぞ、といった感じだ。

構文だけC風に書いてみる


#define WORKSIZE VERY_LARGE_ MEMORY_SIZE

mathmatical_turing_machine()
{
unlimited long g;
/* 無限多倍長整数 g を定義 */
propositional function* one_turing_machine;
/* デコードした命題を格納する変数(ポインタ) */

g = 0; /* 0から始める */

while( 0 == 0 ) /* 常に真、ようするに無限ループ */
{

if( is_gödel_number( g ) )
/* gがゲーデル数かどうかの判定、ゲーデル数ならデコードして解く */
{
one_turing_machine = decode_gödel_number( g );
/* ゲーデル数のデコード */
concurrent_solve( g , one_turing_machine, WORKSIZE );
/* 各命題を並列に解く */
}
else
{
/* ゲーデル数でなければ、なにもしない */
}

g++; /* gに1を加えて繰り返し */

}
}

 

 いきなり無限多倍長整数とか出てくるのでCでも何でもないのだが、雰囲気だけ感じてもらえれば良い。ゲーデル数の判定はデコードと一緒にしたほうが効率は良いが、あまり本質的な問題ではないので見易さを優先している。is_gödel_numberとかdecode_gödel_numberとかいった関数が実際に書けるのはゲーデルが説明してくれているので、そちらを参照して欲しい(公式さぼりモード)。
 若干、問題があるのはconcurent_solve関数だ。チューリングマシンなどの仮想コンピュータであればこういう関数は作って良いことになっている。というか、作れないと計算可能性問題にたいして何かしら意味のある発言を行うことができない。
 ざっくばらんに言うとこの関数、与えられた命題を実行するプロセスを発行したらすぐに帰ってくるOSのexec処理みたいなものなのだが、現実のコンピュータとは以下の2点で異なっている。
  1. ほぼ無限大のメモリをプロセスに割り当てられる
  2. 実行したプロセスが無限ループに入っても気にしない
 無限ループに入っても気にしないでいられるのは、実質的に1のおかげなので、ほぼ無限のメモリを使えるのが、この関数の仮想的な所以である。
 なんでこんなものが必要なのかというと、数学の問題の中には、答えがないものが含まれているからだ。答えが出たところで個々のプロセスは停止するが、「答えのない」プログラムは停止せずに動き続ける。これはバグではない。バグではないが無限に動き続ける(つまり帰ってこない)。
こういったゾンビっぽいプロセスをほぼ無限に容認し続ける必要があるので、このプログラムを動かすコンピュータは、ほぼ無限のメモリを有すると同時に、ほぼ無限大の処理能力を要求されることになる。
 さて、注意書きはこの程度にして、このプログラムの意味を考えてみよう。ほぼ無限大のメモリと無限大の処理能力を持つコンピュータでこのプログラムを動かすとどんなことになるのか?
 答えのある命題とその答えがすべて出力されます
 ようするに数学はこれで全部、ということになる。
 数学の問題を端から順序良く並べて「全部解く」だけのプログラムである。

数学者が失業しない理由

 チャーチのテーゼをもとにした場合、この「ほぼ無限大の処理能力とほぼ無限大のメモリ」を持つコンピュータが必要となるため、実際問題として、こんなものが「考えている」とか言われてもなかなかピンとこない。ただ、これを数学用語でいうと「有限の処理時間と有限のメモリ」となる。
 なんだ、ぜんぜん反対じゃないか、と思われるかもしれない。しかし、数学では「無限」と「ほぼ無限」とはまったく別物である。いくら大きな数であっても「本当の無限」でない以上は有限であるというのが数学の立場である。
 ただ、この主義をどこまでも貫くのは現実のコンピュータではかなり辛い。そこで計算可能性だけではなくて、P≠NP問題のような「実質的な」計算可能性も研究しようということで計算機科学という分野が生まれたわけである。
 ロボットの場合はもっとシビアで、実時間応答性という問題も考慮に入れなければならない。数学という天上の世界では「ほぼ無限大の処理能力とほぼ無限大のメモリを持つコンピュータ」というトンデモ概念を持ち出して人間と同等に考えられるモデルが提案されたわけだが、実時間応答性まで含めた思考モデルはいまだ提案できていないのが現状である。
 もうおわかりかと思うが、本シリーズだけテーマが「コンピュータ~」になっているのはFMの気まぐれではない。「ロボット~」だと実時間応答性の問題が出てくるので、明快に「YES」などと答えられないのだ。この点だけとってもFMは姑息であることがよくわかると思う。ついでに言えば「(仮想)コンピュータ~」なのであって、意図的に省略しているのだから、姑息というより卑怯である。
(つづくよ~)

まとめ
 ほぼ無限の数学者がいれば、数学の問題はほとんど解ける。
 ほぼ無限のラーメン職人がいれば、究極のラーメンができるかもしれない。
 誰が食べるかはまた別問題。
 FMは姑息で卑怯。
スポンサーサイト

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://febmarch.blog10.fc2.com/tb.php/13-0f2889bf
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。