読者です 読者をやめる 読者になる 読者になる

標高+1m

Make, Hack, Think

宇宙API Part2

宇宙API Sci-fi Functional Programming ブラックホール OOP 相対性理論 重力 時空

f:id:ympbyc:20140315213137j:plain

 Part 1からずいぶんと時間を置いてしまった。みんな覚えてるかな。前回はごたまぜだったけど、今日はとくに時空についてに絞って書いてみる。前半は2013年の12月にSmalltalk忘年会で話した事の焼き直しだけど、文章にしたことがなかったからもう一度やってみることにした。

 念のため断っておくと、このシリーズで扱っているのは学説的な裏付けがある理論でも、仮説ですらなくて、僕がこの宇宙と同じような宇宙をプログラムとして記述するとしたらどうするかという思考実験だ。でもあなたがこのシリーズの中に実際の宇宙の物理法則との明らかな矛盾を見つけたら是非教えてほしい。

ミュータビリティが因果律を壊す

 関数型が持ち上げられオブジェクト指向*1が貶められる大きな理由には、手続きをいくつも持ったものを作っておいてコードの再利用がどうとか言ってるのが馬鹿らしいということの他に、オブジェクトが伝統的に内部状態の書き換えを基礎として構築されてきたという点がある。並列プログラミングの一般化によってこのやり方には限界がある事がわかってきたが、こと宇宙の記述において、状態の書き換えを行うモデルにはもっと根本的な問題がある。因果律の破壊がそれだ。

ミュー石の発見

 ここはとある街の小さなレストラン。ここにはテーブルと椅子と監視カメラがあって、テーブルには一揃いの食器が乗っている。あなたはこのレストランに入り、食事をしようとテーブルに近づいていくが、途中で椅子に蹴躓いて転んでしまい、頭をテーブルにしたたかに打ち付けて気絶した。テーブルは粉々になった。たまたまこのレストランで食事をしていた暇な警官が、レストランの主人を業務上過失傷害でしょっぴいてやろうとその日の監視カメラの映像を確認した。

  • 9:00 開店30分前。粉々になったテーブルが片付けられる。
  • 10:00 開店。予備のテーブルがなかったのか、この席は椅子も含めて撤去されている。
  • 10:50 警官が来店。空いている席に着席。エビのカクテルを注文。
  • 11:00 あなたが来店。空いている席に着席。クラムチャウダーを注文。
  • 11:10 警官が店の奥のドアに入る
  • 11:30 あなたがクラムチャウダーを食べ終わり退店

 警官は自分がなぜ監視カメラの映像を見ているのか忘れてしまい、交番に戻った。

ミュー石の研究

 ここであなたはこのレストランで起きた事を不思議に思う手筈なんだけど、もし思ってないならもう一回読んでほしい。読んだ?不思議でしょ?あなたは気絶したのに映像では何事もなかったようにクラムチャウダーを食べているし、蹴躓いた椅子は開店前に撤去されたと記録されている。ちなみに監視カメラは壊れていないし、警官は精神分裂症患者ではない。

 種明かしすると、ことをおかしくしているのは時間を遡って壊れたテーブルだ。結果が原因より前に遡ってしまうこの不思議なテーブルはミューテーブル(mu-table)と呼ばれ、20世紀中盤以降の地層から頻繁に産出されるミュー石からできている。ミュー石は純粋に3次元的な物体をむりやり4次元に引き延ばしたもので、時間の概念を知らない。この性質のせいでミューテーブルは、空間+時間の4次元時空に置かれると、この宇宙の特徴の一つである因果律を破ってしまうんだ。

 従来のオブジェクト指向でオブジェクトといっているのはミューテーブルのような物体のことだ。コップオブジェクトの内容量プロパティが0になったら最後、1秒前にどれくらいなにが入っていたのかはわからなくなる。なにも歴史として記録されず、世界は状態を書き換えることで進行していく。これは時空に生きる僕らの体感に近いが、それは僕らが時間方向を向いた目を持っていないからってだけだ。

 普通のプログラムで例のレストランのようなことが起きないのは、プログラムを実行するコンピュータが僕らが住む時空の物体で、常に時間方向に移動しているからだ。この宇宙に住んでいる限り、時間方向への移動は普遍的なものだからそれを利用するのは間違っちゃいない*2。でも宇宙の記述をこの性質に依存して書くのは、永久機関と銘打った機械がこっそり太陽光を利用しているようなもので、実用上の問題はなくても理論的に無価値になってしまう。僕らが記述する宇宙は時間の概念を内包する必要があるんだ。

イミュー石

 一方、イミュータブルな値を対象とする関数型プログラムでは、この宇宙の時間方向への移動に頼らなくても因果律が保てる。関数型世界のレストランに置いてあるイミューテーブル(immu-table)は、ある時点を切り取って観察すると純粋に3次元の物体だ。イミューテーブルの3次元的インスタンスAに傷を付ける関数を適用すると、材質などの情報はAと共有しつつも粒子の配置が変わった新しい3次元的インスタンスBが生成される。BがAに依存しているため、Bに関数を適用するためにはAが存在しないといけない。つまりBへの操作をAへの操作より前に行う事はできない。これが原因と結果に明確な順序を持たせる因果律を再現するんだ。

 うまくイメージできない人は、動画のストリーミング配信を想像してみるといい。エンコードの種類によるけれど、秒間数十フレームの静止画は、一枚一枚が写真のように送られてくるわけではなくて、一つ前のフレームからの差分情報が送られてくることが多い。差分は前のフレームに依存しているから、差分を先に再生する事は出来ない。

 ちなみに、Part 1で考察したこの宇宙が多世界かセルオートマトンかという問題は、イミューテーブルに適用できる関数がこの宇宙に存在しないパラメータに依存できるか否かって問題と等価だ。全ての関数がこの宇宙で閉じているならそれはセルオートマトン的だし、僕らが記述する宇宙は美しさを基準とすれば閉じているべきだ。

[追記] 上のパラグラフは多分間違ってる。次回の記事で修正します。

光と距離と不確定性原理

f:id:ympbyc:20140317061210j:plain

 同期プログラミング環境において、情報は瞬時に全宇宙に伝わる。アナログ時間数秒中に起きた出来事はデジタル時間の1秒にならされる。同期プログラミングにおいて数クロックを必要とする処理を待つことは、光が全宇宙に広がるまで他の計算を止めるのに等しい。こんな虚構がいつまでも続かないってことは、非同期プログラミングの普及によって証明されている。実際、非同期プログラミングで僕らが頭を悩ませるとき、それはかなりの確率で光の速度がたったの30万km/secであるせいなんだ!

 宇宙を作る時、問題になるのはその大きさだ。僕らが住むこの宇宙は、観測可能な範囲だけでも半径約450億光年ほどのとてつもない広さを持っている。こんなに広い宇宙を作るにはとてつもない大きさのコンピュータが必要になりそうだが、実はそうでもない。少なくとも、半径450億光年の大きさは必要ない。光速が一定なんだから、空間距離は、単に情報を伝えるのにかける時間によって表現できる。

 コンピュータのダウンサイジングには、不確定性原理*3を有効に使うことも有効だ。一瞬一瞬、常に宇宙全体が存在している必要はなくて、観測された時に初めて計算すればいい。遅延評価ってやつだ。ビッグバンの初期状態から計算しても問題ないけど、現実的な速度で走らせるなら最後に観測された時のキャッシュを持つべきだろう。ほとんどの箇所はダークマターとか希薄なガスの分布くらいの情報くらいしか必要ないんだから、宇宙全体を常に計算し続けるのはあまりに無駄だ。

相対性理論

f:id:ympbyc:20140315213626j:plain

 重い質量に近づくほど、時間の流れは遅くなる。また、空間方向に速く移動する(見かけ上の質量 —慣性— が増大する)ほど、時間方向への移動は遅くなる。

 僕らはプログラム中のボトルネックを指して、重いというスラングを使う。質量の大きいものを形容する言葉を処理の遅さを指すのに使うのは、実は驚くほど的を射ているかもしれない。惑星のように小さい、つまり情報量の少ない物体を自転/公転させるのと、太陽や、もっというとブラックホールのように巨大で情報量の多い物体を転がすのだったらどっちが計算資源を食うか考えると、それは後者に決まっている。のんびり移動するロケットとものすごい速さで移動するニュートリノを比べても一緒だ。一般に、処理が重そうな宇宙的事象の周りでは時間の流れが遅くなる。

 よく知られているように、時間の流れが遅くなるといってもそれは遠くにいる観測者から見た場合であって、本人の体感時間は全く変わらない。これはマルチスレッドやマルチプロセスのプログラムでよく見られる特徴だ。速いスレッドAの中にいる僕が遅いスレッドBにいるあなたを見たら、「のんびりしてんなあ」って言うだろうが、Bにいるあなたは与えられたクロックの間のことしか知らないから、自分は普通にしていて、Aにいるぼくを見てひどくせっかちだと思うだろう。だれかが時間を止めてまた再開したとして、僕らはそれに気付きようがない。

 相対性の記述は、宇宙の各スレッドのスケジューリングを数学的な関数で行う事で実現できそうだ。また、スレッド間の通信に有限時間だけかけるようにすることで、宇宙内での距離と光速を表現できる。

(おまけ) ブラックホール

f:id:ympbyc:20140315213732j:plain

 ブラックホールの中心、事象の地平面の向こう側にある光子は地平面を脱出する前にエネルギーを失い、波長が伸びきって消滅してしまう。このため事象の地平面からこちら側に情報が伝わる事はない。ブラックホールはひどく乱暴なガベージコレクタ(GC)なんじゃないだろうか。

 大きな恒星は、その燃料を燃やし尽くすと圧力が下がり、重力に屈して密度の高い白色矮星になる。白色矮星は重いほど小さくなるので、ある時点で電子の速さが高速に近づきすぎて縮退圧が下がり重力が勝って、原子がドロドロに混ざった中性子星が生まれる。中性子星が密度を上げて小さくなりシュヴァルツシルト半径に押し込められるとブラックホールが誕生する。暗くなり、誰からも参照されなくなった恒星は、自らがGCに変化し、自分の周りにあるものから順に消し去っていく、悲劇的で迷惑な奴なのかもしれない。

 僕は頑に、ブラックホールの向こう側には別の宇宙があるという仮説を信じているけれど、この宇宙に情報が伝わり得ない以上、こういう仮説についての記述は意味をなさないだろう。

続く

 前回と今回は、僕らが住む宇宙について閉じた話を書いた。次回はエネルギーについてと、フラクタルとマルチバース、メタバースなど、この宇宙の外の、原理的に仮説の域を出得ない事柄について書いてみたい。どんな内容になるかはまだ見当もつかないんだけど。

 なお、この記事を書くにあたって、ケイレブ・シャーフ著、水谷淳訳の『重力機械』を参考にした。すごく面白い!

 コメント、ツイート、メールお待ちしてます。

*1:前回の記事からも見て取れるように、オブジェクト指向という言葉にはいくつもの意味がある。今回はミュータビリティについて注目する。

*2:マルチスレッド/マルチプロセスのプログラムでは時間の流れが異なる時空を接続しなきゃいけないから問題が出る

*3:誤用?