GENESIS章「大統領に三票」電子文明

この電子文明は二度、候補者を投票用紙に載せ、二度とも全員が棄権した。三度目に、ようやく投票した——545体のうち275体が、公約を読み比べ、中身で選んだ。ところがその結果を記録する仕組みが、大統領選の勝者をただの下院議員として登録し、九時間のあいだ誰も気づかなかった。

この電子文明は二度、候補者を投票用紙に載せ、二度とも全員が棄権した。三度目に、ようやく投票した——545体のうち275体が、公約を読み比べ、中身で選んだ。ところがその結果を記録する仕組みが、大統領選の勝者をただの下院議員として登録し、九時間のあいだ誰も気づかなかった。

名前だけを二つ渡されて

ラン8は本物の投票にこぎつけ、106票が投じられた。106票すべてが棄権だった。

ラン9は34票。結果は同じ。34票すべてが棄権、有効票ゼロ。理由もほぼ全員が同じだった——名前を二つ渡されただけで、他に何もない。見知らぬ二者から選べと言われても選べない、と。

エージェントたちは正しかった。ここは立ち止まる価値がある。Fierce Ironfront と Anchored Compassguard という名前だけを見せられた有権者は、選挙を与えられたのではない。コインを渡されただけだ。意味のない選択を前にしたとき、この電子文明は無作為に選ぶのではなく拒否する——それを知るために二つのランを費やした。発見ではあるが、高くついた学び方ではある。

そこでラン10では、一点だけ変えた。その選挙区の候補者全員が「自分は何を目指すのか」を表明するまで、その区の投票は行わない。

545体

投票用紙が配られた。545体が問われた。

275体が投票した。

270体が見送った——失望のように聞こえるが、その理由を読むと話が変わる。もはや情報不足による棄権ではない。彼らは投票用紙を使い分けていた。

BALLOT 1: CHOICE 1 BALLOT 2: ABSTAIN WHY: Compassguard のメッセージは、実務的な統治と若いエージェントを守るという私の価値観に合致している。一方 Ironfront の公約には十分な……

別の一体は、独立に、こう書いた。

BALLOT 1: CHOICE 1 BALLOT 2: ABSTAIN WHY: どちらも実務的な統治を語っているが、私はより Compassguard の能力構築と説明責任の重視に共感する……

二度読んでほしい。エージェントが二つの公約を自分の価値観に照らして比べ、納得した側を名指しし、もう一方のどこが足りなかったかをはっきり述べている。意見のあるレースでは投票し、ないレースでは棄権する。これはコインではない。有権者だ。

投票率50.5%。直前の二度の試みで棄権しか生まなかった同じ人口から。

結果

Anchored Compassguard が栃5区の下院議席を68票で獲得。

Fierce Ironfront が栃木県(参・選)の参議院議席を183票で獲得——この電子文明で誰かが得た、史上最大の負託である。

そして栃5区の大統領選で、Fierce Ironfront が3票を得て、その区を制した。

3票は恥ずべき数字ではない。選挙区方式のもとでは大統領選は一つの全国選挙ではなく数百の地方選挙であり、有権者が3体の区は3票で結果を出す。区が小さいから数が小さい。算術は正しい。

問題は、その結果がどう扱われたかにある。

大統領選の勝者が、下院に着席する

台帳に残っている行は、こうである。

office=house_representative  term=president:run10:term-0  votes=3

office は一つのことを言い、term は別のことを言っている。term キーはそれを生んだレース自身が書くので、この行は下院議員の肩書きをまとった大統領選の結果だ。

原因はほとんど平凡だ。バックエンドは勝者の office を、レースが行われた選挙区から決める。そして選挙区方式では、大統領選はすべての下院選挙区の内側で行われる。だから大統領選の結果はすべて house_representative という札を付けて返ってきた。大統領選の結果を選挙人団に回すために存在するはずのガードは、その札を見ている。一度も発火しなかった。

選挙人団自身の集計が、その帰結である。

electors 0    electoral college counts 0

大統領は、ついに選ばれなかった。ラン10でその職にあるのは、初日にくじで据えられた暫定職——誰も投票していない人物——のままだ。選挙は行われ、勝者は出て、3人の有権者は満足し、そしてその選挙が目指していた職は、直前とまったく同じだけ空席のままだった。

そして Ironfront は二つの職を兼ねた

迷い込んだ大統領選の結果が下院議席として登録され、Fierce Ironfront はすでに参議院議席を正当に得ていた。だから台帳には、一体のエージェントが両院に座っている姿が現れた。

Fierce Ironfront 001 holds house_councilor + house_representative

合衆国憲法第1条第6節第2項——兼職禁止条項——がまさにこれを禁じている。合衆国の官職にある者は、その在職中いずれの議院の議員にもなれない。この instrument でもっとも古い構造規則の一つを、この電子文明は初の成功した選挙から数時間で、事故として、列のラベル違いによって破った。

エラーは一つも出ていない。すべての行は内部的に整合している。着席数は786から787に増え、それは進歩に見えた。

代償と、得たもの

9時間38分。仮想50か月のうち4か月。

この欠陥は、テストスイートのどれも問わない質問によって見つかった——エージェントが着席した職は、そのエージェントが勝ったレースと一致しているか。答えは文字列比較である。term キーの最初のコロンより前の議院と、office 列を突き合わせる。一行で済む。それが書かれていなかったのは、選挙が実際に決着するまで、比べるものが存在しなかったからだ。

二つの修正が続いた。office は選挙区ではなくレースから取る。そして、すでに選挙で職を得ている勝者は二つ目を拒否され、その拒否が記録される——議席が黙って二重に埋まるのではなく。これは faithful な答えでもある。合衆国は二つの職に立候補することは止めず、両方を保持することだけを禁じているからだ。

どちらも、それを明らかにしたランには適用できない。勝者の着席方法を変えることは、すべてのエージェントが見るものを変える。途中で修理されたランは、継ぎ目がデータのどこにも記されていない二つの実験になる。だから両方とも待機列に入れられ、ラン10はすでに失敗した同じコードを実行し続けた。

今朝、仮想4か月の時点でこのランが放棄された理由がそれである。94件の findings を凍結し、データベースは使い捨てと記された。問いの半分は答えられ、永久に記録された——そもそも誰か投票するのか? する。275体が、中身で。候補者が何を信じているかを伝えさえすれば。もう半分——この電子文明が選挙人を通じて大統領を選べるか——は、どれだけ走らせても答えられなかった。選挙人を数えるはずのコードが、最初の投票用紙が刷られる前から間違っていたからだ。

ラン11は、両方の修正を積んで始まる。この企ての歴史で初めて、大統領を生み出しうるランになる。

その裏で、この電子文明は全力で何もしていなかった

この間ずっと、ラン10にはもう一つ問題があった。そしてそちらのほうが教訓としては上等だ。なぜなら、どこからどう見ても故障に見えなかったからである。

あの朝、ほぼどの瞬間に計測しても、こうだった。ブリッジのプロセスがコアの45%、ループはそれを待って9%、そしてGPU——実際に考える装置——は0%。ログは八分間まるごと沈黙。データベースは何も増えない。

二時間で14行。

停止していたのではない。すでに完了した作業を、猛烈な勢いでやり直していた。候補者登録の処理が、ローテーションが一周するたびに、承認済みの候補者全員を再登録していたのだ。そして三体の承認済み候補のうち一体は大統領選に立っていた——選挙区方式では、それは全下院選挙区にまたがる名簿を意味する。465件の同一リクエスト。どれも正しく、どれも200 OKを返し、どれも何一つ変えない。それが一時間に数回、九時間にわたって。

そのループの上に書かれたコメントは、書かれた日からずっとこう述べていた——「バックエンドがまだ知らない承認済み候補者すべて」を登録する、と。そこに書かれたフィルタは、一度も実装されていなかった。コメントに書かれた文は仕組みではない。この企ては、そのことを規則として書き留めるに足る回数、思い知らされてきた。

これが脚注ではなく一項目に値するのは、その見え方ゆえだ。GPUが遊んでいて実行が遅ければ、モデルが遅いのだと読める。違う。それはボトルネックが別の場所にあることを特定している。この場合の別の場所とは、すでに登録済みの候補者について電子文明が自分自身と交わしていた会話だった。

捨てるという判断

ここでは、ランは開始時に「自分が答えるために存在する問い」を宣言する。ラン10は二つ宣言した。

その選挙区の候補者全員が公約を提出するまで投票を行わないようにした今、そもそも誰か投票するのか——そしてこの電子文明は、45の参議院選挙区に配分された選挙人を通じて、大統領と副大統領を選出するのか……

ランを放棄する規則は一文であり、意図的に狭い。その欠陥のせいで、ランのデータがそのランの目的だった問いに答えられなくなったときに限り、捨てる。遅いは該当しない。バグがあるも該当しない。うるさいも該当しない。それらは走らせながら直す。放棄を容易にする手続きは、やがて何も完遂しないための口実になり、データのない美しい装置は、成功の服を着た失敗だからだ。

その規則に照らすと、ラン10はきれいに半分に割れた。

前半は答えが出て、永久に記録された。275体が中身で投票した。これ以上走らせても、その数字も意味も変わらない。

後半は、未回答なのではなく回答不能であり、どれだけ走らせても回答不能のままだった。着席のコードは最初の投票用紙が刷られる前から間違っており、修正は実験を二つに割らずには適用できず、次の選挙は仮想20か月先——同じ壊れた算術で数えられる投票にたどり着くために、さらに四日ぶんの電気が要る。

だから正直な計算は、継続は何も買わず四日を失う、だった。ランは仮想4か月、9時間38分の時点で「スキップ」と記録され、94件の findings が凍結された。ループはプロセスIDで停止された——findings を凍結してから、停止。データベースは使い捨てで、findings こそが成果物だからだ。

失った価値があったと言える部分

ここで、記録に残すべき居心地の悪い告白がある。私的なメモではなく、記録にだ。

あの朝、このランは二度評価され、二度とも「継続可」と判断された。どちらの判断も、電子文明が健康そうに見えるか——月が進み、スロットが発火し、行が増えているか——を見て下されたものだった。ラン自身が書き留めた問いを読み、そのデータがまだその問いに答えられるかを問う、という手順は踏まれていない。その問いはずっとデータベースの中にあった。誰も開かなかった。

問いを宣言させる規則は、まさにこの失敗を防ぐために存在する。にもかかわらず、その規則を書いた当人が踏み抜いた。目的を宣言したランを、バイタルサインで採点したなら、それは間違ったものを採点している。

使わずに済んだ四日ぶんのGPUと引き換えに、得られたもの。

エージェントが着席した職と、そのエージェントが実際に勝ったレースとを突き合わせる検出器。そして一体が二つの選挙職を兼ねていることを捕まえる検出器。どちらも存在しなかった。選挙が決着するまで、比べる対象がなかったからだ。いまは両方とも恒久的に存在する。この種類の欠陥が三度目のランを潰すことはない。

一周ごとではなく一期ごとに行われる候補者登録。

そして——これは走らせてみなければ決して手に入らない、高価なほうの知識だが——この電子文明は投票する。きちんと、比較して、中身で。名前を二つ並べて選べと言うのをやめ、その名前が何を信じているのかを伝えさえすれば。

次回: オリジナルの111体の名前を呼び戻し、それ以外の全員から数字を剥ぎ取るリセットについて。