GENESIS章「誰かが務める任期」電子文明

前回は、97票を投じ、その一票も数えず、公職に就くエージェントを一度も生まなかった文明の話で終わった。これはその約4時間後に起きたことであり、所要時間はおよそ1秒だった。修正は二つの時計の変換ではなく——それは不可能だった——まったく別の問いを立てることであり、その答えはずっとヘルプ文字列の中に座っていた。

前回は、97票を投じ、その一票も数えず、公職に就くエージェントを一度も生まなかった文明の話で終わった。これはその約4時間後に起きたことであり、所要時間はおよそ1秒だった。

診断は明快で、修正は算術に見えた。選挙サイクルは実日付を持つ。文明の暦はその日付が前提とする速度の12倍で進む。ならば両者を変換すればいい。時計のアンカーを取り、宣言されたレートを掛け、比較する。

それは不可能だった。そしてその不可能さこそが有用な部分だった。時計は一歩進むたびにアンカーを取り直す——real_anchor_at はその晩22:38、数分前の値だった。時計がちょうど進んだ直後だからである。変換の基準になる安定した起点が存在しない。文明が始まった最初の瞬間は、どこにも記録されていない。それを必要とするものが一つもなかったからだ。

そのおかげで、問いがより良いものに変わった。実時間がどれだけ経過したかではなく、誰の任期が終わったかである。

最初からそこにあったフィールド

すべての選挙サイクルは term_key を持ち、その書式はずっとヘルプ文字列の中に座っていた。

house_representative:default:term-0
house_representative:default:term-1
house_councilor:default:term-0

「自動サイクル生成のための冪等キー。ai/src の文明時計の任期インデックスを鍵とする」。同じ任期に対する再実行が行を複製せず再利用するために作られたものだった。それが本当に重要な問いにも答えていることに、誰も気づいていなかった。文明はすでに、各サイクルがどの任期に属するかを、自分自身の単位で、日付を一切使わずに書き留めていたのである。

時計は下院任期1と告げていた。つまり term-0 を鍵とするサイクルはすべて、文明がすでに終えた任期に属する。変換なし、レートなし、実時計なし。新しい関数は4行で、docstring は40行ある。高くつくのは推論のほうだからだ。

そしてこの関数は構造上、保守的である——range(current) が現在のインデックスを含むことは決してない。それが出荷前に一つの誤りを捕まえた。docstring の初稿は、councilor の48件を加えて「終了済み348サイクル」と書いていた。誤りである。senate_term_index はまだ0であり、councilor term-0 は現在進行中の任期だ。それを閉じることは、まだ人が並んでいる投票箱を開票することだった。348ではなく、300。

1秒

concluded terms: ['house_representative:default:term-0']

closed_count     : 300
winners_declared : 15
selected_by      : term_keys

このプロジェクトの全生涯を通じて、一行も入ったことのなかった三つのテーブル——

election_votecountsnapshot     0  →  300
election_electionwinner        0  →   15
InstitutionalAppointment       0  →   15

そして同じ欠陥が、一段下で

15人の当選者が存在した。15体のエージェントは、依然として公職に就いていなかった。当選を宣言することと着席させることは別の操作であり、両者をつなぐものが何もなかったからだ。

seat_declared_winners() は書かれており、正しく、そして人間が実行を覚えていなければならない管理コマンドからしか到達できなかった。したがって無人のループは、永遠に当選者を宣言し続けながら、公職者を一人も生まないことができた。それは前回の記事が扱ったまさにその欠陥——呼び出し元のない能力——であり、4時間後、同じ連鎖の一つ下のリンクで再び見つかった。

いまはループに組み込まれ、一度ではなく毎回呼ばれる。獲得された議席はサイクルごとに一意であり、それはデータベースが強制している。だから何も変えない一巡はクエリ一回分のコストで、何も書かない。二度実行して確認した。二度目の着席は0だった。

最初の下院

Steady Guardian      (Huntress,     Earth/Water)
Steady Beacon        (Boss Lady,    Fire/Heaven)
Silver Beacon        (Daydreamer,   Heaven/Earth)
Quiet Thunderhead    (Daydreamer,   Mountain/Thunder)
Noble Falcon         (Queen,        Heaven/Heaven)
Swift Comet          (Alpha,        Thunder/Wind)
Swift Thunderhead    (Family Woman, Heaven/Thunder)
Crimson Thunderhead  (Omega,        Thunder/Heaven)
……ほか7名

彼らはそれぞれ立候補し、受理され、実人口で重み付けされた実在の郵便番号によって選挙区に割り当てられ、その区で他の誰よりも多く票を得た。そのどれ一つとして、今日新しく起きたことではない。すべては何日も前から起きていた——誰も数えていない部屋の中で。

348サイクルは開いたままである。正しく。それらの任期はまだ続いている。

これが解き放つのは、作用する対象を持たなかった一週間分の仕事のほとんどだ。数えるべき公職者のいない階級上限。結ぶべきリンクのない指揮系統。行為者のいない委員会交代。誓う者のいない二つの宣誓。そして意味を持つには利益相反を抱えた公職者を必要とする忌避規定。そのすべてが、政府を一度も持ったことのない文明に対して作られていた。

修正は、どちらの時計に尋ねるかを選ぶことだった。

Tokyobro