アンチシャンチーは引き分けである
アンチチェスは、チェスの規則を二つ変えたものだ。取れる駒があれば必ず取る。自分の駒をすべて失った側が勝つ。キングはただの駒になる。Lichess で指せる変則で、2016 年に解決済みでもある(マーク・ワトキンスが 1. e3 で白の必勝を示した)。
その二つの規則をシャンチー(中国象棋)の盤に載せ、設計する前に何が出てくるかを測った。結果は引き分けだ。黒には序盤で見つけるべき二手があり、紅は間違えようがなく、その先は失わなければならない駒が九宮の中に居座って、何も手が届かない。他のどの序盤も負けで、そのうち 63 通りは証明済みである。
調べた限り、これはシャンチーの盤上のアンチチェスについての最初の分析だ。いちばん近い先行例は、混成軍の盤 Synochess と Empire でのアンチチェスと、5x5 将棋でのそれである。
この記事はチェスの指し手向けなので、記譜はチェス式にする。R 車、H 馬、E 象、A 士、K 将、C 砲、P 兵。筋 a から i は紅から見て左から、段 1 から 10 は紅側から数える。したがって 1. Cxb10 は砲が b10 にいる駒を取る手だ。一手(ply)とは片側の一手を指す。
対局
シャンチーを指したことがなければ、Mistboard のルールページが数分で一通り説明している。
この記事が依拠する対局は、すべて下のビューアに入っている。一手あたり百万、二百万、五百万ノードでのエンジン自己対局。序盤の連鎖の 83 の終点それぞれから一局ずつ。ランダムな序盤から強いエンジンが弱いエンジンと当たった 20 局のラダー戦。そして 63 の証明それぞれの主要変化。最初に開くのは 2M の対局で、まず追うべき一局だ。強制された序盤、両者が歩調を合わせて駒を捨て、紅が最後の機動駒をわざと差し出し、35 手目で盤面が詰まる。
序盤:黒には見つけるべき二手がある
この対局の強制された部分は、4 手か 5 手続く強制取りの連鎖で、その中に分岐が三つある。二つは黒のもので、どちらも勝敗を決める。一つは紅のもので、どちらでもよい。下の盤面はすべて一つの表から切り出したものだ。連鎖の中のあらゆる局面、手番側がそこで選べるあらゆる取り、そして各取りがどこへ通じるか。行のラベルは、その取りの後で両者が連鎖の最善の取りを続けたときの局面の価値。小さな文字はその根拠で、閉じたものは証明、閉じなかったものはエンジンの判定だ。行にポインタを載せると盤上に取りが表示され、クリックすればそれをたどれる。終点を越えて進めば、その先に指された対局が見られる。
分岐 A:1. Cxb10 の後、黒には二つの取りがあり、一方は負ける
紅の初手は砲で馬を取る手だ。二つの選択肢は鏡像なので、1. Cxb10 と呼ぶ。黒は必ず取らねばならず、方法は二つある。車で砲を取り返すか、もう一方の砲を紅の最下段へ撃ち込むかだ(砲はちょうど一枚の駒を飛び越えて取る。ここでは紅自身の h3 の砲が砲台になる)。自然な 1…Rxb10 は 34 手で強制的に負け、それは証明されている。もう一方の 1…Cxh1 は持ちこたえる。
なぜ車の取り返しは負けるのか
証明の全体がここにある。証明書とは木構造で、紅の手番ではただ一手を、黒の手番では合法な応手をすべて持つ。この証明書は 1,864 局面から成り、ウィジェットはそのすべてを収めている。前へ進めば主要変化を、要所の手についた注釈つきでたどれる。あるいは黒の手番のどこでも別の応手を選び、そちらをたどってもよい。どの行も合法手であり、それ以外の手はなく、どの変化も紅の駒が尽きて終わる。
相手に取りをちょうど一つだけ残す静かな手は、相手が指さざるを得ない手だ。紅の最下段の駒は行列になり、目の前に置かれたものを取らされる黒の車が、紅のためにその行列を片付けていく。三十手後、紅には何も残らず、勝っている。規則しか知らない検証器がこの木全体を再生済みで、ウィジェットはその同じ木である。
したがって黒の唯一の手は 1…Cxh1 だ。
分岐 B:1…Cxh1 の後、紅には二つの応手があり、どちらも持ちこたえる
紅は 2. Rxh1 と静かに砲を取ることができ、それで交換は終わる。2…Rxb10 が黒の唯一の取りで、連鎖は 4 手目、紅の手番、盤上に取りなしという形で終わる。あるいは紅は 2. Cxd10 と撃ち続けることもでき、これも持ちこたえたうえで黒に二つ目の罠を仕掛ける。これがどちらでもよい分岐だ。初期配置から始めたエンジン自身の対局は、どの予算でも 2. Rxh1 を選んだ。
分岐 C:2. Cxd10 の後、黒は将で取らねばならない
黒には再び二つの取りがあり、再び自明なほうが負ける手だ。将で砲を取る 2…Kxd10 は持ちこたえる。続く 3. Rxh1 が紅の唯一の取りで、連鎖は 5 手目、黒の手番で終わる。2. Rxh1 の後の終点と同種の局面で、手番だけが逆だ。砲を撃ち続ける 2…Cxf1 は負ける。紅は将でそれを取り(3. Kxf1)、黒の唯一の取りは 3…Kxd10 で、連鎖は 6 手目、紅の手番で終わる。そこから紅は一手 100,000 ノードで 38 手目に全滅で勝ち、百万ノードでも勝つ。
この最後の一つはエンジンの判定であって証明ではない。証明器はここで予算を使い切り、主要変化の上で探索に依拠する終点はこれだけだ。仮に 2…Cxf1 が持ちこたえるとしても、上の結論は何も変わらない。黒に引き分けへの道が二つ目にできるだけで、この対局はやはり引き分けである。
2…Cxf1 の後、紅には三つの取りがあり、木の残りはここにある。
勝つ手は 3. Kxf1 だ。他の二つは連鎖を続かせ、83 の終点のうち 80 がその下にある。3. Cxa10 は 21 の終点へ通じ、最善手では引き分け。3. Cxf10 は 58 の終点へ通じ、最善手では紅が負ける(黒は 3…Kxf10 と、再び将で砲を取って応じ、連鎖は 7 手目、黒の手番で終わる)。どちらも紅が指す必要のない取りなので、誰もその 80 の終点へ追い込まれることはない。見たければ、ビューアはそこへ入っていける。
連鎖の後:双方は何を目指すのか
生き残る二つの終点がこれだ。左は 1. Cxb10 Cxh1 2. Rxh1 Rxb10 の後で紅の手番。右は 2. Cxd10 Kxd10 3. Rxh1 の後で黒の手番、駒は同じで、将が d10 にいて a10 の車がまだ元の位置にいる。互いに 14 枚、取りはなく、対局は開けている。以下は、三つの予算でのエンジンの対局が示したものだ。
駒を失うことはできず、取ってもらうことしかできない。だからどの手も差し出しであり、意味を持つのは相手が断れない差し出し、つまり相手に取りをちょうど一つだけ残す静かな手だ。中盤はそういう差し出しの競り合いになる。
遊んだ車は負担になる。その進路に駒を置けば、車はそれを一枚残らず取らねばならない。車の取り返しが負けるのはそのためだ。だから両者とも序盤では代わりに砲を差し出す。2M の対局では 3. Cb3 が黒の砲を b1 の馬へ向けた砲台になり、三度の取りが続いて両方の車が遊ぶ。強制された取りが十四手、駒が歩調を合わせて消えていく。
あるいは、のろい兵の戦争になる。5M の対局では誰も早い段階で強制的な差し出しを見つけられず、兵が互いの進路へ歩み込むことが百手続き、対で取られ、途中で象と将が一枚ずつ投げ込まれる。下の対局についた注釈が、その交換を一つずつ追っている。
なぜ引き分けなのか、そしてそれは何に依拠するのか
将と士は九宮を出ず、象は河を渡らない。「すべてを失う」という目標のもとでは、片側五枚のこれらの駒は、歩み寄ってきた敵の駒にしか取られず、そして両者はまさにその歩み寄れる駒を手放そうとしている。
詰まり盤面。どちらの側にも車、馬、砲、兵がなくなれば、二度と取りは起こらない。規則は対局が終わっていることを知らない。
2M の対局は 35 手目でここに至る。紅が最後の三枚の機動駒を黒の車に差し出し、44 手目に千日手で引き分けになる。
兵の戦争は、互いに車一枚と九宮の駒を残して終わり、それは手で確かめられる引き分けだ。紅の駒は紅の陣地を出られないので、何も黒の車に届かない。車には紅の駒が決して立てない筋があるので、取りを強いられることはない。そして盤上に取りがなければどの手も合法なので、待ちたい側は士を往復させ、無取り手数制限が対局を終わらせるのを待てばよい。色を入れ替えても同じことだ。
勝つには、相手が自分の九宮を丸ごと食い尽くせるだけの機動駒を保ち続け、しかもそれを使うよう強いられる必要がある。その駒を握るのは相手だ。断れない取りへ投げ捨てることも、脇へ置いておくことも、ただ待つこともできる。どのエンジン対局でも、必要なときに三つのうちどれかがそこにあった。ランダム対局では 3,000 局の四分の一が膠着する。
これは証拠であって証明ではない。一手五百万ノードまでの探索は、生き残ったどちらの局面からも勝ちを見つけなかった。連鎖が通じうるすべての局面に逃げ道があることを示したわけではなく、逃げ道のない局面を誰も見つけなかったことを示しただけだ。表題はその判定とその盤の幾何であって、定理ではない。
ゲームとして成立させられるか
引き分けは一つの事実から来る。片側五枚の駒は、相手がむしろ捨てたがる駒にしか取られない。修正はその事実を変えるか、失うべきものを変えるか、膠着の価値を変えるかのどれかでなければならない。同じ検査、掃引、証明器、自己対局で四つを試した。どれもゲームにはならなかった。
膠着はすべて駒の少ない側の勝ちにする。FICS のステイルメイト規則を、対局が止まるあらゆる場面に適用するものだ。駒を捨てて盤面を凍らせれば、軽いほうに勝ちが転がり込む。ランダム対局の未決着は 26% から 4% に減り、偏りはない(紅 47.9%)。エンジン対局はまったく変わらなかった。エンジンはこの規則を知らないので、同じ対局が別の採点をされただけで、それはこの規則が生み出すゲームについて何も語らない。まともに試すには、エンジンが枚数を競うよう Fairy-Stockfish にパッチを当て、一日分の対局が要る。そこで止めた。
すべてではなく将を失う。1844 年の祖先 Codrus だ。標的にはいつでも筋を伝って届くが、例のてこは生き残る。機動駒を捨てた側は、敵の将を取るよう強いられることが決してない。同じ二つの序盤を通って、より速く引き分ける(終点 28、負け 25 のうち 20 が証明済み、自己対局は三局とも引き分け)。
将を王のままにする。ICC 版の Losers で、王手と詰みが残り、詰まされるか裸の将まで減らされた側が勝つ。決着はつくが、悪い方向にだ。百万、二百万、五百万ノードで黒が勝ち、16 の終点の連鎖を遡っても黒勝ち(負け 13 のうち 7 が証明済み)。王手は相手の取る義務を一時停止させ、私が見たどの変化でも、その手番は後手の側に転がり込んだ。
九宮の駒を外に出す。閉じ込めをなくすことで要塞をなくすが、その駒をシャンチーの駒たらしめているものの大半も一緒になくなる。これは測っていない。別の盤だからだ。
一つ目だけが、ゲームの姿を保ったまま成立しうる唯一の案だ。試したい人のために、膠着のスイッチはすでにカーネルに入っている。
どう検証したか
三つの道具と、それらが出したもの。
審判、指し手、証明器
審判は、上記の規則をスイッチで切り替えられるシャンチーの規則カーネルだ。その手生成を 209 局面で Fairy-Stockfish と突き合わせた。不一致はゼロ。どの対局でもエンジンが手を提案し、カーネルが判定し、適用し、終局させる。だから別の規則を黙って指しているエンジンは、別のゲームの棋譜を残す代わりに、実行を中断させる。
指し手は設定ファイルで構成した Fairy-Stockfish だ。その評価はこの目標を一度も教わっておらず、それが表に出る。十倍の探索が一倍の探索に勝つ成績は、ここでは 10 勝 4 敗 6 分けにとどまり、通常のシャンチーでは 20 対 0 だ。序盤がエンジンではなく証明に依拠しているのはそのためである。
証明器は局面と主張(「ここから紅の勝ち」)を受け取り、木を組み立てる。紅の手番ごとに勝つ手を一つ、黒の手番ごとにどの応手でも負けることを、カーネルが終局と判定する局面まで示す木だ。木が閉じれば、その主張はどのエンジンがどう考えようと規則についての事実になる。用いるのは標準的な手法である証明数探索で、60 手の打ち切りを攻め手の負けとして数えるので、証明が打ち切りに寄りかかることはない。すべての証明は証明書、つまり手の入れ子リストとして保存され、別個の検証器が証明書をカーネルに対して再生するだけで、それ以外は何もしない。
掃引:連鎖の終わりで先に動く側が勝つ
最初に規則を書き下したとき、私は黒の応手を強制手だと考え、どの対局も同じ四つの取りで始まると思っていた。誤りだった。黒のもう一方の砲は、紅自身の h3 の砲を越えて h1 の馬を取ることができ、そこから連鎖が始まる。砲が砲台の隣、標的の手前に着地するたびに、相手の砲が自陣の最下段沿いに応じ、砲が車の届く位置に着地したときだけ止まる。カーネルにすべての枝を歩かせた。605 局面、4 手目から 18 手目までに 166 の終点、そのうち 72 が 14 手目にあり、130 の終点では少なくとも一方の将がすでに消えている。鏡像を除けば、相異なるものは 83 である。
それぞれから、両者一手 100,000 ノードでエンジンに一局ずつ指させた。83 局中 70 局は、その先 14 手から 36 手以内に終わった。片方が駒を差し出し、もう片方が取らされ、勝者は終点で最初の自由な手を持っていた側で、70 局中 66 局がそうだった。残る 13 局は膠着し、書かれた規則のもとでは引き分けである。
| 終点の手数 | 先に動く側 | 終点 | 紅の勝ち | 黒の勝ち | 膠着 |
|---|---|---|---|---|---|
| 4 | 紅 | 2 | 1 | 0 | 1 |
| 5 | 黒 | 1 | 0 | 0 | 1 |
| 6 から 12 | 交互 | 14 | 8 | 6 | 0 |
| 14 | 紅 | 36 | 36 | 0 | 0 |
| 15 | 黒 | 5 | 0 | 4 | 1 |
| 16 | 紅 | 15 | 8 | 1 | 6 |
| 17 | 黒 | 6 | 0 | 6 | 0 |
| 18 | 紅 | 4 | 0 | 0 | 4 |
つまり連鎖の内側では、取りの選択はすべて、連鎖が終わったときに誰が先に動くかの選択にほかならない。一手百万ノードで繰り返すと、判定が十一件動いた。膠着六件が勝ちになり、勝ち二件は長引き、膠着三件は膠着のままで、勝者が入れ替わった勝ちは一つもない。
これをどこまで信じるか。100,000 ノードは安価な探索で、エンジンはこの目標に弱いので、掃引は候補を見つけるだけで、それ自体では何も決めない。勝ちは持ちこたえた。予算を十倍にしても勝者が入れ替わったものはなく、70 のうち 63 はその後エンジンなしで証明された。膠着は弱い証拠だ。膠着はエンジンが勝ちを見つけなかったことしか意味せず、13 のうち 6 は百万ノードで勝ちに変わった。重要な二つの膠着は生き残った終点で、これらは百万ノードでも、初期配置から一手五百万ノードまでで指したどの対局でも膠着のままだった。疑いはそこに集中しており、なぜ引き分けなのかの節が扱うのはまさにそれである。
証明と、表
70 の決着した終点それぞれから、百万局面の予算で。63 が閉じ、7 が予算を使い切り、反証されたものはない。証明の中央値は 19 局面で、守り手の応手がすべて強制される一本の変化だ。最大は車の取り返しの 1,864 局面。検証器は 63 すべてを通した。
こうして各終点に価値がつき、序盤の節にある表は、その価値を連鎖に沿って遡らせたものだ。分岐ごとに、手番側は自分に最も有利な部分木をもつ取りを選ぶ。生き残る終点は二つ。他の終点はすべて、相手が代わりに勝ちを選べた分岐の下にある。表は 100k の掃引で採点したもので、代わりに 1M の掃引で採点しても、初期配置から 8 手以内の価値は一つも変わらない。
証拠
上のすべてが一つのリポジトリにある。三つの Fairy-Stockfish 変則定義、序盤の連鎖の 166 の終点すべて、各終点から各予算での一局ずつのエンジン対局、すべての証明書、規則カーネル、そしてフォルダから直接開けるビューアに入った対局。npm run verify はすべての証明書を規則だけに対して再生し、数秒で 63、63、20、7 件の有効を報告する。README には Fairy-Stockfish のバイナリで掃引と証明を再現する四つのコマンドがある。
三つ目の生き残る序盤、どれかの証明書に対する守り、あるいは四手の強制手の後の局面からのどちらかの側の勝ちを示せるなら、そこで issue を立ててほしい。見てみたいし、この記事にもそう書く。