「とはいえ証明は難しくない。この模型のもとになっているのは
そう言ったノヴァーク博士は席へ戻った。
「棚には記号が振られていて、手元には作業手順書がある。手順書に従って棚から紙を取り出し、紙に書かれた数字を書き換え、判断をしていく」
「それにしても、指示の種類が少なすぎませんか?」
「そうでもない。もし万能計算機械の模倣だけなら、これだけで十分だ。そして万能計算機械が模倣できるなら、今のところ真っ当な方法で計算できると知られているあらゆる数学的処理は実現可能だ」
「ああ、また効率が無視されている……」
ケレメンは息を吐いた。
「実際に解く問題を想定してしまうと、汎用性が失われるだろう?」
「万能工具って使いにくいんですよ、専用のものを揃えるのが基本だ、と父も言っていましたが」
「君の父上は……そういえば、だったな。すまない」
ケレメンが休学していた理由の一つが彼の父の死による金銭的問題である、という話を以前聞いていたことをノヴァーク博士は覚えていた。
「いえ、気にしないでください。戦時中は
「……なるほど。とはいえ、ある一つの目的のために特化しすぎるとそれはそれで問題を生むだろう?程度ではあるだろうが」
ノヴァーク博士の言葉に、ケレメンは渋々ながらも頷いた。
「とはいえ証明は簡単だ。例えば
「かなり長い桁数になるでしょうが、そうですね」
「機械を左右に動かすのは、桁を一つ下げて一番下の数字を抜き取ること、あるいは桁を一つ上げて、一番下に数字を足すことに相当する。理解はできるかい?」
「……少し黒板を借りても?」
「もちろんだとも」
席を立って白墨を持ったケレメンの背中を見ながら、ノヴァーク博士は珈琲を一口飲んだ。
434294 = 43429 × 10 + 4
「左から右の操作をすれば、つまりは10で割って商と
「その通り」
「あと左の
「いや、君もこの手の数学的作業に慣れてきたようで何よりだ」
満足そうに言うノヴァーク博士に、ケレメンは呆れたような顔をした。
「で、これを使ってどういう
「仕掛けのある
杖ならぬ白墨を渡されたノヴァーク博士は黒板に向かい、数行の文字を書いた。
1: -A →4
2: +B
3: -N →1
4: cseng
「今回使う
「Nとcsengって何ですか?」
「
「なるほど、作業終了ですか」
ケレメンは以前にノヴァーク博士が作業終了時に電鈴を鳴らせばいい、と言っていたことを思い出した。
「そう。+や-の後にあるのは操作対象の
「……あれ、すると3行目は無条件で1行目に戻りませんか?」
ケレメンは黒板の「-N →1」という行に着目した。Nという棚は名前からして常に0だとしたら、無条件で1行目に行くことになる。
「そう。Nという棚は移動のためだけに使っている」
「命令数を減らすための犠牲ですか」
「……そうとも言うね」
「もう少し使いやすい命令を使ったほうがいいのでは?」
「なら作っていこうか。まずは無条件の移動をただの矢印で表そう。」
1: -A →4
2: +B
3: →1
4: cseng
「さて、この命令表が何を示しているかわかるかい?」
「最初に棚に入っている数字がわからないとどうにもなりません」
「それもそうだ。Aは3、Bは0でいこう」
そう言ってノヴァーク博士は白墨をケレメンに渡した。
「……命令1を実行して、入っている数字が0ではないので1を引いて命令2へ、とやっていけばいいんですよね?」
「その通り」
A B
3 0
1: A- →4 2 0
2: B+ 2 1
3: →1 2 1
1: A- →4 1 1
2: B+ 1 2
3: →1 1 2
1: A- →4 0 2
2: B+ 0 3
3: →1 0 3
1: A- →4 0 3
4: cseng 0 3
単調に手を動かす作業にも慣れたケレメンは、思ったより早く終わった作業の結果を見ていた。
「数を移すやつですか」
「最初にやるのはこれがいいだろう?」
そう言ってノヴァーク博士は笑みを浮かべた。
「……前に比べて短く終わりましたね」
「今回は $3x + 1$ 回の操作で終了する。前は $2x^2 + 5x + 6$ だったから、こちらの方式のほうが効果的だろう?」
「……あの、これって実際には熱電子管などを使った機械で実現するんですよね」
「そうなるね」
「前に作った記憶回路と入力を繋いで、
「なら、その命令を搭載してしまおう」
ノヴァーク博士はそう言って、黒板にまた字を書いた。
「Rは
1: R- →3
2: →1
3: B- →5
4: →3
5: A- →9
6: B+
7: R+
8: → 5
9: R- →11
10: A+
11: cseng
「……最初の1行目と2行目はRが0になるまで減らして、3行目と4行目はBを0にしている?」
「そうすると作業が楽になるからね」
「これにも後で名前つけましょうよ。それで、まずはAを0にしておいたBとRに移動させて、この過程でAは0になって9行目に進む……」
「そして?」
「あとはRの数字をAに戻している。ああ、確かにRは倉庫みたいな働きをしていますね。作業をするための一時的な物置ですか」
「これで君のやりたかった命令も作れた。これをまとめて」
B := A
「と書くことにしよう。数学の代入を示す記号を持ってきた」
「そうすると、先程出た0にするための命令は」
A := 0
「とでもするのがいいですか?」
「そう。あとは余りを計算できることを示せば必要な部品は揃う」
それを聞いて、ケレメンはしばらくじっと黒板を見た。
「……一つ、効率が悪いですが方法は思いつきました」
「ほう」
「Aを10で割ってBを商、Cを剰余になるようにしてみます」
「やってみたまえ」
ケレメンは何回かやり直しながらも、黒板に白墨を走らせていった。
1: B := 0
2: C := 0
3: A+
4: A- →25
5: A- →24
6: A- →23
7: A- →22
8: A- →21
9: A- →20
10: A- →19
11: A- →18
12: A- →17
13: A- →16
14: B+
15: →4
16: C+
17: C+
18: C+
19: C+
20: C+
21: C+
22: C+
23: C+
24: C+
25: cseng
「なるほど」
ノヴァーク博士はケレメンの書いた命令を一瞥して呟いた。
「先に1を足して余りの問題を楽にしておいてから、Aを減らして0になった時で場合分けをして、Cに換算する場所をずらしていくのか」
「たぶん博士ならもっと綺麗にやるのでしょうが」
「とはいえあまり変わりはないよ。Aが10以下になったかどうかを判定するためには引き続けて0になったかどうかでしか判定できない以上、この方式だとどうしても命令数がかさむ」
「……あとは、これの逆の命令を作ればいい、と」
「それも難しいことじゃない。棚の数字を1減らして別の棚に10増やすことをすれば十倍にできるし、同じように別の棚を足せば積と和の組み合わせは作れる」
「機械の動作は条件分岐でどうにかしていけば……」
「この種の棚方式の機械でも、
そう言ったノヴァーク博士は背筋を伸ばし、暗くなってきた窓の外を見た。