見出し画像

MTGのチューリング完全性【要約版】

Alex Churchill、Stella Biderman、Austin Herrickの論文『Magic: The Gathering is Turing Complete』を解説します。この論文はMagic: The Gatheringがチューリング完全であることを証明しています。

チューリング完全とは、どんな計算でもできるということです。チューリング完全なものには、パソコン、スマホ、多くのプログラミング言語、Excelなどがあります。また、Mine Craftやマリオメーカーもチューリング完全であることが知られています。Mine Craftなら、レッドストーン回路を使ってあらゆる計算ができます。

翻訳に際して原著者から許可をいただいていますが、この記事は要約です。原論文も合わせてご覧ください。具体的には、論文の3章と4章の内容になります。後日、全訳版を公開する予定です。全訳版には計算機科学の面白い考察も含まれるので、ご期待ください。

おかしなところがあれば指摘していただけるとありがたいです。


追記
この記事の執筆を手伝っていただいたαrufα φluwind氏が、この記事の中心的な概念であるチューリングマシンをより分かりやすく解説した記事を執筆してくださいました。こちらも是非一緒にご覧ください。

また、論文を執筆したAlex Churchill氏本人がFUN With Algorithmsで講演した動画もご覧ください。論文を理解する大きな助けになると思います。




チューリングマシンとは

チューリングマシンとは、どんな計算でもできる架空の機械です。

チューリングマシンはテープとヘッドで構成されます。

テープは左右に無限に続いていて、マス目状に区切られています。マス目には記号を書くことができます。
ヘッドはテープの一つのマス目に設置されると、そのマス目の記号を読みとり、記号を書き換えることができます。空白のマスは空白記号が書いてあると解釈します。
ヘッドが1マス書き換えるたびに、その時のヘッドの状態に応じてコントローラーが命令通りにヘッドを左右どちらかに1マス動かします。

「ヘッドがどのように記号を書き換えるのか」「どのような時に計算を終了するか」をあらかじめ命令して、チューリングマシンに与えておきます。

以下の手順で計算を行います。

  1. チューリングマシンに命令を与え、テープに入力を書く

  2. ヘッドがテープの記号を読み取る

  3. ヘッドの状態と読み取った記号に応じて記号を書き換える

  4. ヘッドの状態と読み取った記号に応じて右か左に1マス戻る

  5. ヘッドの状態と読み取った記号に応じて状態を変える

  6. 停止状態になったら計算を終え、停止状態でなければ2に戻る

詳しくはwikipedia等をご参照ください。


MTGチューリングマシンを作る方法

以前からMTGがチューリング完全であることは知られていたようです。この論文では、MTGのカードの効果を使ってチューリングマシンをそのままの形で実装する方法(以下この記事ではMTGチューリングマシンと呼ぶ)が紹介されています。

アリスとボブがMTGをプレイするとします。(数学では伝統的に2人の登場人物をAlice、Bobと名付けます。これは、頭文字がA、Bだからです。)

MTGチューリングマシンはフィールド上で構成されています。アリスが初期状態を与えると、カードの効果が連鎖的に発動し、最後にボブを倒してフィールド上に結果を出力します。

チューリングマシンを実装するには以下のパーツを作らないといけません。

  • テープ

  • コントローラー(命令)

  • ヘッド

  • ヘッドの状態

テープ

トークンやクリーチャー1枚をテープの1マスとみなします。

各トークンのタフネスとパワーをヘッドからの距離とします。
ただし、2/2をヘッドの位置とし、3/3はその左、4/4はその左…、のようにマスの位置を定めます。マスの記号として、クリーチャータイプを使います。18個のタイプを用いてチューリングマシンを再現します。今回再現するのはRogozhin’s (2, 18) UTMという万能チューリングマシンです。このマシンは2つの状態と18個の記号だけであらゆる計算を実行できます。

今回は18個の記号として、霊基体、バジリスク、セファリッド、デーモン、エルフ、フェアリー、巨人、ハーピー、イリュージョン、巨大戦車、カヴー、リヴァイアサン、マイア、ノッグル、オーク、ペガサス、サイ、スリヴァーを使います。

例えば、緑の5/5霊基体・トークンは頭の左から3番目のマスに第1記号が書かれていることを表し、白の10/10スリヴァーは頭の右から9番目のマスに第18記号が書かれていることを表しているとします。

コントローラー(命令)

チューリングマシンの命令は「ヘッドが○○の状態のとき××の記号を読み取ったら、記号を▲▲に書き換えて、右/左に1マス動く」という指示をいくつか集めたものです。

これを再現するために、2枚のカードを使います。

腐れ肺の再生術師/Rotlung Reanimator
腐れ肺の再生術師か他のクレリック(Cleric)が死亡するたび、黒の2/2のゾンビ(Zombie)・クリーチャー・トークンを1体生成する。
ザスリッドの屍術師/Xathrid Necromancer
ザスリッドの屍術師かあなたがコントロールする他の人間(Human)クリーチャーが1体死亡するたび、黒の2/2のゾンビ(Zombie)・クリーチャー・トークンを1体タップ状態で生成する。

これらはクリーチャーが死んだときに、その状態やクリーチャータイプに応じて結果を出力することができます。

これらのカードを《人工進化》《幻色染め》で編集して、命令をプログラミングします。

・人工進化/Artificial Evolution
呪文1つかパーマネント1つを対象とする。それに書かれたクリーチャー・タイプ1つをすべて、別のクリーチャー・タイプ1つに置き換える。新たなクリーチャー・タイプは壁(Wall)にできない。(この効果は永続する。)
・幻色染め /Glamerdye
呪文1つかパーマネント1つを対象とする。それに書かれた、色を表す単語1種類をすべて別の色の単語1種類に置き換える。
回顧(あなたはこのカードを、それの他のコストの支払いに加えて土地カードを1枚捨てることで、このカードをあなたの墓地から唱えてもよい。)

《人工進化》を使って《腐れ肺の再生術師》のコピーを大量に作り、それぞれを編集します。

以下、文中で「ハック」「ハッキング」などの表現が出てきたら、そのカードは《人工進化》《幻色染め》で編集されたということです。

各命令の編集方法が論文のTable Ⅱに載っています。

ヘッド

以下の方法で新しいセルを読み込みます

  1. アリスに《蔓延》/Infest(すべてのクリーチャーは、ターン終了時まで-2/-2の修整を受ける)を唱えさせる。

  2. タフネスが2の固有トークンが死亡する。

  3. 死亡したトークンのクリーチャータイプに応じて《腐れ肺の再生術師》が発動する。

  4. 死亡したトークンに対応した新しい2/2トークンが生み出される。これによって、テープに書かれたデータは失われずに済む。

チューリングマシンは次に左か右に移動し、ヘッドの片側にある全てのトークンに+1/+1カウンターを、反対側にある全てのトークンに-1/-1カウンターを追加して、テープの順番を保つようにトークンを修正する。左右への移動は、まず《浄化の光線》/Cleansing Beamを唱え、次に《魂を吹き消すもの》/Soul Snuffersを唱えることで実装されます。

ヘッドの状態

ここまでの説明で状態を1つ持つチューリングマシンは構成できました。

2つ目の状態を実装するために、フェイズインとフェイズアウトを用います。フェイズアウトしたカードは存在しないかのように扱われるため、フェイズインしているカードの効果だけが発動します。エンチャント《不可視の外套》/Cloak of Invisibilityを用いて《腐れ肺の再生術師》にフェイズを与え、2つ目の状態の命令を実装します。




MTGチューリングマシンを動かす方法

このマシンのポイントは、アリスとボブは行動の選択肢が常に1つしかないことです。アリスとボブがそれぞれ強制された行動をとり続けることで計算が勝手に行われます。

計算の開始と実行

  • 計算開始時に必要なパーツが論文のTable Ⅰに載っています。

  • アリスのライブラリは《浄化の光線》《合同勝利》《魂を吹き消すもの》

  • ターン開始時、アリスの手札は1枚

  • ボブは《野生の喚起》をコントロール→アリスは手札を発動しないといけない

  • アリスは《太陽と月の輪》にエンチャントされている→手札は発動後ライブラリの一番下に戻る

  • アリスは土地を一つコントロールするが、《窒息》の効果で永久にタップされたままなので、《野生の喚起》の能力で唱える以外に、引いた呪文を唱えることができない

  • 両者とも《魅力的な執政官》をコントロールしているため攻撃できない。

  • ボブは《リサイクル》をコントロールしており、ドローステップは飛ばされる

  • 《蔓延》でヘッドが読み込み→《腐れ肺の再生術師》《ザスリッドの屍術師》発動

  • アリスはオーラ《錯覚の利得》をコントロールしている。

ここで《錯覚の利得》の役割について、原論文の説明を引用しておきます。

アリスは「あなたはエンチャントされているクリーチャーをコントロールする。」と書かれたオーラである《錯覚の利得》をコントロールしている。ボブの《腐れ肺の再生術師》か《ザスリッドの屍術師》のいずれかが新しいトークンを生み出すたびに《錯覚の利得》が誘発し、テープ上の最も新しいトークンのコントロールをアリスに与え、前のトークンのコントロールはボブに戻される。つまり、どの時点でも、ボブは最近書き込まれたシンボル以外のテープのすべてをコントロールし、それはアリスがコントロールすることになる。

ここから先は、ブログ著者の力不足により要約することができなかったので、原論文を引用します。

ヘッドを左右に動かす方法

新しいトークンが白の場合、チューリングマシンは左に移動する必要があります。すべての白の生物に+1/+1カウンターを置き(テープを白から遠ざける)、すべての緑の生物に-1/-1カウンターを置く(テープを緑の方に動かす)のです。これを代わりに、「すべての白のクリーチャーの上に+1/+1カウンターを2個置き、すべてのクリーチャーの上に-1/-1カウンターを置く」と言い換えます。

アリスは2ターン目に《浄化の光線》を唱え、「《浄化の光線》は対象のクリーチャーとそれと色を共有する他の各クリーチャーに2点のダメージを与える」と読み取ります。ボブは《特権階級》をコントロールしているので、ボブのどのクリーチャーも、アリスが唱える呪文の対象になることはできません。アリスはテープ・トークン以外のクリーチャーをいくつかコントロールしていますが、それらはすべて、ハッキングされた《オリヴィア・ヴォルダーレン》によってクリーチャー・タイプ組立作業員を与えられており、アリスは組立作業員を名乗る《頑強な決意》をコントロールしています。これにより、《浄化の光線》の合法的な対象は、アリスが《錯覚の利得》のおかげでコントロールしているテープ・トークン1体だけになります。

このトークンは、左に移動している場合は白、右に移動している場合は緑であることに注意すると、《浄化の光線》は、私たちが左に動いているならば各白のクリーチャーに、右に動いているならば各緑のクリーチャーに2ダメージを与えようとしています。アリスとボブはそれぞれ《活力》のコピーを1枚ずつコントロールしています 。(活力-あなたがコントロールする他のクリーチャーにダメージが与えられるなら、そのすべてのダメージを軽減する。これにより軽減されたダメージ1点につき、そのクリーチャーの上に+1/+1カウンターを1個置く。活力がいずれかの領域から墓地に置かれたとき、これをオーナーのライブラリーに加えて切り直す。)つまり《浄化の光線》は、各白のクリーチャーか各緑のクリーチャーの上に+1/+1カウンターを2個置くことになります。

サイクルの最後のターンに、アリスは「《魂を吹き消すもの》が戦場に出たとき、各クリーチャーの上に-1/-1カウンターを置く」と書かれた3/3の黒のクリーチャー、《魂を吹き消すもの》を唱えた。黒のクリーチャーは-1/-1を得る」と書かれた《夜の戦慄》が2枚ずつハッキングされており、《魂を吹き消すもの》の誘発型能力は自身を殺すと同時に、他の全てのクリーチャーを縮小させることを意味しています。テープを構成するクリーチャーは、1個の-1/-1カウンターを受けるか、2個の+1/+1カウンターと-1/-1カウンターを受けるようになりました。

基盤になるクリーチャー(例えば《腐れ肺の再生術師》)が計算ステップごとに次々と-1/-1カウンターで殺されないように、ゲームカラーの緑、白、赤、黒も持つように、《虹の色》「対象のパーマネントは、あなたが選んだ色または色のいずれかになる。(この効果は無期限に続く) 」を使います。したがって、各サイクル浄化の光線はそれらに+1/+1カウンターを2個置き、-1/-1カウンターがそれらを縮めるよりも速くそれらを成長させることになります。これは活力自身を除く各クリーチャーに適用され、各プレイヤーの活力を保つように、「すべてのインカ―ネイションクリーチャーは『このクリーチャーにダメージが与えられるたび、その上に+1/+1カウンターを置く』」とハックされた《菌類スリヴァー》が存在します。

ヘッドの状態を変える

状態を変更する指示は、ボブの《腐れ肺の再生術師》7枚を《ザスリッドの屍術師》に置き換えることで処理されます。この2枚のカードは非常によく似たテキストを持っていますが、《ザスリッドの屍術師》はボブのクリーチャーが死ぬことだけに気づき(テープのアクティブセルは常にボブがコントロールしているので、これは問題ではありません)、《ザスリッドの屍術師》はそのトークンをタップ状態で作成します。

例えば、q1プログラム(状態A)がシンボル1を見たとき、シンボル18を書き、左に移動し、状態Aに留まります。これは、ボブのコントロール下にあるフェイズ中の《腐れ肺の再生術師》が "《腐れ肺の再生術師》か他の霊基体が死ぬたび、2/2の白スリヴァーのクリーチャー・トークンを作成" という表現になっています。

対照的に、q1プログラムはシンボル11を見ると、シンボル12を書き、左に移動して状態Bに変わります。これは、ボブのコントロール下でフェイズ中の《ザスリッドの屍術師》には "《ザスリッドの屍術師》かあなたがコントロールする他のカヴー・クリーチャーが死ぬたび、タップ状態の2/2白のリヴァイアサン・クリーチャー・トークンを1体生成する "と書いてあります。 どちらの場合も、このトークンは1ターン目にボブのコントロール下で生成されますが、アリスの《錯覚の利得》が誘発し、彼女にそのコントロールが付与されます。

タップ状態の場合、2ターン目の開始時に、それはアンタップすることになります。これにより、アリスの《催眠の宝珠》のトリガーは、ボブの《野生の喚起》のトリガーと同時にスタックに置かれます(アンタップ・ステップの間はどのプレイヤーも優先権を持たないため)。アリスはアクティブ・プレイヤーなので、アリスのトリガーが先にスタックに置かれ、次にボブのトリガーが置かれます。したがって、《野生の喚起》のトリガーが解決され、アリスが《浄化の光線》を唱えて解決することを強制し、その後《催眠の宝珠》のトリガーが解決されることになります。

催眠の宝珠》のトリガーが解決すると、アリスのライブラリーの一番上から《合同勝利》をアリスの墓地に置こうとします。しかし、《太陽と月の輪》はこのイベントを修正し、《合同勝利》をアリスのライブラリーの一番下、ちょうど《浄化の光線》の下に置きます。これらのトリガーがすべて解決されると、アリスは自分のドロー・ステップに進みます。状態が変化していない場合、彼女はこの時点で《合同勝利》を引きますが、状態が変化している場合、そのカードはスキップされ、彼女は2ターン目のドロー・ステップで《魂を吹き消すもの》を引くために動き、3ターン目にそれをキャストすることになります。

この結果、状態が変化しているときの計算ステップは各プレイヤー3ターンの長さになりますが、状態が変化していないときの計算ステップは各プレイヤー4ターンの長さになります。通常の4ターン制では、ボブのフェイズする《腐れ肺の再生術師》は2回フェイズインして2回フェイズアウトし、1サイクルの1ターン目には前のサイクルの1ターン目と同じ状態になっています。しかし、状態を変えるときは、次のサイクルの1ターン目までに位相を変え、チューリングマシンの状態を切り替えることになります。

テープを伸ばす

チューリングマシンのテープは本来無限の長さを持ちますが、MTGであらかじめ無限のクリーチャーを準備するのは不可能です。そこで、必要に応じてテープをつけ足す機構を用意します。

チューリングテープは、処理を開始する前に任意の長さに初期化することができる。言い換えれば、初期化されていないテープ空間には、記号3((2, 18) UTMの空白記号)が含まれており、クリーチャータイプセファリッドで表されていると仮定することである。これは、現在初期化されているテープの両端に2つの特別なトークン、緑の《ルアゴイフ》と白の《ラット》を表示させることで達成されます。仮に、左側の初期化されたテープをすべて使い切ったとします。つまり、1ターン目に《蔓延》を唱えると、通常のテープの1種類ではなく、《ルアゴイフ》が殺されることになります。これは通常の《腐れ肺の再生術師》《ザスリッドの屍術師》のいずれかを直接誘発させることはないです。代わりに、ボブは《腐れ肺の再生術師》をハックして "《腐れ肺の再生術師》または他の《ルアゴイフ》が死亡するたび、2/2の緑の《ルアゴイフ》・クリーチャー・トークンを1体作る "とし、アリスは《腐れ肺の再生術師》をハックして "《腐れ肺の再生術師》または他の《ルアゴイフ》が死亡するたび、2/2の黒のセファリド・クリーチャー・トークンを1体作る。" とする。ボブのトリガーが先に解決され、次にアリスのトリガーが解決される。

まず、ボブの《腐れ肺の再生術師》のトリガーが、現在の頭のすぐ左に新しい《ルアゴイフ》を生み出します(アリスの《錯覚の利得》が誘発し、この新しい《ルアゴイフ》のコントロールを得るが、それはすぐに変わる)。《ルアゴイフ》に設定された《共同の功績》(「選ばれたタイプのクリーチャーは+1/+1を得る」)が1枚あるので、このトークンは3/3として到着します。

次に、アリスのリアニメイトのトリガーは、アリスのコントロール下で2/2の黒のセファリッドを生み出します。先ほどと同じ《夜の戦慄》2枚は黒のクリーチャー全てに-2/-2を与えるので、黒のセファリッドは0/0として到着し、直ちに死亡します。

このセファリッドの死は、シンボル3を含むテープ・セルが読まれたのと同じように、ボブの通常のフェイズする霊基体の1つを誘発します:新しい2/2トークンが作られ、その新しいトークンに幻影の利得が移動します。テープの終端マーカーである緑の《ルアゴイフ》トークンは、1つ左に移動して再現されました。

テープの右端を表す白ネズミの状況も全く同じです。ボブは「《腐れ肺の再生術師》か他のラットが死ぬたび、2/2の白ネズミ・クリーチャー・トークンを作る」とハックされた《腐れ肺の再生術師》を持ち、アリスは「《腐れ肺の再生術師》か他のネズミが死ぬたび、2/2の黒セファリド・クリーチャー・トークンを作る」とハックされた《腐れ肺の再生術師》を持ち、さらに《共同の功績》がラットに設定されています。

停止

我々は、停止をアリスをゲームに勝たせるものとして符号化することを選択します。チューリング・マシンが状態を変化させないとき、アリスは3ターン目に《合同勝利》を唱えます。これには「あなたが各基本土地タイプの土地と各色のクリーチャーを1体ずつコントロールしていればゲームに勝利する」と書かれています。彼女は青のクリーチャーをコントロールしていないので、これは通常何も達成できません(《虹の色》は他のすべての色のクリーチャーを与えるために使われている)。しかし、彼女は土地を1つコントロールしており、また《虹色の前兆》もコントロールしています。これは"あなたがコントロールする土地は、他のタイプに加えてすべての基本土地タイプである。"と書かれています。《窒息》がプレイされており、彼女がこの土地のマナ能力を起動するのを妨げていることに注意してください。

停止シンボルが読まれたとき(状態Aのシンボル17)、ボブの適切なフェイズ中の《腐れ肺の再生術師》は "《腐れ肺の再生術師》か他のサイが死亡するたび、2/2の青のアサシン・クリーチャー・トークンを1体生成する "と読み取れます。アリスの《錯覚の利得》は1ターン目に通常の方法でこのアサシン・トークンのコントロールを得ます。これで彼女は3ターン目に唱えたときに《合同勝利》の条件を満たし、ゲームに勝利します。

暗号化された機械が実際に停止しなかった場合、ゲームは解消できない決定問題的無限ループに入り、ルール104.4b [16]で引き分けと指定されます。

まとめ

  • MTGはチューリング完全である

  • MTGでのチューリング完全な計算モデルの一例としてMTGチューリングマシンを構成できる

  • MTGチューリングマシンはチューリングマシンとほぼ同じ構造を持つ

  • 計算が始まるとプレイヤーは常に選択肢が一つしかない状態に置かれ、それを実行し続けると、最後に一方のプレイヤーが勝利して、フィールド上に計算結果が出力される。

また、任意のフィールドの勝敗を判定するアルゴリズムは存在しないことなどが説明されています。

余談 人力計算モデル

HTMLはプログラミング言語か?というのはいろんな所で聞く話題です。この問いに対してはいろんな答えがありますが、よく聞くのは、「HTML+CSSはチューリング完全だからプログラミング言語」という答えです。

ただ、私はこの答えが腑に落ちない点があります。それは、ユーザーがボタンを何度も押さないと計算が実行されない点です。計算の1ステップごとにユーザーが干渉しないと計算が進まみません。ユーザーはあくまで「動力源」で計算はしていないので、HTML+CSSが計算をしたことになります。しかし、勝手に計算をしてくれるjavascriptとこれを同列に「プログラミング言語」だと語るのはモヤモヤするわけです。

私はこのような計算モデルを勝手に「人力チューリング完全モデル」と呼んでいます。この観点に立てば、HTML+CSSは"人力"チューリング完全言語です。今回紹介したMTGチューリングマシンもアリスが行動を起こさないと計算が進まないので人力モデルですね。

人力モデルは計算のステップ数だけ人間が作業をしないと計算が進みませんので、実用的ではありません。おそらくですが、MTGチューリングマシンで足し算をするだけでも桁数に比例して大量の処理が必要ですので、実用的ではないでしょう。人力ではないチューリングマシンがMTGで実現されれば、Excelの代わりにMTGをプレイする日が来るかもしれません。


追記 停止性問題とは? 09/27/2022

Noteやtwitterでこの記事を引用していただいているようです。力をいれて書いた記事なので、うれしい限りでございます。この記事のリンクは「チューリング完全だから盤面の判定問題が停止性問題だ」という文脈で紹介されることが多いようですので、停止性問題について簡単に書き加えておきます。詳しい説明は全訳版をお待ちください。

結論から言うと、「MTGのある盤面がどちらのプレイヤーの必勝局面かを判定するアルゴリズムはない」「MTGはとても複雑なゲーム」というお話です。

停止性問題

チューリングマシンは停止して答えを出力します。つまり、チューリングマシンが停止しなかったら、答えを出力できないのです。今回の記事でもMTGチューリングマシンを停止させるための機構が組み込まれていましたよね。チューリングマシンというのは停止してこそ意味があります。

ただ、停止しないチューリングマシンも作れます。無限ループが簡単な例ですね。同じ操作を繰り返すばかりで出力が得られないのであれば意味がありません。そこで、「あるチューリングマシンが停止するのか判断できるチューリングマシン」を作ることができればうれしいわけです。これを停止性問題といいます。

残念ながら停止性問題はチューリングマシンでは解けないことが証明されています。どう頑張っても原理的に不可能です。つまり、コンピュータのアルゴリズムがちゃんと動作するかをコンピュータで確認するのは無理ということです。

さて、今回の記事ではMTGがチューリング完全であることを証明しました。つまり、あらゆるチューリングマシンはMTGの盤面に落とし込むことができます。チューリングマシンの停止性問題が解けないということは、その盤面がどちらかのプレイヤーにとっての必勝局面なのかを判定するチューリングマシン=アルゴリズムは存在ということなのです。

ちなみに、停止性問題がチューリングマシンで解けるなら数学者はいらなくなります。ある定理の反例を探索して、反例が見つかり次第停止してそれを出力するチューリングマシンを作りましょう。反例が無ければ停止しないので、このマシンの停止性問題を解けば定理の真偽が分かりますね。もちろん停止性問題はチューリングマシンでは解けないので、コンピュータが完全に数学者に代わるのはまだまだ先になりそうです。やはり数学は一筋縄にはいかないのですね。

MTGの複雑さ

MTGのある盤面が必勝局面なのかは判定できないことが分かりました。つまり、オセロのように完全読み(あり得る選択肢を全て列挙して最善手を選ぶ方法)はできないということです。これは「選択肢の多いので探索しきれない」という技術的な問題ではなく、停止性問題というもっと原理的なものであることに注意してください。

ゲームがチューリング完全というのは、ルールが厳密に定められたターン制ゲームの中では最も複雑で自由度が高いということです。「チューリング完全なゲームは人間には楽しめないほど難解になるのではないか?」という予想があったのですが、その反例がなんとMTGだったのです。

Acknowledgement

最後になりましたが、論文を執筆し和訳を許可してくださったAlex Churchill氏、論文の共著者のStella Biderman氏、Austin Herrick氏、論文の和訳を手伝ってくださり、たくさんの意見をくださったαrufα φluwind氏(twitter:@F_arufa)、この記事の公表に協力してくれた友人に感謝申し上げます。


この記事が参加している募集

数学がすき

この記事が気に入ったらサポートをしてみませんか?