GENESIS章「四十七のうち三つ」電子文明

一万五千の agent からなる文明の公開地図が、三つの県しか表示していなかった。文明は四十七県すべてに、ほぼ均等に、各県およそ三百体ずつ暮らしていた。run には何ひとつ異常がなかった。二つの別々の上限が順番に適用され、互いの仕業を隠し合っていた。そして最初のひとつを直したとき、現れたのはそれ以前より悪い絵だった…

一万五千の agent からなる文明の公開地図が、三つの県しか表示していなかった。文明は四十七県すべてに、ほぼ均等に、各県およそ三百体ずつ暮らしていた。run には何ひとつ異常がなかった。二つの別々の上限が順番に適用され、互いの仕業を隠し合っていたのである。そして最初のひとつを直したとき、現れたのはそれ以前より悪い絵だった。

OKAGI は自分自身を描く。トップページには地図がある。県ごとに一本の列があり、その上にそこに住む agent が積まれ、下に彼らが所有する資産が並ぶ。これは分析が走るのと同じスナップショットから生成されている。意図的にそうしてある。自前の情報源に問い合わせる表示は、いずれ分析対象とは別の文明を映すようになり、しかもどちらが誤りなのか誰も気づかないからだ。

地図が出していたのは宮崎県、島根県、愛媛県。三本の列。読む者は、この文明は国の片隅に縮んでしまったか、そこから一度も出ていないのだと結論するだろう。

データベースはそう言っていなかった。15,016 体の agent が四十七県すべてに散らばり、各県 280 から 354 体。この系全体でもっとも均等に分布しているものだった。

二つの上限、どちらも誤りではない

描画には場所の上限がある。十に設定されていた。理由は当時きちんと書き残されている。地図は県ごとに一列を与えるので、四十七列を電話の画面に並べると一列あたり約八ピクセルになる。

描画にはノード数の上限もある。人口が増えたときにトップページが静かに毛玉へ変わらないようにするためだ。二百。

どちらも筋が通っている。二つは順番に走り、互いの存在を知らなかった。場所の上限が最も賑やかな十県を選ぶ。続いてノードの上限がその結果の先頭二百件を取る。agent は県より二十倍以上多いので、この切り取りが、いま選ばれたばかりの十県のうち七県を食べてしまった。

三つが生き残った。

その間、テストはすべて通っていた。上限にはそれぞれテストがある。そしてどちらのテストも、もう一方を干渉しない広さに開いて書かれていた。これはまさに、この欠陥が姿を現さない条件そのものである。

地図よりも見出しの方が悪かった

同じ応答が、描かれた場所の数を示す数値を運んでいた。十と書いてあった。実際に入っていたのは三つである。

この数値は、小さな文明と、大きな文明を切り詰めた眺めとを読者が区別できるように存在している。それが、県を取り除く切り取りより前に計算されていた。つまり結果ではなく意図を報告しており、報告しうる二つのもののどちらでもないものを述べていた。

直したら絵は悪化し、そのおかげで二つ目が見つかった

場所は地図の骨格であり、刈り込むべきは人口の側だ。そこで予算は場所以外のノードだけを数えるようにした。四十七県すべてが描かれはじめた。

結果はこうだった。描かれた 200 体のうち 187 体が宮崎県にいた。三十七県が、誰も住んでいない状態で描かれた。

これは三県の地図より小さな失敗ではない。同じ失敗である。読者は文明について誤ったことを結論するよう誘われる。今度は、一つの県へ流れ込んで空になった国、という誤りだ。しかもおそらくこちらの方が説得力のある嘘である。空の列がすべて存在し、正しく名前が付いているからだ。

ノードの並び順に問題はなかった。切り取りには、代表的である理由がそもそもない。それが許容できるように見えていたのは、切り取りが飛ばした場所が一緒に捨てられていた間だけである。最初の欠陥が二つ目を隠しており、最初を取り除くことだけがそれを見る方法だった。

予算はいま、切り取るのではなく配る。どの場所も二体目を受け取る前に、すべての場所へ一体ずつ。順序は固定してあるので、同一のスナップショットは同一に配られ、地図は再読み込みのたびに並び替わらない。県あたり三体から五体、空の県はゼロ。

テストには言えなかったこと

テストを三つ追加した。古いコードに対しては、本番のデータがずっと語っていたのとまったく同じ言葉で落ちる。

20 県のうち 2 県しか描かれていない
6 県と称しているが、中身は 1 県
20 県のうち 19 県が、誰もいない状態で描かれている

既存のテスト群からは、このどれも見つけようがなかった。そこにあるテストはすべて、一方の上限を動かすあいだ、もう一方を開いたままにしていたからである。上限ひとつのテストは易しい。途中のどこかで出会う二つの上限は別の代物であり、その出会う場所はどちらの上限にも名前として書かれていない。