老害な守護者「M:tGはチューリング完全だと言っているそうだな。それをどう示してくれるのかね？」【未完成、順次更新】【1/6】 

# 前置き
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496507/2d0544f2-a323-b92c-f596-fba3a2e61a17.png)
**[頑固じいさん](https://w.atwiki.jp/mtgwiki/pages/987.html)「ゆっくり頑固じいさんだ」**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496507/05322ec3-dc21-58e5-2776-5c70964812a3.png)
**[老害な守護者](https://mtg-jp.com/cardlist/list/UST.html) 「ゆっくり老害な守護者です」**

じ「守護者ぁ、我らがカードゲームの、**マジック：ザ・ギャザリングがチューリング完全だ**って噂を聞いたんだけど、いまいち良く分からないのだが...」

**守「マジック：ザ・ギャザリングはチューリング完全だと言っているそうだな。それをどう示してくれるのかね？」**

じ「えっ」

守「...コホン。では、今日は**チューリングマシンをマジック：ザ・ギャザリング上で動かす方法**を説明していきます」

じ&守 「ゆっくりしていってね！」

# この記事は？
以前、私はこんな記事を書きました：

https://qiita.com/Snowman-s/items/d601fdea3a57397ec48b

これはマジック：ザ・ギャザリングというカードゲームがチューリング完全であることについて、その根拠となる論文をたどっていった記事です。

が、
正直そこからは全く何も感じられません...。

という事で、**実際のチューリングマシンをマジック：ザ・ギャザリングの中で動かしてみる**[^try]という記事になります。

早速、彼らが説明してくれるようですよ。[^yukkuri]

:::note warn
以降では、 以下のように短縮表記をする場合があります。
> 「マジック：ザ・ギャザリング」 → 「マジック」 
> 「チューリングマシン」 → 「TM」 
:::

# で、そもそもチューリング完全って？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496507/2d0544f2-a323-b92c-f596-fba3a2e61a17.png)
頑固じいさん「というか、わしはそもそも、チューリング完全とかいうのをふんわりとしか理解していないのだが」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496507/05322ec3-dc21-58e5-2776-5c70964812a3.png)
老害な守護者「チューリング完全っていうのは、大雑把に言うと、チューリングマシンをシミュレートできる環境のことです」

守「具体的に言うと、マジックが**以下の3つを満たせば、マジックはチューリング完全**といえるわけですね」

1. ある**チューリングマシンが与えられた**ときに、それに**対応したゲームの状態を上手く作る**ことが出来ること
1. そのゲームで、プレイヤーが**行動を決定するためのルール**があること
1. ゲームが終わった時、その**状態を上手く解釈**すれば、元のチューリングマシンの**状態を読み取ることが出来る**こと

じ「えーと、チューリングマシンってなんだ？」

## チューリングマシンとは？ (大雑把な解説)
<details>
<summary>折り畳み</summary>

守「チューリングマシンとは、昔の偉い人が考えた**入力を計算する仮想的な機械**です」

守「この機械は、テープと制御装置の二つから構成され、ルールによって計算を進めていきます」

じ「？？？」

守「例を出しましょうか。下の図を見てください。」
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496507/c7143212-7ea0-8702-44bd-e57379f929cc.png" width ="80%"/>

守「まず最初に左右に**無限に続いていくテープ** を用意します。」

守「あ、テープって言ってもカセットテープのような細長い紙ですよ。」

じ「最初からすごいことを言っているな」

守「**仮想的な機械**ですから。そのテープは、一定の長さごとにマス目で分けられています。この**マス目一つごとに一つ、好きな記号** を書くことが出来ます。記号にはアルファベットを使うことが多いです。」

守「テープには、まず最初に、**入力とする記号の列**を書いておきます。そして、余った左右の空白に**何も書いていないことを表す、特別な記号**を、無限に書いておきます。」

じ「上の図だと、入力が、 $ABAB$ で空白記号が $S$ であるという事か。なるほどテープは無限の長さだから、左右を**空白記号が無限につながっている**ことにしないといけないんだな。しかし、ただの紙切れが出来ただけで何が嬉しいんだ？」

守「ここから面白くなります。チューリングマシンは、あと**制御装置を持っている**、と言いましたね。制御装置は、以下の行為を可能な限り繰り返すだけの装置です。」

1. 今指している場所を読む。
1. 読んだ記号と現在の内部状態によって、①内部状態を変化させ、②記号を今指している場所に書き、③読んでいる場所を左と右に動かす。

守「 **内部状態(Internal state)** とは、ある特定の値です。この値ごとに動き方を変えます。」

じ「内部状態ってのは上の図だと q1 だか q2 だかってやつのことか？」

守「そうです。内部状態の表現には、基本的に$q$ を使うことが多いですからね。では、制御装置の動きを見守ってみましょうか。最初の内部状態を q1 としておきます」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496507/7126437e-65ac-d653-c9e2-afe76f496144.png)

①：動作開始。今指している場所を**読む**。読んだ記号がAで、内部状態がq1のルールを探す。ルールは、「**内部状態をq2に** 変えて、指している場所にBを**書き**、右のマスに**指している場所を動かす**」ようにしろと書いてあるので、その動作をする。

②：今指している場所を**読む**。読んだ記号がBで、内部状態がq2のルールを探す。ルールは、「**内部状態はq2** のままで、指している場所にAを**書き**、右のマスに**指している場所を動かす**」ようにしろと書いてあるので、その動作をする。

②：今指している場所を**読む**。読んだ記号がAで、内部状態がq2のルールを探す。ルールは、「**内部状態をqfに** 変えて、指している場所にBを**書き**、右のマスに**指している場所を動かす**」ようにしろと書いてあるので、その動作をする。

④：**受理状態**。qf はあらかじめ決めた特別なルールで、この内部状態になるとチューリングマシンは停止する。
    
じ「んーなるほど、なんとなくわかった気がする。。。受理状態って？」

守「**チューリングマシンが停止していることを表す状態**...と理解しておくといいと思います」

じ「「...SABABS...」 という入力を与えて、「...SBBBBS...」とい状態になって停止した、というわけか」

守「そのとおりです」

守「...あと、TMが現在持っている情報(テープ、ヘッドの位置、内部状態)をまとめて **様相(Configuration)** というので覚えておいてください。」

> 内部状態は特定のただ１つの値です。テープや内部状態とかの、TMの全部の情報をまとめたものでは**ありません**。様相との混同に注意してください。

</details>

## チューリング完全であると何がうれしいのか

じ「...で、チューリングマシンってやつはなかなか面白そうな機械だったが、結局何の役に立つんだ？」

守「もう一度、図を見ながらチューリング完全というのが何かを思い出しましょう」
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496507/1b503af9-c1de-476a-0634-d74833a4c555.png" width="80%"/>

じ「次の3つが成り立てばチューリング完全ってことだったな」

1. ある**チューリングマシンが与えられた**ときに、それに**対応したゲームの状態を上手く作る**ことが出来ること
1. そのゲームで、プレイヤーが**行動を決定するためのルール**があること
1. ゲームが終わった時、その**状態を上手く解釈**すれば、元のチューリングマシンの**状態を読み取ることが出来る**こと

守「そうですね。上の図では、これらの条件を矢印に対応させました。これらが成り立つと、**チューリングマシンをマジックの上で動かしている**と言えませんか？」

じ「確かに、そんな感じがするな...。それで、チューリング完全だと何が嬉しいんだ？」

守「昔の偉い人は、**チューリングマシン完全なものの上で計算できるかどうか** を、**計算可能かどうかの基準**にしよう、と言いました。」

守「マジックがチューリング完全であるという事は、一般的に計算できるとされている**あらゆる計算が、マジックの上でできる**という事になるのです。」

じ「えーとつまり、**マジック上で、パソコンと同じ計算ができる** という事になるのか」

守「...そうなんですけど、呑み込みが早すぎないですか...？」

# 実際の変換

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496507/05322ec3-dc21-58e5-2776-5c70964812a3.png)
老害な守護者「さて、上の章では簡単に説明しましたが、実際に行われる変換や解釈は下の図のようになります。」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496507/22a8da8f-0bb0-9dcb-1187-b183a6301c29.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496507/2d0544f2-a323-b92c-f596-fba3a2e61a17.png)
頑固じいさん「うわ、思ったより長いじゃないか...」

守「ええ、すごく長くて、これの１つ１つの矢印について説明していく必要があるんです。ほぼ形式的な変換なのでこの説明の仕方だと逆に疲れるので...」

地の文で、各矢印について説明をしていきます。
(途中で解説が必要になった時、また彼らを呼びます)

本当に任意のTMが変換できるかどうかの証明は各論文に任せればいいので、ここでは実際の、特定のチューリングマシンを変換することで動かせることを示します。

**今回変換の対象にするのは、以下のチューリングマシンです。**

- ルール

| 現在の内部状態 | 読んだ記号 | 変化先の内部状態 | 書く記号 | 動く方向 |
|:---:      | :-----:| :---: | :-----: | :----:  |
|$q_1$      |  A     |   $q_1$   |   B      | 右 |
|$q_1$      |  B     |   $q_1$   |   B      | 左 |
|$q_1$      |  C     |   $q_f$   |   A      | 左 |

- 初期状態: $q_1$
- 受理状態: $q_f$
- 空白記号: $C$
- 最初のテープ: $…CCC\underline{A}CCC…$ 
- 最初のヘッド位置: ↑の下線の位置

このTMの様相は、以下のように変化していくはずです。
$(…CCC\underline{A}CCC…, q_1) \rightarrow (…CCCB\underline{C}CC…, q_1) \rightarrow (…CCC\underline{B}ACC…, q_f)$

# 以降
以降では、各記事につき一つずつシステムの構成法を示していきます。

（下に示す記事の１つを読むとき、その１つ前の記事を同時に開いて構成や様相を確認しながら読むと良いです。）

1. **全体的な解説**（この記事）
1. **[任意のTM ⇔ 2記号TM](https://qiita.com/Snowman-s/private/a2dda50be5204deb5923)** [^2TM]
1. **[2記号TM ⇔ 先書きTM](https://qiita.com/Snowman-s/private/714618196b2e8f3e80de)** [^2Tag]
1. **先書きTM ⇔ タグシステム**（まだ）[^2Tag]
1. **タグシステム ⇔ 2状態18記号のTM**（まだ）[^UTM218]
1. **2状態18記号のTM ⇔ マジック**（まだ）[^Mtg]

# ライセンス
この記事で使われている一部の画像は、Magic:the Gathring のカードイラストから切り抜いたものです。Wizards of the Coast社の認可/許諾は得ていません。

[^try]: ただし、愚直にやると入力がとてつもなく長くなるので、必要に応じて変換を分離します。
[^yukkuri]: 真面目に解説をしようとすると、長すぎてだんだん説明が上滑りしていきそうなので、対話形式でやります。
[^2TM]: SHANNON, Claude E. A universal Turing machine with two internal states. Automata studies, 1956, 34: 157-165.
[^2Tag]: COCKE, John; MINSKY, Marvin. Universality of tag systems with P= 2. Journal of the ACM (JACM), 1964, 11.1: 15-20.
[^UTM218]: ROGOZHIN, Yurii. Small universal Turing machines. Theoretical Computer Science, 1996, 168.2: 215-240.
[^Mtg]: CHURCHILL, Alex; BIDERMAN, Stella; HERRICK, Austin. Magic: The gathering is Turing complete. arXiv preprint arXiv:1904.09828, 2019.