プログラミング言語が最終的に到達すべき地点

 どうも逆なんじゃないか。

 言葉は万物を統べている。この世の実態は言葉の方にある。

 コンピュータはビット列を扱う。プログラミング言語は、ビット列に意味を与える。ただの4バイトのデータに、人は様々な名前をつける。名前を付けられた4バイトは、その名前が象徴する役割を果たす。

 しかし4バイトは4バイトだ。実態はビット列にあり、名前はそれを識別するだけだ。

 現実の事物は、認識しない限り存在しているとは言えない。存在と認識は不可分だ。この世の実態は認識の方にあるとも言える。人は現実に存在するリンゴを識別するためにリンゴという名をつけたのではなく、リンゴと名づけたからそこにリンゴは存在できる。それがまったく認識できず名づけることも出来ないものであったならば、それは現実に存在していないとしか言いようが無い。

 同様に4バイトも名づけられなければただの4バイトでしかない。4バイトという名前が象徴する以上の機能を持たせたとしても、いずれ何やってんのか分からなくなって破綻する。コンピュータは4バイトという抽象的形式をものの見事に操るが、人間はそれを具体化しないと認識できず、人間にとってそれは存在していないのと同じことになる。

 ビット列に具体的意味を与えることに、オブジェクト指向言語は現状もっとも成功している。しかしもっと出来ると思う。言葉の大元にある認識、人類が進化の過程の中で獲得した視覚、聴覚といった認識器官、そこから得た感覚に言葉は名前をつけるわけだが、ビット列をその認識情報に近づけることが必要なのではないかと思う。人が普段名づけている対象は、感覚器官から得たただの情報ではないはずだ。感覚器官は外界に応じて変化し、同じものを見ても必要に応じて異なった情報を送ってくる。プログラミング言語の場合は違った名前であっても実態は同じ4バイトであったりする。

 プログラミング言語を作るときの方法論として、まず数理的実態はないが自然言語よりも意味を伝えやすい人工言語を作り、そこにむりやり数理的実態を後付していくという方法を取れないものだろうか。

 意味とはどこから生まれいずる何者であるのか。言葉の表す意味は現実の事象と対応してはいない。むりやり脳が事象と言葉をひっつけるだけで、引っ付けかたは個人個人で千差万別だ。たとえば数学のような形式言語であっても、自然数なんてものは現実には存在しないし、一個のリンゴに一個のリンゴを足しても二個のリンゴになったと思うかどうかは個人の考え方次第だ。そして起こった出来事の実質は、個人個人が認識し言葉を引っ付けたその情報の中にしか存在しない。同じものを見たとしても個人個人の中で別の出来事が起こっているので、本当に同じものを見たのかすら定かではない。

 形式言語で1+1=2と定義されたとして、その内実はその形式言語を理解した個人個人で同じであるかといえばそんなことはない。ただそれを理解した人間に1+1は?と尋ねた時に、間違えない限り2と答えることは出来る。ただそこで起こる脳内の計算過程は個人個人で全く異なっている。1+1という現象は対応する具体的事物が存在しないがゆえにさらにその内実は千差万別といえる。ただ正しい答えは決まっていて、脳は答えに至る回路を物理的に形成できている。そこで起こる出来事の差異を無視するならば、1+1は2である。それが正しい認識であり正しい事象の理解となる。

 問題は正解が定義されていない現実の事象に対して、我々はそれをどう認識しどう言葉にしているのかだ。それは正解で無いにもかかわらず他人に伝えることが出来る。プログラムは正解が定義されていない事象に対して記述され、プログラマが思う正解を出力するように記述される。プログラマは現実の事象に正しい答えを定義している。どのように定義するのが正しいのか、というのは数学の問題ではなく哲学の問題だ。インチキ公理系を採用して難題とされた定理を証明したとしても数学ではただのインチキだが、プログラマは求める出力を得るためにいかにインチキ公理系をでっち上げるかに苦心する。「コンピュータシミュレーションによれば答えはこうなります」というのはSFでは正しい予測に見えるかもしれないが、プログラマはそれがインチキであることを腹の底から理解している。

 物事を理解するためのインチキ公理系がおそらく意味の本質だ。その公理系を多くの人が採用し正解と認めさせることができればその公理系は真実となるが、その公理系を真実とすることが出来るかは政治の問題だ。入力と答えをいくつか定義すればその答えに至る過程を生成してくれる言語がおそらくプログラミング言語が最終的に到達すべき地点で、その内実はインチキ公理系生成言語となる。

 プログラマの目的が求める答えをはじき出すことであればそれでいいのだが、どのような答えをはじき出せばいいのかプログラマ自身が知らない場合、どうすればいいのか。現実の事物を理解する時に必要となるのは、それをどう認識(どのようなデータを入力として受け付けるか)し、どう行動(出力結果に何を含ませるか)するかだ。ただこれは形式言語を扱うことしか出来ない現状のコンピュータでは扱うことが出来ない問題で、プログラミング言語が解決すべき問題では無いようにも思える。