DAGとかノイマン型の呪縛とか「時間はどこで生まれるのか」とか

時間はどこで生まれるのか (集英社新書)

時間はどこで生まれるのか (集英社新書)

クダクダと妄想じみたことを書いてみる。ほんと、くだくだ。

「時間って何だろう?」というのは昔からの疑問。だからこの本は非常に興味深いものだった。ちょっと前に読んだのだけど、うまく考えがまとまらなくて感想は書かずじまいだった。

時間とか宇宙とかを考え出すと、もう全く訳が分からない。自分自身が考察対象である時間の内側に存在しているのだから、時間なるものを客観的に把握することが出来ないんだよな。だからそういう時は、仮にこの宇宙が何者かによってプログラムされた仮想空間だと考えて、その宇宙をプログラムした人の立場になって考えてみる。要するに、自分が映画「マトリックス」のような仮想世界をプログラムするとしたら、その仮想世界にどうやって時間の概念をプログラムするか、ということ。

さて、因果律と時間の流れは密接に関連している。原因と結果という関係を考えるとき、必ず原因は過去の事象であり、相対的に見て結果のほうが未来の事象だ。そこで思うのが、時間と因果律のどちらがアプリオリなのか、ということ。・・・えっと、思わずカッコつけて「アプリオリ」なんて言葉を使っちまったが、使い方あってんのかいな(冷汗。要するに、まず時間の流れがあって、そこから人類は因果律を獲得したのか、それとも逆に、まず因果律の獲得があって、それによって時間の流れというものを感じるようになったのか、ということ。

で、どうも後者なんじゃないか、って気がするわけ。因果律が先で、時間が後じゃないか、と思うわけ。この宇宙を記述したプログラムのソースコードがあるとするならば、そこには因果律だけがプログラムされているんじゃないだろうか。その世界で生きている我々が、因果律をベースに時間という概念を感じるように進化したんじゃないだろうか。

話はちょっと変わるんだけど、カイロス時間とクロノス時間というのがある。特に子どもの頃なんかは、何かに夢中になっているとたった5分をものすごく長い時間に感じたり、逆に1時間を数分に感じたりすることがよくあったはず。こういう時計では測れない主観的な時間がカイロス時間。逆に時計で測れる客観的な時間がクロノス時間だ。

誰でも子どもの頃にはカイロス時間に生きているんだけど、大人になるにつれて徐々にクロノス時間を身に付けていく。小学生低学年に歴史の授業がないのは、まだクロノス時間を獲得していないからだ。つまりクロノス時間の獲得は後天的なんだな。

で、コンピュータの話に戻そう。普通のコンピュータはノイマン型コンピュータだ。ノイマン型コンピュータでは逐次実行が基本だ。つまり、時間の流れがアプリオリに与えられた世界、と言えるんじゃないだろうか。因果律はその後に獲得される。プログラムの未来の振る舞いは過去の振る舞いに依存する、というわけだ。

でも実際にプログラムを作るときは、時間の流れよりも因果律を意識することのほうが多い。ある入力(=原因)に対して望ましい出力(=結果)が得られるようにプログラムしていく。仕様というのは入力(原因)と出力(結果)の対応で記述される。つまり、プログラムするに当たってまず先に考えるのは因果律であり、それをフロー(時間)に変換していく作業がプログラミングといえないだろうか。

ここまで考えてみると、ノイマン型という計算モデルに若干疑問を感じ始める。いや、まあコンピュータがノイマン型をベースに発展したのは良いとしても、プログラミング言語が「逐次実行」「条件分岐」「繰り返し」の3要素に呪縛される必要はないんじゃないか、という気がしてくる。最初から因果律を記述するようなプログラミング言語は出来ないものか、という妄想が頭の中を駆け巡る。

で、DAGの登場だ。DAGとはDirected Acyclic Graphの略で、有向非循環グラフのこと。MakefileやAntなどで記述する依存グラフはDAGになる。因果律というのはこのDAGの形式で表現できるはずなのだ。

「逐次実行」「条件分岐」「繰り返し」の3要素ではなくて、DAGによる因果律を基盤とするようなプログラミングパラダイムは設計できないものだろうか。ノイマン型の呪縛が不必要にUMLを複雑にしているんじゃないだろうか。DAGを基本とするようなプログラミングモデルが作れたら、もっとMDAも容易に実現できるんじゃないだろうか。

・・・なーんて妄想が止まらない。