セルフリファレンス・エンジン

2024 - 10 - 25

起きてあげたい。

学校に行った。予約していた本を借りた。また、キャリアセンターでポートフォリオを添削してもらう枠を取った。まだポートフォリオは存在していないのに。次の月曜日までに完成させなければいけなくなった。土日でやろう。土日でできるのか? 鞭を打っていく。

元水泳部の友達に、プールでクロール2本泳いだだけで体力が限界になったと話したら、「そんなわけあるか」と言われた。「根性がないんだよ」と言われた。根性はあるつもりだが。「もったいないよ」とも言われた。たしかに。僕は毎回、1時間15分の利用チケットを買ってプールを利用している。でもだいたい20分足らず泳いだら、満足して帰る。言われてみれば、もったいなかった。今度僕が泳ぐとき、その友達が来てくれることになった。なんでだよ。「時間と場所だけ指定してくれれば行くわ」と。変な行動力だ。まあせっかくなので、泳ぎ方を見せてもらおう。バタフライを教えてほしいな。

期日前投票をした。比例代表で党名を記入するとき、党名は正式名で書いてもいいし、略称で書いてもいい。表を見てみると立憲民主党も国民民主党も略称が「民主党」で登録されていて、どういうことだ、と思った。どうやら公職選挙法では、略称のかぶりは禁止されていないらしい。この場合、もし民主党とだけ書いて提出したら、その票は立憲民主党と国民民主党それぞれの有効票の割合に応じて按分されるようだ。どちらも「民主党」という看板を譲りたくなかったのか。

村井の恋面白い。

ダンダダン面白い。

このカットの桃の目、なんか不安になる。アニメを見るとき、こういうところでつい止めてしまう。

相変わらず『情報 第2版』をやっている。第6章を読んでいる。有限状態機械とチューリング機械の頑健性、対角線論法、P ≠ NP問題など。

難しい!? ェ! 演習問題が、全然解けない。僕はこの章のために、6時間くらいかけてしまった。一問一問、頭が煮えるまで考えた。でも、わからなかった。だから解答を見た。しかし、解答の意味がわからなかった。

パートナーに助けを求めた。

一緒に考えてくれて、紙をたくさん使って解説してくれた。僕は最終的に、なんとか理解した。わかったことは、どれもめちゃくちゃ面白い問題だったということだ。

[6.6]定理5を示そう.

『情報 第2版』p.158

定理5

問題Lを解く両方向有限状態機械が存在するならば, Lを解く(両方向でない)有限状態機械が存在する.

『情報 第2版』p.145

巷で聞く「チューリング機械(マシン)」は、データをある一次元の文字列のテープに変換して、その文字を一字ずつ読み取りながら左右に移動したり文字を書き換えたりすることのできる機械のことだ。この仕組みを利用すれば、さまざまな問題を解くことができる。これはひじょうに性能の高い計算モデルで、時間の制約を無視すれば、実質どのコンピュータにも負けない計算能力を備えている。

「有限状態機械」というのはそのチューリング機械よりも一回り弱い計算モデルだ。文字列のテープを使うところまでは同じだが、左端から順に読んでいくことしかできない。後戻りや書き換えはできない。これだけだとチューリング機械よりも、解ける問題が限られてしまう。

では、左方向への後戻りを解禁して、左右に動ける機械を作ったらどうか。それを「両方向有限状態機械」と名づけた。これなら計算力が幾分か上がって、解ける問題が増えてくれそうだ。

ところが定理5によれば、両方向有限状態機械に解ける問題は、両方向でないただの有限状態機械でも絶対に解けるらしい! 左右移動を可能にしたところで、解ける問題はまったく増えないということだ。こういった事実が有限状態機械の「頑健性」———多少の改良では計算能力がまったく変わらない、確固たるスペックを持つこと———を示している。その頑健性をやぶって、現代最強の計算モデルを開発したチューリングがすごいという話でもある。

で、演習問題[6.6]はその定理5を自力で証明しなさいというものだった。荷が重い。実際には問題文はこれだけでなく、以下に丁寧な誘導がついていた、んだけど……多分著者からすると丁寧なつもりかもしれないが……トロヤマイバッテリーズフライドのニューラルネットワークは追いつかなかった。この問題の理解に3時間くらい使った。

でも、解法がすごく面白い。問題を表す文字列x(あいうえおとか)の名を冠する、ある状態を入力したらある状態を返す関数[x]を定義する。xの左端から一字ずつ読み込むごとに、今まで読み込んだ文字そのものの名を冠する関数[あ],[あい],[あいう],……を生成(というか命名)し、その名を冠する状態[あ],[あい],[あいう],……に遷移する。最終的にxの右端の最後の文字を読んで、状態[x]に遷移する、ということをするのだ。状態の数は有限なので、状態から状態への関数の種類も有限通りになる。それら一つ一つに規則的に名前をつけながら遷移していけば、最終的に”問題文(をあらわす文字列)と同じ名前の関数”にたどり着けるのだ。僕の理解が合っていれば、そう。

いわば、ある文字列が、その文字列の読み方自体を教えているようなものだ。「f(x)=x+1」という関数があったとして、関数の名前を「f(x)」ではなく「[x+1](x)」とか「[入れた数に1を足す](x)」にするような感じだろうか。自己複製するDNAのような美しさがある。最近の僕のもっぱらの興味、自己参照(self-reference)が現れている。

そんなところ。演習問題があると、おのずと本文を何度も読み込むことになる。ページをめくっては、後戻りする。こういうことをしていると、ページが指の形にへこんだり、めくる感覚が親指の腹に残ったりして、紙媒体の物質性が浮かび上がってくる。このくらいわからなさに向き合う時間がある方が、真に充実した「読書」になるなんじゃないかという気がした。真の読書の質において、電子書籍はまだ紙の本に勝っていない。

僕は、文系の理論書や小説にも演習問題をつけたら良いんじゃないかと思ってみた。解答は全部「略」でいいからさ。自分で問いを立てることをさぼりながら読んでると、時としてあっという間に文字列を通り過ぎて、ふかしてるだけの読書になってしまう。もっと文中を右往左往して、頭を悩ますべきなのではないか(有限状態機械の頑健性によれば、後戻りしなくても同じスペックは出せることになるけど)。

以前この話をパートナーにしたら、「別にふかすだけの読書も楽しいけどね」と言われた。

そうなんだよなー。