人喰いワニのジレンマを、インドでわしも考えた
ぼくはこう見えても、ってどう見えてるか、分かったもんじゃないですが、もともとは、プログラマのはしくれだったんです。
というか、今でもandroidでdroidscriptを使って「毎日が日曜プログラマ」という感じで楽しんでますので、「元sfファン」でしかないのとは違って、「わし、現役のプログラマなんよー」と胸を張って言ってもいいくらいのものなんです。
そこで、たわしさんの記事(http://www.tawashix.com/entry/hitokuiWani)の舞軀眞(ぶくま)には、どなたかにお任せ、と書きましたが、人喰いワニさんのジレンマに、よし、きょうは挑戦してしまおうではないかと、ビールに酔った頭で考えてしまったのです。
というわけで、以下は、酔っぱらいのたわごとですので、間違いがあっても、「あらまあ、おかわいそうに」くらいに思える方だけに、読んでいただければ幸いと存じますです、はい。
さて、分九間(ぶくま)のほうで、ku__ra__geさんがおっしゃっているように、
『人喰い(行動予定, 予言)
= if (行動予定 != 予言) then
「喰う」
else 人喰い(!行動予言, 予言)』
#ku__ra__geさんの「喰わない」を「!行動予言」に変えています。
としたとき、「人喰い(喰う,喰う)」の結果は、「喰う」になってしまいます。
これは単なる実装ミスですね。予定と予言が合っているときは、食べてはいけないのですから。
別の実装、というか、一番シンプルな実装はこうです。
『人喰い(行動予定, 予言)
= if (行動予定 != 予言) then
「喰う」
else 「喰わない」』
この場合は「人喰い(喰う,喰う)」の結果は、「喰わない」になってしまいます。
しかし、これも実装ミスですね。「喰う」という予定なのに、「喰わない」という結果が出ているのですから。
ここまで考えてぼくが分かったのは、なーるへそ、これこそ、論理階梯の問題だったのか、ということです。
つまりですね、人間には、この問題に対して、上の二つの実装があることが理解できて、しかもそのどちらも、当初の問題の解決になっていないことが分かるわけです。
ところが、それは、いわば「コンピュータ」には理解できないわけです。
つまり、コンピュータのレベルで問題解決を与えると「間違った」プログラムしか書けない。
たわしさんが書いたような、「止まってしまう」プログラムは書けない、ということです(たぶん)。
これって、ゲーデルの不完全定理とも関係するような、結構、重要な話って気がするのですが、なにぶん酔っぱらいのおじさんが書いているたわごとにすぎませんので、おかしなところがあったら、びしびし指摘いただけたら幸いです。
てなことで、みなさん、またーーー。