第42話 ガラクタの中の答え
夜明け前の暗さの中で目が覚めた。
屋根裏の窓はまだ青い。隣でノラの寝息が静かに続いている。毛布の中で身体を丸めたまま、天井の梁をしばらく見ていた。
(——先日、二つの基本的な動きの原理を確かめた)
歯車を組んで「Aが回ればBも回る」「Aが回ればBは止まる」を作った。手の中で動く小さな機構は、確かに前世で AND や NOT と呼んでいた論理ゲートの原型だった。
(——今日は組み合わせて、もう少し複雑なものを作りたい)
頭の中で歯車の配置が動く。AとB、二つの入力。両方が同じなら出力なし、違うなら出力あり——片方だけ違うと動く仕組み。前世なら XOR と呼んでいた組み合わせ。加算器にも暗号にも判断にも使える、基礎中の基礎の部品。
(——『片方だけ違うと動く』、これが作れたら、本格的に応用できる)
毛布を押しのけた。
朝食は急ぎ目に済ませた。エマがちらりとわたしを見た。
「リナ、また工房?」
「うん」
「お粥、もう少し噛んで」
「うん」
慌てて口の中の粥を咀嚼した。エマが小さく笑った。
◇◇◇
工房の扉を押し開けると、もう父は作業台に向かっていた。今日は別の置時計の修理らしく、蓋を開けて内部の歯車を点検していた。
「お父さん」
「ん」
父アルベルトは振り向かない。
「あの隅、また使っていい?」
「ああ」
それだけで会話は終わった。
奥の壁際に向かうと、先日の三つの試作が小箱の中にそのまま残っていた。
(——お父さんは、何も問わない)
(——でも、見てくれている)
作業台の脇の小箱を覗き込んだ。父が修理に使わなかった古い歯車たちが無造作に放り込まれている。同じ大きさのものを二つ、一回り大きいものを一つ。木の軸になる細い棒も何本か選んだ。
(——入力A と B、両方が回るときは出力しない。片方だけ回るときに出力する)
(——AND の逆を OR と組み合わせれば作れる)
頭の中で配置が固まってきた。入力Aの歯車と入力Bの歯車。両方の動きを受け取る中継歯車と出力歯車。間に逆回しの歯車を一つ挟む。
八歳児の手でも設計図は満足には書けない。頭の中で組み立てるしかなかった。
◇◇◇
一つ目の試作。
木の端材に錐で穴を開けて、軸を差し込む。八歳の指でもまだ細くて、錐を真っ直ぐに立てるだけで一苦労だった。何度も穴の角度がずれて、軸が傾いた。
(——焦らない。前世のデバッグと同じ。一つずつ確かめる)
歯車Aを軸に通した。歯車Bを別の軸に通した。中継の歯車をその間に置いて、噛み合わせを確かめる。軸の高さが微妙にずれていた。指の腹で押さえつけて、もう一度位置を直す。
Aを回した。
中継歯車が回って、Bが回った。
(——これは AND じゃなくて、ただの連動だ)
(——もう一段、組み合わせがいる)
逆回しの歯車を、出力の手前に追加した。Aを回す。中継が回る。逆回しが回る。出力——逆方向に回った。
(——あ、逆回しの位置が違う)
期待した動きと違った。XOR にしたいのは「片方だけ回ったときに出力あり」「両方同じなら出力なし」という動き。今の組み方では、Aだけ回しただけで出力が逆になってしまう。
頭をかいた。指に木屑が付いていた。
(——配線が違う)
(——前世なら、ホワイトボードに書き直すところ)
息を吐いて、組み上げた試作を一度ばらした。
◇◇◇
二つ目の試作。
今度は逆回しの歯車を、出力の直前に置いた。Aの軸とBの軸を平行に並べて、それぞれの動きを中継の歯車に伝える。中継から出力まで、逆回しを挟む。
手で歯車Aだけ回した。
出力が回った。
歯車Bだけ回した。
出力が回った。
両方同時に回した——力が打ち消し合って、出力が止まった。
「(……できた?)」
声に出さずに呟いた。指先が少し跳ねた。
けれど、すぐに気付いた。両方を同時に回すのは指で力を加減しているからで、AとBの回転速度が違ったら、結果は変わってしまう。
(——まだ不完全)
(——『片方だけ』の判定が曖昧)
Aを少し強く回すと出力が動いてしまう。Bを少し強く回すとまた動いてしまう。両方の力を完全に揃えないと、ちゃんと打ち消し合ってくれない。
(——歯車の比が違うのか)
歯車を取り替えてみる。一つ大きいものに変えて、また小さいものに戻して、軸の位置をずらしてみる。何度組み直しても、どこかで誤動作が出た。
額に汗が滲んだ。指先が痛い。木屑が爪の間に入っている。
◇◇◇
何度目かの組み直しで、わたしは手を止めた。胸の中で苛立ちが小さく膨らんでいた。前世なら、こんな単純な論理回路はシミュレータで一発で確かめられたのに。
そのとき、父の手が止まった。ドライバーを作業台に置いて、わずかに首だけこちらに傾ける。
「リナ」
「うん」
「歯車の比、確かめたか」
「?」
父はゆっくり言葉を継いだ。
「Aの歯車とBの歯車、歯の数が違ったら、回転速度が違う。それで出力がずれる」
——あ。
頭の奥で何かが繋がった。
(——基本中の基本)
二つの入力の回転速度が違えば、いくら配線が正しくても、結果は揃わない。デジタル回路なら全部のクロックが同じだから意識しなくていいけれど、機械では速度そのものを揃えないといけない。
「ありがとう、お父さん」
「ふん」
父はそれ以上は言わなかった。ドライバーをまたつまみ上げて、置時計の内部に向き直る。
わたしは小箱の中の歯車を全部出して、歯数を一つひとつ数え始めた。
同じ歯数のものを揃えて、Aの軸とBの軸に通す。中継の歯車も、なるべく近い歯数のものを選ぶ。
◇◇◇
陽が西の窓から差し込み始めた頃、わたしの手は最後の組み立てに入っていた。
歯車Aを軸に。歯車Bを並列の軸に。両方とも歯数十二の同じ歯車。中継の歯車は歯数十六、それを介して逆回しの歯車を出力の直前に置く。
息を整えてから、指でAだけ回した。
出力が回った。ゆっくりと、確かに。
Aを止めて、Bだけ回した。
出力が回った。同じ速度で、同じ向きに。
両方同時に回した。
出力は——止まったまま、動かなかった。
両方止めると、もちろん出力は止まったまま。
(——できた)
胸の奥でじわりと熱が広がった。
(——XOR、完成)
歯車が四つと軸が三本、それと木の端材の土台だけの、見た目はただのガラクタ。けれど、これは確かに「違いを検出する」装置だった。AとBが違うときだけ、出力が動く。同じなら動かない。
頭の中で、その動きを表に起こしてみる。
```pseudo
A=動・B=止 → 出力=動(違う)
A=止・B=動 → 出力=動(違う)
A=動・B=動 → 出力=止(同じ)
A=止・B=止 → 出力=止(同じ)
```
四つの場合を並べると、はっきりする。二つが違うときだけ動く——前世で XOR と呼んだ、判断の基礎部品だ。
(——これで、複数の入力の違いを物理的に取り出せる)
(——わたしの眼が瞬間しか読み取れない揺らぎを、この機械が記録して比べてくれる)
(——眼が読み落とした一瞬を、機械なら何度でも比較できる)
歯車が、ゆっくりと止まっていく。木の軸が小さく音を立てた。
わたしは試作物をそっと作業台の隅に置いた。
◇◇◇
父が振り返った。
ドライバーを置いて、こちらの作業台に視線を落とす。皺の刻まれた指で、組み上がった歯車機構をしばらく見つめていた。
「リナ」
「うん」
「それは、何だ」
少し迷ってから、わたしは答えた。
「……『差を写して比べる仕掛け』」
父は短く息を吐いた。
「これは、まだ概念模型だな」
(——え)
「歯車の遊びがある。軸が真っ直ぐじゃない。何回か回せばずれる」
父の指が、軸の根元のわずかな歪みを示した。
「実用品にするなら、遊びと摩耗と速度差を潰す必要がある」
「うん」
頷きながら、内心で頭が冷えた。父の言う通りだった。今のわたしの試作は、原理を確かめただけの代物。これで村の魔法の揺らぎを記録するのは、まだ無理だ。
(——精密な歯車が要る)
(——わたしの手では、作れない)
「写して、比べる」
父が低く繰り返した。声の調子に問い詰める色はなかった。ただ、聞き返しただけ。
「わたしが眼で見た差を、歯車の位置に写し取る。その差を機械の側で比べる」
父はもう一度試作を見た。Aの歯車に指を一本だけ触れる。それからBの歯車にも触れる。両方を同時に押さえようとして、片手では届かないと気付いて、手を引いた。
「……お前、これを、何に使うつもりだ」
問いの声は静かだった。
「魔法の不調に、役に立つかもしれない」
父の眉が、ほんのわずかに上がった。
数瞬の沈黙。
それから父はドライバーをまたつまみ上げて、自分の置時計に向き直った。それ以上は何も聞かなかった。
(——お父さんは、たぶん何かを察した)
(——その上で、置時計の修理に戻った)
工房の隅に置かれた小箱に、四つの歯車と三本の軸でできた小さな機構が静かに収まっている。
(——明日、グスタフさんに見せよう)
立ち上がりかけて、わたしはもう一度試作物を見下ろした。木の軸はぐらつくし、歯車の噛み合わせも甘い。原理は動くけれど、これではまだ「がらくたみたいな道具」のままだ。
もっと精密に、もっと小さく、もっと正確に動くものが要る。けれど父は置時計の修理で忙しいし、父の領域に踏み込みすぎるのも違う気がした。
(——もっと精密な歯車が欲しい)
(——グスタフさんなら、作れる)
工房の外で、夕方の風が屋根を撫でていた。
■あとがき・解説
第42話は、リナが歯車で XORを組み上げるまでの試行錯誤の回でした。前世のリナならシミュレータで一瞬の話が、八歳の手では一日仕事になります。今回はその XOR と、父アルベルトが助言した「歯車比」について解説します。
■この話で出てきた言葉
■「XOR(排他的論理和)」
論理ゲートの中でも、ちょっとひねくれた働きをする部品です。日本語では「はいたてきろんりわ」と読みます。
ルールは単純で「二つの入力が違うときだけ出力を出す」。両方が同じ(両方オン/両方オフ)なら出力なし。片方だけがオンになったときだけ、出力がオンになる。
なんでこんな部品が大事かというと、これがあれば「足し算の繰り上がり判定」「データを暗号で隠す処理」「二つの記録の食い違いを見つける処理」など、いろんな仕事ができるからです。前話の AND と NOT に並んで、コンピュータの最下層を支える主役の一つです。
リナがガラクタの歯車四つで作り上げたのは、まさにこの XOR の機械版でした。両方の歯車を同時に回すと打ち消し合って出力が止まる。片方だけ回すと出力が動く。電気を一切使わずに「違いを検出する」装置です。
■「歯車比」
歯車には大きさと「歯の数」があります。歯数の多い歯車と少ない歯車を噛み合わせると、回転の速さが変わる。これが「歯車比」です。
たとえば歯数十二の歯車と歯数二十四の歯車を噛み合わせると、小さい方が一周する間に大きい方は半周しか回りません。動きが二対一の比率で変換される、というのが歯車比の基本です。
時計、自転車、自動車、工作機械——回転を伝える機械のほぼ全てが、この歯車比の上に成り立っています。父アルベルトが時計職人として最初に身につけたであろう知識でもあります。
リナの XOR が誤動作していた原因は、まさにここにありました。入力AとBの歯数が違うと、同じ力で回しても回転速度が違ってしまい、出力で打ち消し合うはずの動きがずれてしまう。父がぼそりと「歯車の比、確かめたか」と告げた一言が、リナを一気に解決まで導きました。
■「抽象化」
「同じ動きを、別の素材で再現する」という考え方のことです。
前世のリナが知っていた論理ゲートは、半導体(シリコンの結晶)の中を流れる電気で作られていました。けれど論理ゲートが「論理ゲートである」ために本当に必要なのは、電気でも半導体でもなく「特定の入力に対して、特定の出力を返す」というルールだけ。
ルールさえ守れれば、素材は電気でも、歯車でも、水でも、極端な話、ドミノ倒しでも構わない。実際、世界には「水で動く論理ゲート」を作って遊んでいる人もいます。
リナがガラクタの歯車で XOR を再現できたのは、この抽象化を前世で何度も体験していたからでした。中身が電子から木と金属に変わっても、ルールさえ揃えれば同じ仕事をしてくれる。これは現代プログラマーが日々お世話になっている、もっとも基本的な考え方の一つです。
寡黙な父アルベルトが、ドライバーを置いてたった一言だけ助言を渡す場面。書きながら胸が熱くなりました。教えるのではなく、見守って、必要なときに最小限の一言を渡す。あれが父の流儀です。
次の話もお楽しみに。




