動機づけ
よくわからないんですけどスタァライトってチューリング完全なんですか?
— ふぁぼん(Фабон Ильич Фаворский) (@syobon_hinata) October 21, 2021
準備
Turing完全について
チューリング完全とは、計算理論において、ある計算のメカニズムが万能チューリングマシンと同じ計算能力をもつとき、その計算モデルはチューリング完全(チューリングかんぜん、Turing-complete)あるいは計算完備であるという。
フリー百科事典『ウィキペディア(Wikipedia)』
多くのプログラミング言語はTuring完全であるように設計されていますが,その中でよく知られていてかつ命令が単純なものにBrainfuckがあります.
キャラクタの数学的性質について
特定の文脈においてキャラクタ同士の関係に数学的なものがあることが知られています.
以下はその例となります.ただし,$Cat$をキャラクタの集合とし,$A, B, C \in Cat$とします.
- $A \times B$ $(A \neq B)$
- 恋愛や性的関係において,AとBがどういう立ち位置であるかを示す.
- 基本的に非可換.
- どうみても演算ではないので実際にはTuple $(A, B)$で書かれる方が適切.
- $A \rightarrow B$
- 恋愛関係において,いわゆる片思いとよばれるものと同じ.
- グラフ理論における有向グラフに同じ.
- 自己ループを持つこともある.
- $A \rightarrow B$ かつ $A \leftarrow B$であるようなものを両思いというが,必ずしも肯定的に関係が成立するわけではない.
- $A \sim B$
- いわゆる双子.三つ子以上のときもある.
- $A \sim A$,$A \sim B$ ならば $B \sim A$,$A \sim B$ かつ $B \sim C$ ならば $A \sim C$ なので正しく同値関係.
- $C \rightarrow A$ のときに $C$ が $A$ と $B$ をよく間違え,その結果として $B$ も我々も悲しい気持ちにさせられる.
ほかにもあると思いますが,この記事ではそれ以上の紹介をしません.
オタクについて
実はオタクは万能Turingマシンと同じ計算能力を持っています.
具体的にはBrainfuckの命令を読んで実行するだけの能力があります.
計算手法
ここまで読んだ方にはわかるかと思いますが,プログラムを関係の列,オタクを計算機として扱えば計算ができることになります.
正確に説明すると,あるページまたはコマにおいて,「キャラクタの数学的性質について」で述べた3つの関係を扱うかどうかで3bitを管理し,この3bitをBrainfuckの命令に割り当てます.これを解釈したオタクが計算をすることで結果を得られるわけですね.
問題点について
この計算手法にはいくつか問題があることが知られています.
オタクによる解釈違い
「キャラクタの数学的性質について」1, 2は解釈違いを起こし,計算結果が異なる可能性があります.
(ex. まだ $A \rightarrow B$ ではないのでは?)
そういう場合は解釈違いを認めないように各所に監視者を配置する必要があることがあります.
オタクの寿命
実際に計算をする段になると,たまに計算終了より早くオタクのほうが亡くなる場合があります.
人間の命は短いのでやはりそういうことは起こりますが,おねえさんになることで解決することもできます.
まとめ
退屈なことは人間にやらせよう