たまには「プレイ」しましょう

今回の要約: 実は、自然言語プログラミング言語的な面も持っていた。


長いので要点だけ。


最初に考えていた事: 自然言語プログラミング言語とは違い、チューリング完全ではない


あとで気付いた事:

  • 自然言語の中でも、小説や歌なら、TAP言語での「プレイ」に相当しないか?
    • どうも相当していそうに思える。では、人間はどのように、小説や歌を「プレイ」しているのか?ちょっと順を追って考えてみる。
      1. 人間の頭の中に、空の無名モジュール空間を用意する(小説/歌を読む/聴く前の状態)。
      2. このモジュール空間に、小説/歌に出てくる内容を順番に、かつ、副作用的(破壊的)に反映していく。反映するオブジェクト等に足りない情報は、先に定義された情報を再利用するか、とりあえず未定義のままにしておいてあとで補完する。必要になった段階でも未定義のままだった場合は、自分の常識から適当な値を採用する。
        • ちなみに、この足りない情報を補う為の挙動は、非常に手続き的にも見えるし、「あとで補完」という点に注目するならば遅延評価的にも見える。この辺りは人によって実装が違っている可能性すらある。
      3. これを最後まで繰り返す。
        • 尚、この結果完成されたモジュール空間だけでなく、この構築の流れこそが、小説/歌の「プレイ」の重要な要素である点に注意。
    • この流れを見ると、「自然言語はevalを持っている」と言わざるを得ない。
    • つまり、自然言語は「世界がどのような状態になっているかを記述する為の(チューリング不完全な)言語」であると同時に、「人間の脳内に仮想世界を構築する為のインストラクション群」でもある、と言えそうだ。
    • インストラクション群として見た場合の自然言語チューリング完全なのか、という点も気になるので考えてみる。
      1. 「りんごが三つある」時に「りんごを一つ食べた」ら、「残りのりんごは何個か」。
      2. この文章を「スキャン」しても、単なる「問題文」があるだけだが、人間の脳内で「プレイ」すれば、答えは簡単に出てくる。これはチューリング完全であると言ってよいと思う。
        • もしこれを駄目とするなら、Lazy Kの「チャーチ数で数値を表現する」という方法もアウトだろう多分。
        • ちなみにこれを、ゲーデル的な符号化を逆さに行っていると考えるなら、りんごの増減ぐらいしか考えられない知能(例えば猿とか)であっても、それを大量に集めてトランジスタ的に組み合わせる事で、高度なシステムを構築する事も可能かも。現実的ではないけど。
        • 余談。人間の数値計算能力はほとんどが、(掛け算の九九に代表されるような)table lookupとその組み合わせで構築されていて、このように「プレイ」して計算する事は滅多に無い事からは、色々と考えさせられる。
  • とりあえず結論として、自然言語プログラミング言語的な面も持っている、と言ってよいようだ。


備考:

  • 上の説明では、「プレイ」についての解釈にブレのある可能性が残っている。
    • 「プレイ」で最も重要なのは、(前述の小説や歌での例でいうところの)「完成されたモジュール空間」ではなく(とは言え、これも大事だけれど)、「モジュール空間構築の流れ」のように思える。要するに、「結果」よりも「結果に至る過程」の方が(少なくとも小説や歌では)大事なのでは、という疑問。
      • 関数型言語の本質が「手続きの実行」ではなく「式の簡約」にある事に、似てる気がする。
      • もしくは、非関数的な手続き型言語が、IO等の副作用を色々やって、関数の返り値よりも副作用の方を「結果」として採用する傾向があるという点に似てる?
  • 人がよくする「ちゃんと考えてるのか」という問いは、「単にtable lookupだけで済ませずに『プレイ』してるか」と解釈できそうな気がする。
  • 前述の自然言語の解釈だと、「他者への命令/お願い」の扱いが謎になる。ここでは仮に、他者への呼びかけは「俺は君に『○○してほしい』と呼びかけている」のショートカットだと解釈する事で、前述の「記述言語」及び「構築インストラクション」の範疇に含める事にした。けど、自然言語の初期発生を考えると、記述言語よりも呼びかけの方が普通にプリミティブな気もする。とりあえず今回は最後までこの解釈で通してしまったけど、もうちょっと考えないと駄目かもしれない。