■[研究開発][妄想][egan] たまには「プレイ」しましょう 03:33
今回の要約: 実は、自然言語はプログラミング言語的な面も持っていた。
長いので要点だけ。
最初に考えていた事: 自然言語はプログラミング言語とは違い、チューリング完全ではない
あとで気付いた事:
- 自然言語の中でも、小説や歌なら、TAP言語での「プレイ」に相当しないか?
- どうも相当していそうに思える。では、人間はどのように、小説や歌を「プレイ」しているのか?ちょっと順を追って考えてみる。
- 人間の頭の中に、空の無名モジュール空間を用意する(小説/歌を読む/聴く前の状態)。
- このモジュール空間に、小説/歌に出てくる内容を順番に、かつ、副作用的(破壊的)に反映していく。反映するオブジェクト等に足りない情報は、先に定義された情報を再利用するか、とりあえず未定義のままにしておいてあとで補完する。必要になった段階でも未定義のままだった場合は、自分の常識から適当な値を採用する。
- ちなみに、この足りない情報を補う為の挙動は、非常に手続き的にも見えるし、「あとで補完」という点に注目するならば遅延評価的にも見える。この辺りは人によって実装が違っている可能性すらある。
- これを最後まで繰り返す。
- 尚、この結果完成されたモジュール空間だけでなく、この構築の流れこそが、小説/歌の「プレイ」の重要な要素である点に注意。
- この流れを見ると、「自然言語はevalを持っている」と言わざるを得ない。
- つまり、自然言語は「世界がどのような状態になっているかを記述する為の(チューリング不完全な)言語」であると同時に、「人間の脳内に仮想世界を構築する為のインストラクション群」でもある、と言えそうだ。
- インストラクション群として見た場合の自然言語はチューリング完全なのか、という点も気になるので考えてみる。
- 「りんごが三つある」時に「りんごを一つ食べた」ら、「残りのりんごは何個か」。
- この文章を「スキャン」しても、単なる「問題文」があるだけだが、人間の脳内で「プレイ」すれば、答えは簡単に出てくる。これはチューリング完全であると言ってよいと思う。
- もしこれを駄目とするなら、Lazy Kの「チャーチ数で数値を表現する」という方法もアウトだろう多分。
- ちなみにこれを、ゲーデル的な符号化を逆さに行っていると考えるなら、りんごの増減ぐらいしか考えられない知能(例えば猿とか)であっても、それを大量に集めてトランジスタ的に組み合わせる事で、高度なシステムを構築する事も可能かも。現実的ではないけど。
- 余談。人間の数値計算能力はほとんどが、(掛け算の九九に代表されるような)table lookupとその組み合わせで構築されていて、このように「プレイ」して計算する事は滅多に無い事からは、色々と考えさせられる。
- とりあえず結論として、自然言語はプログラミング言語的な面も持っている、と言ってよいようだ。
備考:
- 上の説明では、「プレイ」についての解釈にブレのある可能性が残っている。
- 「プレイ」で最も重要なのは、(前述の小説や歌での例でいうところの)「完成されたモジュール空間」ではなく(とは言え、これも大事だけれど)、「モジュール空間構築の流れ」のように思える。要するに、「結果」よりも「結果に至る過程」の方が(少なくとも小説や歌では)大事なのでは、という疑問。
- 関数型言語の本質が「手続きの実行」ではなく「式の簡約」にある事に、似てる気がする。
- もしくは、非関数的な手続き型言語が、IO等の副作用を色々やって、関数の返り値よりも副作用の方を「結果」として採用する傾向があるという点に似てる?
- 人がよくする「ちゃんと考えてるのか」という問いは、「単にtable lookupだけで済ませずに『プレイ』してるか」と解釈できそうな気がする。
- 前述の自然言語の解釈だと、「他者への命令/お願い」の扱いが謎になる。ここでは仮に、他者への呼びかけは「俺は君に『○○してほしい』と呼びかけている」のショートカットだと解釈する事で、前述の「記述言語」及び「構築インストラクション」の範疇に含める事にした。けど、自然言語の初期発生を考えると、記述言語よりも呼びかけの方が普通にプリミティブな気もする。とりあえず今回は最後までこの解釈で通してしまったけど、もうちょっと考えないと駄目かもしれない。