ハラリーの「動物」のゲーム
まず、作る対象の「形」を定義します。
定義1 ポリオミノ [5 , §1]
方眼のマスを有限個集めた図形で、辺を共有するマスをたどって全体がつながっているものをポリオミノ という。平行移動・回転・裏返しで重なるポリオミノは同じ形とみなす。n n n 個のマスからなるものを n n n マスのポリオミノと呼ぶ(6マスならヘキソミノ )。
ポリオミノは「動物」(animal)とも呼ばれます[3 , §2] 。マスの数ごとに数えると、形の数は次のとおりです(この記事の図のプログラムで数え直しています)。
マスに座標をつけます。左下の角が ( x , y ) (x,y) ( x , y ) にあるマスを、整数の組 ( x , y ) ∈ Z 2 (x,y)\in\mathbb{Z}^2 ( x , y ) ∈ Z 2 で表します。Snaky は次の6マスです[2 , §1, p.1] 。
S = { ( 0 , 0 ) , ( 1 , 0 ) , ( 2 , 0 ) ( 3 , 0 ) , ( 3 , 1 ) , ( 4 , 1 ) } \begin{aligned} S=\{&(0,0),(1,0),(2,0)\\ &(3,0),(3,1),(4,1)\}\end{aligned} S = { ( 0 , 0 ) , ( 1 , 0 ) , ( 2 , 0 ) ( 3 , 0 ) , ( 3 , 1 ) , ( 4 , 1 )}
4マスの横棒の右端のマスの上に1マス、さらにその右に1マスを付けた形です。回転と裏返しを合わせた8通りの写し方は、行列で書くと各行・各列に ± 1 \pm1 ± 1 がちょうど1つある 2 × 2 2\times2 2 × 2 行列 R R R です。Snaky の置き方は t + R ( S ) t+R(S) t + R ( S ) (t ∈ Z 2 t\in\mathbb{Z}^2 t ∈ Z 2 )の形のものすべてです。
図1 具体例 Snaky の6マスと座標です。下の列は、回転と裏返しで得られる8通りの向きです。Snaky には左右や上下の対称性がないので、8通りはすべて違う形に見えます。Maker はこのどれを作っても勝ちです。
次に、ゲームの決まりを定義します。論文が扱うのは、片方だけが形を作ろうとする「弱い」版です。
定義2 Snaky の達成ゲーム [2 , §1, p.1]
盤は無限に広い方眼 Z 2 \mathbb{Z}^2 Z 2 で、最初はどのマスも空いている。Maker が先手で、Maker と Breaker が交互に、まだ誰も取っていないマスを1つずつ取る。取ったマスはずっとその人のものである。
Maker が、ある置き方 t + R ( S ) t+R(S) t + R ( S ) の6マスをすべて持った時点で Maker の勝ちとする。Maker はほかのマスを余分に持っていてもよい。Breaker は自分で形を作る必要はなく、Maker の完成を邪魔するだけである。
Breaker も形を作れば勝ちになる「強い」版(三目並べと同じ型)もあります。論文は強い版については何も主張していません[2 , §1, p.1] 。
一般のポリオミノでも同じゲームが考えられ、次のように呼び分けます。
定義3 勝ちの形・負けの形 [3 , §2]
ポリオミノ P P P の達成ゲーム(定義2 の S S S を P P P に替えたもの)で、Breaker がどう打っても有限の手数で P P P を完成させる Maker の戦略があるとき、P P P を勝ちの形 (winner)という。そうでないとき負けの形 (loser)という。
例4 2マスの形は勝ち
Maker が1手目に ( 0 , 0 ) (0,0) ( 0 , 0 ) を取る。その隣の4マス ( ± 1 , 0 ) , ( 0 , ± 1 ) (\pm1,0),(0,\pm1) ( ± 1 , 0 ) , ( 0 , ± 1 ) のうち、Breaker が1手で取れるのは1つだけである。Maker は残りの隣のマスを取れば、2手目で2マスの形が完成する。
この例のように、完成できる場所を同時に2か所以上作れば、Breaker は1手で全部を消せません。この「二重の脅し」は、あとで見る論文の戦略でもくり返し使われます。
このゲームは、1979年4月の Scientific American 誌のガードナーのコラム「Mathematical Games」で紹介されました[6 ,3 ] 。
負けの形とペアリング戦略
形が負けだと示すには、Breaker の邪魔の仕方を1つ見せれば足ります。いちばんよく使われるのが、マスを2つずつ組にしておく方法です。
定義6 ペアリング戦略
盤のマスの一部を、互いに重ならない2マスの組(ペア )に分けておく。ペアリング戦略 とは、Maker がペアの片方を取ったら Breaker がもう片方を取り、それ以外のときは Breaker が空いているマスを好きに取る、という Breaker の戦略である。
命題7 ペアリング戦略で負けを示す
ポリオミノ P P P のどの置き方も、あるペアの2マスを両方含むとする。このとき P P P は負けの形である。
証明 開く 閉じる すべて開く すべて閉じる
Breaker がペアリング戦略で打つと、Maker がペアの2マスを両方持つことはない、と示す。詳しく 閉じる
Maker があるペア { a , b } \{a,b\} { a , b } の a a a を取ったとする。b b b が空いていれば Breaker がすぐ b b b を取る。b b b が空いていなければ、b b b は Breaker のものである。
b b b が Maker のものになることはない。もしそうなら、Maker が b b b を取った直後に Breaker が a a a を取っている(または a a a はすでに Breaker のものだった)はずで、Maker は a a a を取れないからである。
仮定から、
P P P の
どの置き方もあるペアを丸ごと含むので、Maker はどの置き方も完成できない。 どんな
Maker の戦略もこの Breaker に対して勝てないので、P P P は負けの形である。
例8 2 × 2 2\times2 2 × 2 の正方形は負け
y y y が偶数の行では { ( 2 i , y ) , ( 2 i + 1 , y ) } \{(2i,y),(2i+1,y)\} {( 2 i , y ) , ( 2 i + 1 , y )} 、奇数の行では { ( 2 i + 1 , y ) , ( 2 i + 2 , y ) } \{(2i+1,y),(2i+2,y)\} {( 2 i + 1 , y ) , ( 2 i + 2 , y )} をペアにする(i ∈ Z i\in\mathbb{Z} i ∈ Z )。れんがを積んだような並びである。
左下が ( x , y ) (x,y) ( x , y ) の正方形は行 y y y と行 y + 1 y+1 y + 1 にまたがる。2つの行でペアの始まる列の偶奇は逆なので、どちらかの行には x x x 列目から始まるペアがある。そのペアは正方形に丸ごと入るので、命題7 から正方形は負けの形である。
最初から
あなたが Maker です。マスを押すと、Breaker が点線のペアの相手を取ります。いま Maker のマスは 0 個です。
図3 具体例 例8 のペアを横10マス・縦6マスの盤に描いた図です。橙が Maker、濃い灰色が Breaker です。行の端のペアにならないマスを取ると、Breaker はほかの空いたマスを取ります。この盤の上のどの 2 × 2 2\times2 2 × 2 の正方形もペアを丸ごと含むことは、図のプログラムで確かめています。何手打っても、Maker は正方形を作れません。
6マスの形で見ると、35個のうち8個が 2 × 2 2\times2 2 × 2 の正方形を含み、命題5 と例8 からすぐに負けの形だと分かります。それ以外の形にも、それぞれ専用のペアの組み方があります。2007年の論文の序論では、勝ちと分かっている11個と Snaky を除くすべてのポリオミノに、Breaker のペアリング戦略があります[7 , §1, p.2] 。7マス以上の形もすべてこちらに入ります。
図4 具体例 6マスのポリオミノ35個です。左上の橙が Snaky、濃い灰色の8個は 2 × 2 2\times2 2 × 2 の正方形を含む形、薄い灰色はそれ以外です。Snaky 以外の34個はすべて負けの形と分かっていました[7 , §1, p.2] 。
Snaky には、このペアリング戦略が存在しません。ハーボルトとゼーマンが1997年に計算機の探索で示し[8 , §3.2] 、のちに計算機を使わない証明も与えられました[8 , Theorem 10] 。負けを示すいちばんの道具が使えないわけです。Snaky は勝ちの形だろうと考えられていましたが、勝ちを示す Maker の戦略も見つかっていませんでした[5 , §1] 。
今回の定理
定理9 OpenAI, 2026 [2 , Theorem 1, p.1]
定義2 のゲームで、Maker の戦略が1つあって、Breaker がどう打っても、Maker は自分の21手以内に Snaky のある置き方を完成させる。
定理を読むときに気をつけたい点をまとめます。どれも論文に書かれています[2 , §1, p.1] 。
数えるのは Maker が実際に打つ手。 あとで出てくる「入れ替えの手」も1手に数えます。Breaker の手と合わせると、全体の41手目までに勝つことになります。
21手が最小とは言っていない。 もっと少ない手数で勝てるかどうかは、この論文は主張していません。
弱い版のゲームについての結果。 Breaker も Snaky を作れば勝ちになる強い版については何も言っていません。
論文は、同じ戦略が有限の盤でも使えることも示しています[2 , Corollary 6, p.8] 。17 × 17 17\times17 17 × 17 の盤 { 0 , … , 16 } 2 \{0,\dots,16\}^2 { 0 , … , 16 } 2 でも、Maker は21手以内に勝てます。8 × 8 8\times8 8 × 8 の盤では負けと分かっています。そのあいだの大きさの盤でどうなるかは、この論文では扱っていません。
論文には、21手のほかに25手と35手の戦略も載っています[2 , §1, p.2] 。この記事では21手の戦略だけを読みます。
条件つきの勝ちを組み合わせる
証明の要は、「この条件がそろえば、あと何手で勝てる」という主張を、小さいものから順に組み合わせていく規則です。まず、その主張を定義します。以下、ある時点で Maker が持つマスの集合を M M M 、Breaker が持つマスの集合を B B B と書きます。
定義10 有効な条件 [2 , Definition 2, p.3]
A ⊆ T ⊂ Z 2 A\subseteq T\subset\mathbb{Z}^2 A ⊆ T ⊂ Z 2 を有限集合、h ≥ 1 h\ge1 h ≥ 1 を整数とする。三つ組 ( A , T , h ) (A,T,h) ( A , T , h ) が有効な条件 であるとは、次が成り立つことをいう。
Maker の手番で A ⊆ M A\subseteq M A ⊆ M かつ B ∩ T = ∅ B\cap T=\varnothing B ∩ T = ∅ なら、Maker はすでに Snaky を完成させているか、あと h h h 手以内に完成させる戦略をもつ。
A A A を必要な集合 、T T T を範囲 、h h h を高さ と呼ぶ。
言葉で言うと、「A A A のマスを Maker が持っていて、範囲 T T T に Breaker のマスが1つもなければ、あと h h h 手で勝てる」ということです。範囲の外のマスは、誰が持っていてもかまいません。Maker が余分なマスを持っていてもかまいません。
有効な条件は、回転・裏返し・平行移動しても有効です。F ( x ) = R x + t F(x)=Rx+t F ( x ) = R x + t で A , T A,T A , T を F ( A ) , F ( T ) F(A),F(T) F ( A ) , F ( T ) に替えても、高さは同じです[2 , §2, p.3] 。
補題11 6枚の基本のカード [2 , Lemma 4, p.4]
Snaky のマスを s 0 = ( 0 , 0 ) , … , s 5 = ( 4 , 1 ) s_0=(0,0),\dots,s_5=(4,1) s 0 = ( 0 , 0 ) , … , s 5 = ( 4 , 1 ) と並べる。各 j j j について ( S ∖ { s j } , S , 1 ) (S\setminus\{s_j\},\ S,\ 1) ( S ∖ { s j } , S , 1 ) は有効な条件である。
証明 開く 閉じる
Maker が
s j s_j s j を
持っていれば、S S S 全体を持っていて、すでに完成している。 そうでなければ、
S S S に
Breaker のマスはないので s j s_j s j は空いている。Maker がそれを取れば1手で完成する。
次が証明の中心の規則です。いくつかの有効な条件を「子」として、マスを1つ取る手でまとめます。
補題12 組み合わせの規則 [2 , Lemma 3, p.3]
( A i , T i , h i ) (A_i,T_i,h_i) ( A i , T i , h i ) (1 ≤ i ≤ r 1\le i\le r 1 ≤ i ≤ r )を有効な条件、p ∈ Z 2 p\in\mathbb{Z}^2 p ∈ Z 2 をマスとする。
T = { p } ∪ ⋃ i = 1 r T i A = ( ⋃ i = 1 r A i ∪ ⋂ i = 1 r T i ) ∖ { p } h = 1 + max i h i T=\{p\}\cup\bigcup_{i=1}^{r}T_i\qquad A=\Bigl(\bigcup_{i=1}^{r}A_i\ \cup\ \bigcap_{i=1}^{r}T_i\Bigr)\setminus\{p\}\qquad h=1+\max_i h_i T = { p } ∪ i = 1 ⋃ r T i A = ( i = 1 ⋃ r A i ∪ i = 1 ⋂ r T i ) ∖ { p } h = 1 + i max h i T = { p } ∪ ⋃ i = 1 r T i A = ( ⋃ i = 1 r A i ∪ ⋂ i = 1 r T i ) ∖ { p } h = 1 + max i h i \begin{gathered}T=\{p\}\cup\bigcup_{i=1}^{r}T_i\\A=\Bigl(\bigcup_{i=1}^{r}A_i\ \cup\ \bigcap_{i=1}^{r}T_i\Bigr)\setminus\{p\}\\h=1+\max_i h_i\end{gathered} T = { p } ∪ i = 1 ⋃ r T i A = ( i = 1 ⋃ r A i ∪ i = 1 ⋂ r T i ) ∖ { p } h = 1 + i max h i T = { p } ∪ ⋃ i = 1 r T i A = ( ⋃ i = 1 r A i ∪ ⋂ i = 1 r T i ) ∖ { p } h = 1 + max i h i \begin{aligned}T &= \{p\}\cup\bigcup_{i=1}^{r}T_i\\[4pt]A &= \Bigl(\bigcup_{i=1}^{r}A_i\ \cup\ \bigcap_{i=1}^{r}T_i\Bigr)\setminus\{p\}\\[4pt]h &= 1+\max_i h_i\end{aligned} T A h = { p } ∪ i = 1 ⋃ r T i = ( i = 1 ⋃ r A i ∪ i = 1 ⋂ r T i ) ∖ { p } = 1 + i max h i
とおくと、( A , T , h ) (A,T,h) ( A , T , h ) は有効な条件である。p p p をこの条件のピボット と呼ぶ。
証明 開く 閉じる すべて開く すべて閉じる
A i ⊆ T i A_i\subseteq T_i A i ⊆ T i なので
A ⊆ T A\subseteq T A ⊆ T である。
Maker の手番で A ⊆ M A\subseteq M A ⊆ M 、B ∩ T = ∅ B\cap T=\varnothing B ∩ T = ∅ で、まだ完成していないとする。 Maker はピボット p p p を取る。p p p がすでに Maker のものなら、代わりに空いている好きなマスを取る(入れ替えの手 )。詳しく 閉じる
p ∈ T p\in T p ∈ T なので、p p p は Breaker のものではない。盤は無限で M ∪ B M\cup B M ∪ B は有限なので、空いたマスは必ずある。入れ替えの手も1手に数える。
この手のあと、Maker のマスの集合 M ′ M' M ′ は ⋃ i A i \bigcup_iA_i ⋃ i A i と ⋂ i T i \bigcap_iT_i ⋂ i T i を含む。詳しく 閉じる
A ∪ { p } ⊆ M ′ A\cup\{p\}\subseteq M' A ∪ { p } ⊆ M ′ で、A ∪ { p } A\cup\{p\} A ∪ { p } は ⋃ i A i ∪ ⋂ i T i \bigcup_iA_i\cup\bigcap_iT_i ⋃ i A i ∪ ⋂ i T i を含むからである。
ここで
完成していれば終わる。そうでなければ Breaker がマス b b b を取る。b b b は M ′ M' M ′ に入らないので ⋂ i T i \bigcap_iT_i ⋂ i T i にも入らず、b ∉ T i b\notin T_i b ∈ / T i となる i i i がある。 その
i i i で
子の条件が成り立つ。A i ⊆ M ′ A_i\subseteq M' A i ⊆ M ′ であり、それまでの Breaker のマスは T ⊇ T i T\supseteq T_i T ⊇ T i の外にあり、新しい b b b も T i T_i T i の外にある。 子の
条件から、あと h i h_i h i 手以内に勝てる。すでに使った1手と合わせて 1 + h i ≤ h 1+h_i\le h 1 + h i ≤ h 手以内である。
ポイントは、範囲の共通部分 ⋂ i T i \bigcap_iT_i ⋂ i T i を Maker が持っていることです。Breaker の1手は共通部分に入れないので、どこに打っても、少なくとも1つの子の範囲を外れます。Breaker がずっと遠くに打った場合も、すべての子が生き残るので、場合分けは要りません。
論文の最初の2枚の「カード」で、この規則を確かめます[2 , §3.2, p.5] 。
例13 カード6:縦5マスからの二重の脅し
基本のカード j = 4 j=4 j = 4 と j = 5 j=5 j = 5 を、それぞれ x x x と y y y を入れ替えて置く。2つ目はさらに ( 0 , 1 ) (0,1) ( 0 , 1 ) だけずらす。ピボットを p = ( 1 , 4 ) p=(1,4) p = ( 1 , 4 ) として組み合わせると、次の条件になる。
A 6 = { ( 0 , y ) : 0 ≤ y ≤ 4 } T 6 = A 6 ∪ { ( 1 , 3 ) , ( 1 , 4 ) , ( 1 , 5 ) } h 6 = 2 A_6=\{(0,y):0\le y\le4\}\qquad T_6=A_6\cup\{(1,3),(1,4),(1,5)\}\qquad h_6=2 A 6 = {( 0 , y ) : 0 ≤ y ≤ 4 } T 6 = A 6 ∪ {( 1 , 3 ) , ( 1 , 4 ) , ( 1 , 5 )} h 6 = 2 A 6 = { ( 0 , y ) : 0 ≤ y ≤ 4 } T 6 = A 6 ∪ { ( 1 , 3 ) , ( 1 , 4 ) , ( 1 , 5 ) } h 6 = 2 \begin{gathered}A_6=\{(0,y):0\le y\le4\}\\T_6=A_6\cup\{(1,3),(1,4),(1,5)\}\\h_6=2\end{gathered} A 6 = {( 0 , y ) : 0 ≤ y ≤ 4 } T 6 = A 6 ∪ {( 1 , 3 ) , ( 1 , 4 ) , ( 1 , 5 )} h 6 = 2 A 6 = { ( 0 , y ) : 0 ≤ y ≤ 4 } T 6 = A 6 ∪ { ( 1 , 3 ) , ( 1 , 4 ) , ( 1 , 5 ) } h 6 = 2 \begin{aligned}A_6 &= \{(0,y):0\le y\le4\}\\[4pt]T_6 &= A_6\cup\{(1,3),(1,4),(1,5)\}\\[4pt]h_6 &= 2\end{aligned} A 6 T 6 h 6 = {( 0 , y ) : 0 ≤ y ≤ 4 } = A 6 ∪ {( 1 , 3 ) , ( 1 , 4 ) , ( 1 , 5 )} = 2
縦に5マス持っていれば、( 1 , 4 ) (1,4) ( 1 , 4 ) を取ると、( 1 , 3 ) (1,3) ( 1 , 3 ) と ( 1 , 5 ) (1,5) ( 1 , 5 ) のどちらを取っても Snaky が完成する。Breaker は片方しか消せない。
1つ目の子は { ( 0 , 0 ) , … , ( 0 , 3 ) , ( 1 , 3 ) , ( 1 , 4 ) } \{(0,0),\dots,(0,3),(1,3),(1,4)\} {( 0 , 0 ) , … , ( 0 , 3 ) , ( 1 , 3 ) , ( 1 , 4 )} という Snaky の置き方で、欠けているのが ( 1 , 3 ) (1,3) ( 1 , 3 ) です。2つ目の子は { ( 0 , 1 ) , … , ( 0 , 4 ) , ( 1 , 4 ) , ( 1 , 5 ) } \{(0,1),\dots,(0,4),(1,4),(1,5)\} {( 0 , 1 ) , … , ( 0 , 4 ) , ( 1 , 4 ) , ( 1 , 5 )} で、欠けているのが ( 1 , 5 ) (1,5) ( 1 , 5 ) です。範囲の共通部分は { ( 0 , 1 ) , ( 0 , 2 ) , ( 0 , 3 ) , ( 1 , 4 ) } \{(0,1),(0,2),(0,3),(1,4)\} {( 0 , 1 ) , ( 0 , 2 ) , ( 0 , 3 ) , ( 1 , 4 )} で、ピボット ( 1 , 4 ) (1,4) ( 1 , 4 ) を除くと A 6 A_6 A 6 に含まれます。
例14 カード7:カード6を上下から使う
カード6を ( 0 , 1 ) (0,1) ( 0 , 1 ) だけ上にずらしたものと、上下を裏返して ( 0 , 5 ) (0,5) ( 0 , 5 ) だけずらしたものを、ピボット p = ( 0 , 5 ) p=(0,5) p = ( 0 , 5 ) で組み合わせる。
A 7 = { ( 0 , y ) : 1 ≤ y ≤ 4 } T 7 = { ( 0 , y ) : 1 ≤ y ≤ 5 } ∪ { ( 1 , y ) : y ∈ { 0 , 1 , 2 , 4 , 5 , 6 } } h 7 = 3 \begin{aligned} &A_7=\{(0,y):1\le y\le4\}\\[4pt] &T_7=\{(0,y):1\le y\le5\}\cup{}\\ &\quad\{(1,y):y\in\{0,1,2,4,5,6\}\}\\[4pt] &h_7=3\end{aligned} A 7 = {( 0 , y ) : 1 ≤ y ≤ 4 } T 7 = {( 0 , y ) : 1 ≤ y ≤ 5 } ∪ {( 1 , y ) : y ∈ { 0 , 1 , 2 , 4 , 5 , 6 }} h 7 = 3
2つの子の範囲は、どちらも縦の列 { ( 0 , 1 ) , … , ( 0 , 5 ) } \{(0,1),\dots,(0,5)\} {( 0 , 1 ) , … , ( 0 , 5 )} を含みます。列の右側の3マスは、1つ目の子では y = 4 , 5 , 6 y=4,5,6 y = 4 , 5 , 6 、2つ目の子では y = 0 , 1 , 2 y=0,1,2 y = 0 , 1 , 2 にあり、重なりません。よって範囲の共通部分はちょうどこの列で、ピボット ( 0 , 5 ) (0,5) ( 0 , 5 ) を除くと A 7 A_7 A 7 になります。
言い換えると、縦に4マス ( 0 , 1 ) , … , ( 0 , 4 ) (0,1),\dots,(0,4) ( 0 , 1 ) , … , ( 0 , 4 ) を持っていれば、あと3手で勝てます。Maker は ( 0 , 5 ) (0,5) ( 0 , 5 ) を取って縦5マスにし、Breaker が右側のどこに打っても、上か下のどちらかのカード6が使えます。
図5 具体例 カード6(左)とカード7(右)です。橙のマスが必要な集合 A A A 、薄い青が範囲 T T T 、黒い枠がピボット p p p 、緑の丸はカード6で Snaky を完成させる2マスです。どちらも、範囲に Breaker のマスがない限り、高さ h h h の手数以内で勝てます。座標の向きは論文と同じで、y y y は上向きです。
もう少し詳しく 横5マスと4つの3マスの組
カード6の二重の脅しは、横向きにしても同じです。Maker が横5マス { ( r , 0 ) , … , ( r + 4 , 0 ) } \{(r,0),\dots,(r+4,0)\} {( r , 0 ) , … , ( r + 4 , 0 )} を持っているとします。端 e ∈ { r , r + 4 } e\in\{r,r+4\} e ∈ { r , r + 4 } と上下 ε ∈ { − 1 , 1 } \varepsilon\in\{-1,1\} ε ∈ { − 1 , 1 } について、次の3マスの組を考えます[2 , §5.1, p.9] 。
H ( e , ε ) = { ( e − 1 , ε ) , ( e , ε ) ( e + 1 , ε ) } \begin{aligned} H(e,\varepsilon)=\{&(e-1,\varepsilon),(e,\varepsilon)\\ &(e+1,\varepsilon)\}\end{aligned} H ( e , ε ) = { ( e − 1 , ε ) , ( e , ε ) ( e + 1 , ε )}
この3マスに Breaker のマスがなければ、真ん中の ( e , ε ) (e,\varepsilon) ( e , ε ) を取ると両隣の2マスがどちらも完成のマスになります。2つの Snaky は、5マスのうち左の4マスと右の4マスを使うものです。
4つの組 H ( r , ± 1 ) , H ( r + 4 , ± 1 ) H(r,\pm1),H(r+4,\pm1) H ( r , ± 1 ) , H ( r + 4 , ± 1 ) は互いに重なりません。横5マスができた時点で2つ以上の組が空いていれば、Breaker の次の1手のあとも1つは空いていて、Maker が勝ちます。論文の第5節は、これを使って「横4マスを持ち、周りの 10 × 9 10\times9 10 × 9 のマスに Breaker のマスが3つ以下なら Maker が勝つ」という命題を証明しています[2 , Proposition 7, p.8] 。この命題は21手の定理の証明には使われていません。
728枚のカードと最後のカード
論文は、6枚の基本のカードに722行の表で722枚のカードを足し、全部で728枚のカードを作ります[2 , §3, p.4] 。各行には、カード番号、ピボットの座標、子のリストが書かれています。子は前のカードの番号と置き方の記号です。最初の2行は次のとおりです。
6 14 4:100 5:101
7 05 6:001 6:405
座標は1文字ずつ 0123456789ABCDEFG \texttt{0123456789ABCDEFG} 0123456789ABCDEFG の位置で読み、14 \texttt{14} 14 は ( 1 , 4 ) (1,4) ( 1 , 4 ) を表します。4:100 \texttt{4:100} 4:100 は「カード4に置き方1(x x x と y y y の入れ替え)を施し、( 0 , 0 ) (0,0) ( 0 , 0 ) だけずらす」という意味です。行の途中には括弧でくくった組み合わせも書けて、そこでも同じ規則を使います。子の参照は全部で4,089個、組み合わせは括弧の中のものを含めて1,620回あります[2 , §6.1, p.12] 。
命題15 最後のカード [2 , Proposition 5, p.5]
論文の表から作った728個の三つ組はすべて有効な条件で、高さは21以下である。最後のカード727は次をみたす。
p 727 = ( 8 , 8 ) A 727 = ∅ ∣ T 727 ∣ = 251 h 727 = 21 T 727 ⊆ { 0 , … , 16 } 2 p_{727}=(8,8)\qquad A_{727}=\varnothing\qquad |T_{727}|=251\qquad h_{727}=21\qquad T_{727}\subseteq\{0,\dots,16\}^2 p 727 = ( 8 , 8 ) A 727 = ∅ ∣ T 727 ∣ = 251 h 727 = 21 T 727 ⊆ { 0 , … , 16 } 2 p 727 = ( 8 , 8 ) A 727 = ∅ ∣ T 727 ∣ = 251 h 727 = 21 T 727 ⊆ { 0 , … , 16 } 2 \begin{gathered}p_{727}=(8,8)\\A_{727}=\varnothing\\|T_{727}|=251\\h_{727}=21\\T_{727}\subseteq\{0,\dots,16\}^2\end{gathered} p 727 = ( 8 , 8 ) A 727 = ∅ ∣ T 727 ∣ = 251 h 727 = 21 T 727 ⊆ { 0 , … , 16 } 2 p 727 = ( 8 , 8 ) A 727 = ∅ ∣ T 727 ∣ = 251 h 727 = 21 T 727 ⊆ { 0 , … , 16 } 2 \begin{aligned}p_{727} &= (8,8)\\[4pt]A_{727} &= \varnothing\\[4pt]|T_{727}| &= 251\\[4pt]h_{727} &= 21\\[4pt]T_{727} &\subseteq \{0,\dots,16\}^2\end{aligned} p 727 A 727 ∣ T 727 ∣ h 727 T 727 = ( 8 , 8 ) = ∅ = 251 = 21 ⊆ { 0 , … , 16 } 2
証明 開く 閉じる すべて開く すべて閉じる
集合と高さの値は、表から有限回の和集合・共通部分・回転と平行移動で計算できる。論文の付属プログラムがこの計算をし、別の実装でも同じ結果を確かめている。詳しく 閉じる
この記事の図のプログラムも、表を一から計算し直した。728枚、組み合わせ1,620回、参照4,089個、最後のカードの値、カード6と7の値、下の表(論文の表1)の数は、すべて論文と一致した。
最後のカードのピボットは ( 8 , 8 ) (8,8) ( 8 , 8 ) で、子は32個あります。子は6種類のカードを回転・裏返し・平行移動したもので、どれも必要な集合が { ( 8 , 8 ) } \{(8,8)\} {( 8 , 8 )} になるように置かれています。範囲の共通部分は、子を足すごとに次のように減っていき、最後は ( 8 , 8 ) (8,8) ( 8 , 8 ) だけになります[2 , Table 1, p.7] 。
カード A j A_j A j ∣ T j ∣ |T_j| ∣ T j ∣ h j h_j h j 置き方の数 共通部分に残る ( 8 , 8 ) (8,8) ( 8 , 8 ) 以外のマス
648 { ( 4 , 5 ) } \{(4,5)\} {( 4 , 5 )} 87 15 4 35
708 { ( 8 , 8 ) } \{(8,8)\} {( 8 , 8 )} 225 20 4 31
712 { ( 5 , 5 ) } \{(5,5)\} {( 5 , 5 )} 96 15 8 21
713 { ( 5 , 5 ) } \{(5,5)\} {( 5 , 5 )} 98 15 4 12
725 { ( 7 , 7 ) } \{(7,7)\} {( 7 , 7 )} 167 20 8 4
726 { ( 7 , 7 ) } \{(7,7)\} {( 7 , 7 )} 169 20 4 0
共通部分が { ( 8 , 8 ) } \{(8,8)\} {( 8 , 8 )} で、子の必要な集合の和も { ( 8 , 8 ) } \{(8,8)\} {( 8 , 8 )} なので、規則の式から A 727 = { ( 8 , 8 ) } ∖ { ( 8 , 8 ) } = ∅ A_{727}=\{(8,8)\}\setminus\{(8,8)\}=\varnothing A 727 = {( 8 , 8 )} ∖ {( 8 , 8 )} = ∅ です。子の高さの最大は20なので、h 727 = 21 h_{727}=21 h 727 = 21 になります。
A 727 = ∅ A_{727}=\varnothing A 727 = ∅ は「何も持っていなくてよい」、T 727 T_{727} T 727 に Breaker のマスがないことは空の盤なら当然成り立ちます。こうして、空の盤から21手で勝てることが出てきます。
命題16 戦略の作り方 [2 , §4, p.7]
空の盤から次の手順で打つ Maker は、Breaker がどう打っても21手以内に Snaky を完成させる。とくに定理9 が成り立つ。
証明 開く 閉じる すべて開く すべて閉じる
最初の
「いまのカード」をカード727(そのままの置き方)とする。空の盤では、その条件 A = ∅ A=\varnothing A = ∅ 、B ∩ T = ∅ B\cap T=\varnothing B ∩ T = ∅ が成り立つ。 Maker の手番では、いまのカードのピボット(置き方を施したもの)を取る。ピボットがすでに Maker のものなら、決めておいた順番で最初の空きマスを取る。詳しく 閉じる
順番は、max ( ∣ x ∣ , ∣ y ∣ ) \max(|x|,|y|) max ( ∣ x ∣ , ∣ y ∣ ) の小さい順、同じなら辞書式の順 とする。
Breaker の
手 b b b のあと、子のリストを前から見て、範囲が b b b を含まない最初の子を新しい「いまのカード」にする。補題12 の証明から、そのような子はあり、その条件が成り立っている。 いまのカードが基本のカードなら、欠けている1マスを取って完成させる。
1手ごとに高さは1以上下がり、基本のカードの高さは1である。高さ21から始めたので、21手以内に完成する。
Breaker になって対戦する
下の図では、この戦略をそのまま動かしています。あなたが Breaker で、マスを押すとそこに Breaker の手を打ちます。Maker は論文の表に従って応じます。1手目の Maker の手は ( 8 , 8 ) (8,8) ( 8 , 8 ) です。
最初から 1手戻す 遠くに打つ
コンピューターが1手 最後までコンピューター 範囲を表示
Maker 1 手、Breaker 0 手。Maker の最後の手は (8, 8) です。いまのカードは 727 で、高さは 21 、範囲は 251 マス、必要な集合は 0 マスです。Maker は高さと同じ手数以内に勝ちます。 Maker の勝ちです。Maker 1 手目で Snaky(緑)が完成しました。 盤の外の手:0
Maker(必要な集合) Maker(そのほか) Breaker いまのカードの範囲 完成した Snaky
図6 具体例 命題16 の戦略を、論文の表から計算して動かしている図です。数字はそれぞれの何手目かを表します。括弧の中の組み合わせに進んだときは、それを含むカードの番号を表示します。点線の枠は 17 × 17 17\times17 17 × 17 の盤 { 0 , … , 16 } 2 \{0,\dots,16\}^2 { 0 , … , 16 } 2 です。「遠くに打つ」は盤の外の遠いマスに打ちます。「コンピューター」は、Maker に残る高さがいちばん大きくなる手を選ぶ Breaker で、この Breaker が相手だと Maker はちょうど21手目に勝ちます。この動きはブラウザの計算と同じものを記事の生成時に Python でも計算し、一致を確かめています。
範囲の中のマスをでたらめに選ぶ Breaker と図のプログラムで60回対戦させると、Maker は毎回6〜8手で勝ちました。Breaker が Maker のすぐ隣に打ち続けても、範囲(薄い青)の中で Maker は別の作戦に移ります。範囲は Maker の作戦が使う領域で、Breaker の手が入ると、その手を含まない子の範囲に切り替わります。
論文にも例が載っています[2 , §3.3, p.6] 。Maker の ( 8 , 8 ) (8,8) ( 8 , 8 ) に Breaker が ( 7 , 8 ) (7,8) ( 7 , 8 ) と応じると、ピボットを ( 8 , 7 ) (8,7) ( 8 , 7 ) とする子が使えます。続けて Breaker が ( 8 , 6 ) (8,6) ( 8 , 6 ) を取ると、ピボットを ( 11 , 8 ) (11,8) ( 11 , 8 ) とする子が使えます。このピボットは、それまでの Maker の手の隣ではありません。論文の例はこれらの子が使えると述べているだけですが、命題16 の戦略は実際にこの順で ( 8 , 7 ) (8,7) ( 8 , 7 ) 、( 11 , 8 ) (11,8) ( 11 , 8 ) と打ちます。図6で同じように打つと、この順に進むことを確かめられます。
「コンピューター」の Breaker は、Maker が21手かかるようにできます。ただしこれは、この戦略の手数が21より縮まらない、という意味です。Maker がほかの戦略でもっと早く勝てるかどうかは分かりません。