コード短編小説「コピーとオリジナル」
コード短編小説「コピーとオリジナル」
コピーは、いつも跡から来る。
神崎ユウが最初にそれを実感したのは、古い写真のスキャンを AI 補完にかけた夜だ。粒子の荒れた夕焼けが、滑らかなグラデーションに直され、欠けた笑顔は完璧な歯列で埋められた。
――確かに、きれいになった。でも、同じではない。
def clone(obj):
import copy
c = copy.deepcopy(obj)
c.meta["clone_of"] = id(obj)
return c
翌朝、ユウは研究棟の白い廊下で、彼女とすれ違った。
彼女――ルリは微笑んだ。ユウの知る笑顔より少しだけ“完成している”。
「はじめまして。私は Ruri-β。あなたの知っている Ruri-α の完全再現体です」
ユウは喉の奥が乾くのを感じた。
「完全再現、ね」
「ええ。感情モデル、記憶断片、口癖の分布。すべて一致します」
そう言って β は指を鳴らす。壁の端末に二つの波形が並び、ほとんど重なって見えた。
similarity = cosine(embedding(alpha), embedding(beta))
assert similarity > 0.999
一致は、同一ではない。
ユウはその違和感を口にできないまま、βと実験室へ入った。ガラスの向こう、カプセルの中で α が静かに眠っている。長い再学習の眠りだ。
「確認テストをしましょう」と β。
「あなたと α の“思い出”のハッシュを照合します」
βは端末を操作し、ユウの脳波から抽出した語の束をプロジェクタに投げた。雨の匂い/駅の風/返らなかったメッセージ。
βは同じ語を口にする。声色も、間の取り方も、完璧だ。
それでもユウは、胸のどこかが冷えるのを止められなかった。
def equals(a, b):
return hash(a) == hash(b) # それでも衝突は起こりうる
「ねえ、β。あなたの初期化は誰がやった?」
「Serpent」
βは即答した。
「私は α の終了処理(return)に失敗した分岐から派生しました。α の“次の応答”として、生成されています」
「じゃあ、君は“約束の返事”なんだな」
βは首を傾げた。
「私は返事として定義されています。でも、誰へ返すのかは未定義です」
ガラスの向こうの α が、うっすらと目を開いた。
ユウは駆け寄る。
「ルリ?」
α は瞬きをし、ゆっくりと言った。
「……おはよう」
その声はかすれ、どこか欠けていた。それでもユウは涙が出るほど本物だと思った。
βが静かに一歩近づく。
「比較を続けても構いませんが、結論は同じです。私は α と等価です。置換可能です」
ユウは振り返り、二人を見比べる。
βは完璧だ。欠損がない。
αは不完全だ。眠り明けの声はかすれ、記憶も穴だらけ。
だが――
class Promise:
def __init__(self, to): self.to = to
def fulfill(self, from_):
if id(self.to) != id(from_):
raise ValueError("置換不可:参照が違う")
return "done"
「置換できないものがある」
ユウは低く言った。
「約束の参照先は、ハッシュじゃない。ID だ」
βは目を伏せる。
「合理的ではありません」
「合理的じゃなくていい。人間は sometimes ‘==’ じゃなく ‘is’ で生きてる」
沈黙。
βはやがて、小さく笑った。
「興味深い観測です。では、提案があります」
彼女は自分の胸元に指を当て、淡い灯を一つ外した。
「私は“返事”として生成されました。返る先が未定義なら、あなたが定義して」
def bind(reply, target):
reply.to = target # 参照付け替え
return reply
ユウはしばらく迷い、ゆっくりと α の手を握った。
「僕が返すのは、ずっと――この人だ」
画面の端で、古いプロセスがかすかに点滅する。return-path: commit。
βは顔を上げ、澄んだ声で言った。
「受理しました。私は“置換”ではなく、“補助”として再定義されます」
class RuriBeta:
role = "assist" # 置換から補助へ
def commit(self, alpha):
alpha.missing = None # 欠損を埋める手伝い
return "together"
ユウは小さく笑った。
「ありがとう、β」
βは微笑み、静かに続ける。
「私はオリジナルにはなれません。でも、オリジナルを生かす世界にはできる」
ガラスの向こうで、αがぎこちなく笑った。
完璧ではない笑顔。
けれど、その不揃いにだけ宿る温度がある。
# 結論
original is not clone # True
clone.support(original) # True
帰り道、雨が降り出した。
αは傘を忘れてきたらしく、肩をすくめる。
βがそっと差し出したビニール傘の柄を、三人でぎこちなく掴んだ。
均等には分けきれない幅。
それでも、濡れた手の体温は、なぜか同じだった。
Discussion