チェスには、どのプレイヤーも学ぶ基本終盤の表がある。王と車(ルーク)は勝ち。王と二枚のナイトでは勝ちを強制できない。王とビショップは絶望。シャンチーにも同じ表があり、中国語が読めれば同じやり方で学べる。同じ判定を載せた終盤の教本からだ。英語では断片しか手に入らない。

最良の断片は、シャンチーに関する英語版ウィキペディアの記事の終盤の節だ。三十数件の判定が文章で述べられ、そのどれにも出典が付いていない。中国語の対応記事は象棋勝和定式(象棋勝和定式)という記事である。同じ範囲を判定ごとの図付きで扱い、二冊の書籍を挙げている。金启昌・杨典『象棋残局勝和定式』(北京体育大学出版社、2008年)と、薛荣贤『象棋入門実用指南』(2009年)だ。私はどちらも読んでいない。以下で「教本」と言うとき、それはこの二つのウィキペディア記事を指す。一方は教本の伝統を圧縮した報告であり、もう一方は局面を見せてくれる。

以下にその判定のうち32件を、それぞれ局面に組み上げ、二重に検証したうえで載せる。どれも、検証に使ったエンジン相手に実際に指せる盤になっている。スタディはMistboard上にあり、判定ごとに1章だ。

基本:士象全を破れるのは何か

車はシャンチー最強の駒で、別名で呼ばれたルークだ。標準的な士象全は守備駒4枚すべてを残す。将は元の位置、士は両方、象は両方、しかも二枚の士が将の真正面に並び、砲がそれを砲台として使えない配置にする。

裸の車がこの守りに当たっても引き分けで、それが今や証明済みだ。データベースは引き分けと言い、Pikafishは評価値をちょうど0と出す。

兵三枚なら破れる。15手で詰み確定。

馬二枚でも破れる。25手だ。

引き分け

15手で詰み

同じ守り、同じ手番。どちらの判定も探索ではなくデータベースから出ている。どちらでも黒を持って、守り切れるか試してほしい。

車はどの駒価値表を見ても兵三枚より価値が高く、馬二枚よりも高い。この終盤ではどちらよりも価値が低い。兵は後退できず、それは弱点のように聞こえて、勝因そのものに変わる。九宮に迫る三枚の兵は押し返せず、守り側にはそれを交換で消す手段がない。

同じ論理は逆方向にも働く。兵五枚がすべて最下段に並んでいて、相手が裸の将なら引き分けだ。5対0である。後退できず、しかもすでに壁際にいるので、詰みもステイルメイト(困斃)も強制できない。

引き分け

5対1で、しかもこの局面に詰みは存在しない。紅を持って勝とうとしてみてほしい。

こうした終盤を決めるのは配置であり、英語の節にはそれを端的に示す図が一組だけある。

裸の車に対して馬と象二枚。守り側が要塞の形(馬がe8、象がi8とg6)にあれば守り切れ、データベースもそれを確認している。そのg6の象をg10に動かすと紅の勝ちで、1.Rb7から始まる。

引き分け

紅の勝ち

違いは、盤の右側にいる象が4段ぶん上にあるかどうか、それだけだ。前者は守り切り、後者は破ってみてほしい。

双方同じ駒、同じ攻め手、同じ手番で、結果が反転する。この一組は誰かが図にしたから翻訳を生き延びた。以下の三つの項目は、誰もそれをしなかったものだ。

何が必要なのか

32件の判定のうち三つは、英語版が伝えていない指示にかかっている。どれも配置が結果を決めており、それを述べた一文こそが落ちているのだ。

車対馬砲、引き分けが一マスにかかる場合

英語の節はこう述べる。「守備駒なしの車対小駒二枚:引き分けだが、良い守備配置が必要」

私は八通り作ってみた。Pikafishは八つすべてで詰みを見つけ、最も粘れるように作った局面でも15手で詰んだ。八分の八は探索の見間違いではないので、この項目は異議ありとして書き留めて先に進んだ。それが誤った判断だった。

中国語の記事は局面を図示し、英語版が伝えていない指示の一文を加えている。砲は自陣の将の真後ろに置き、馬は将から可能な限り離れて構える、というものだ。

引き分け

12手で詰み

違いは一マス。左では砲が自陣の将の真後ろにあり引き分け、右では一マス動いていて紅が12手で詰ます。どちらでも黒を持ってみてほしい。

この局面はどちらの手番でもデータベース上の引き分けで、Pikafishは深さ40まで+0.10と読む。将の後ろの砲が最下段を守り、将に串刺しにされることもない。それが要塞のすべてだ。横に一路ずらせば同じ局面が12手詰みになり、一路離れた地点から遠い隅まで、私が試した他のマスはすべて負けだった。

車自身の位置はまったく関係ないことが判明した。a10、e5、i1、a1から確かめたが、どれも引き分けのままで、だからこそこれは幸運な配置ではなく要塞なのだ。馬には教本の「将から可能な限り離れる」よりも緩い条件がある。車一手で利いてくるマスを避けるだけでよい。b7、c7、d7、e7、d6、d4、d2なら守り切れる。車と同じ段にあるd5では、車がそのまま取って5手で詰む。

私の八つの局面では砲がどれも別の場所にあった。英語版の判定は正しかった。「良い守備配置が必要」が結果のすべてを担いながら、その中身を何一つ伝えていなかったのだ。

車砲対車、「中央の筋」がマスではない場合

英語の節はこう述べる。「車に砲を加えても、守り側の車が中央の筋を占めている限り、裸の車には勝てない」

これは確かめられる規則のように読める。私の局面はそれを満たしている。黒の車は中央の筋、自陣の元の位置で、自分の将の真正面にある。Pikafishは28手で詰ます。

詰むのは、この一文が触れていない駒のせいだ。砲はちょうど一枚の駒を飛び越えて取るので砲台が必要で、それが誰の駒かは問わない。紅の砲は黒の車の下の中央の筋に滑り込み、すぐに王手をかける。その車を砲台に、背後の黒の将を的にしてだ。守り側の引き分けの駒そのものが砲車になる。

守り側の車をその筋に沿って下げていくと、データベースはそこに一線を引く。

引き分け

紅の勝ち

守り側の車はどちらでも中央の筋を占めている。引き分けになるのは下の方だけだ。最後の詰みは海底の月をすくう形で、筋の最下部で決まる。

紅が図の配置なら、守り側の車は5段目以下からは引き分け(深さ40で0.00)、6段目以上からは負ける。一段の差だ。

紅が勝つには二つの条件が必要で、どちらも紅についての条件だ。砲が中央の筋に着地してそこで生き残れること。図では5段目に着地することを意味し、そこは紅自身の車が守っている。その砲を車の段から外して3段目や7段目に置くと、それらの勝ちはすべて引き分けに戻る。そして紅は中央の筋の最下部を必要とする。この終盤の要となる詰み、海底の月をすくう形(海底捞月)がそこで決まるからだ。車が将を背後に置いて筋の最下部に到達し、守り側の車は二将の間に挟まって動けなくなる。筋を離れれば将帥対面を許し、留まれば取られてしまう。

自陣側で中央の筋に立つ守り手は、そのどちらも止められない。筋を占めるとは、その駒が制圧しているマスについての主張である。私はそれを、駒が立っているマスについての主張と読み、その文言を満たす局面を作り、28手で詰まされた。

馬砲対馬、どれだけ深く読んでも決着しない場合

英語の節はこう述べる。「馬+砲+守備駒4枚 対 小駒1枚[+]守備駒4枚:小駒が馬なら勝ち……砲なら引き分け」

13枚。chessdbがその規模で作った表はちょうど一つだけあるが、それは別の13枚の組み合わせで、この局面を実際に照会すると unknown が返る。だが残るのが探索だけというわけではない。強い側に士一枚を残す縮約であるKANCKAABBNの10枚まで削れば、表は存在する。24,251,768,055局面、そのうち紅の勝ちが85.48%だ。この判定を支えているのは探索深さではなく、この縮約の階段である。

探索では解決しない。深さ26で+2.24。深さ42で+2.47、それでも詰みは見えず、守り側の馬の配置を6通り変えても+2.32から+3.03の間に収まり、どれも決定的にはならない。固定深さから見ると、長い技術的な勝ちはまさにこう見える。そして紅が単に有利で引き分けの局面も、同じように見える。

それでも教本が正しいと言う証拠が二つある。エンジンは判定の二つの半分を自力で区別している。守り側の馬を砲に替える、つまり同じ一文の引き分け側にすると、同じ深さで+1.26と読むのだ。この差が教本の区別であり、それを教えられたことのない数値の中に現れている。

次に、深さ32でPikafishにこの局面を自己対局させた。紅は33手を双方無取りで駆け引きに費やし、34手目で士を取り、その4手後に二枚目を取り、56手目まで手を進め続けた。そこで局面は10枚に落ち、データベースの射程に戻った。黒の手番で、合法手はどれも負けである。

その最初の駒取りこそが問題のすべてだ。チェスに対応物のない規則があるからである。自然限着は、双方が60手のあいだ一度も駒を取らなければ引き分けとする。70手の技術を要する定跡勝ちは、実戦で指せる勝ちではない。この局面は34手目で突破し、26手を残した。

シャンチーはもう一方の扉も閉ざしていて、そちらはチェス指しにこそ痛い。ここでは千日手(連続王手)は負けだ。王手をかけ続ける側が手を変えなければ失う。チェスでは負け局面を救う標準手段なので、その本能は役に立たないどころか、勝ち点を渡してしまう。この二つの規則が、本稿のあらゆる終盤を上下から挟む。守り側は王手で逃げ切れず、攻め側は永遠に押し続けられない。どちらもチェスに訳し込める対応物がなく、だからこそ英語の要約はそれを落とす。

それでもこの項目の証明にはならない。黒もPikafishであり、もっと早い段階での優れた守りなら持ちこたえるかもしれない。それを排除するものはここには何もない。決着したのは、かつて私の信頼に頼っていた部分だ。終局の勝ちは、エンジンが深さ32で告げ、私が信じた詰みではない。証明可能に負けの局面であり、だからエンジンの手順は自分の意見ではなく厳密なものへと変換される。エンジンは依然として、根の局面から教本の判定を確認することは拒む。だが今は確実な局面へと指し進めている。34手の締め上げがどれほど紙一重かを感じたいなら、守り側を持つべき項目はこれで、引き分け側の半分は駒一枚の差だ。

未解決

13枚、どのテーブルベースもカバーしていない項目。黒は駒を取られずに60手生き延びなければならない。

駒を削っていくと、これは探索の問題ではなくなる。chessdb.cnはこの終盤の縮約について厳密な表を公開しており、それが教本の一文の意味を変えてしまう。紅自身の士と象を取り去り、将・砲・馬だけで士象全に当たる形にすると、5,492,247,706局面で、紅の勝ちは22.31%。紅に士を一枚戻すと85.48%、24,251,768,055局面だ。二枚目の士は1ポイント足す。士の代わりに象なら7ポイント足す。

つまりあの一文の攻め側にある「守備駒4枚」は実際に働いており、効いてくる枚数は1枚だ。士一枚が勝ちを担い、象はほぼおまけである。私はまずPikafishでそこに至った。表の存在を知る前に深さ30で同じ階段を走らせたのだが、順序は同じに出た。

同じ局面を別の方向に切ると答えが反転する。双方に士象全を残したまま、守り側の馬を外す。12枚で10,453,951,719局面、これはchessdbに構築されている。紅の勝ちは92.71%、最長の詰みは69プライ、そして表には負けが一つも記録されていない。一方の縮約は、勝ちが紅自身の士にかかっていると言う。もう一方は、黒に反撃材料がなくなった瞬間ほぼ全面的な勝ちだと言う。教本が実際に語っている駒組みはその間にあり、8,705個の表のどれにも入っておらず、実際に照会すると unknown が返る。

六語、二つのバケツ

上の三つの項目のうち二つには共通点があり、それは語彙だ。中国語の終盤教本は、結果を勝ちか引き分けかで格付けしない。六段階の尺度で格付けする。

判定 主張する内容 日本語
必勝 この駒組みのどの局面からでも勝つ 勝ち
例勝 標準的な技術で勝つ 勝ち
巧勝 特定の局面からのみ勝つ 勝ち
難勝 勝ちにくいが、引き分けと同じではない 勝ちまたは引き分け
例和 標準的な技術で引き分ける 引き分け
必和 どの局面からでも引き分ける 引き分け

六つのうち五つは翻訳を生き延びる。六番目はどちらかに寄せねばならず、上の三項目のうち二つがそこに乗っている。

中国語の記事は、車対馬砲を四段目の「勝ちにくい」に分類している。英語の節は「引き分け」に分類する。テーブルベースは中国語側に付く。車は盤上のほぼどこからでも勝ち、守り切れるのは唯一の守備陣形だけだ。「引き分け」と読んだプレイヤーは気楽に守って15手で負ける。「勝ちにくい」と読んだプレイヤーは、見つけるべきものがちょうど一つあると知っている。

二番目の項目は、反対方向から同じ段に着地する。中国語の表は車砲対裸の車を勝ちまたは引き分け(胜/和)として挙げ、そのうえでどちらがどちらかに一段落を費やす。英語は歯切れのよい半分だけを残して段落を落とし、そしてその段落こそが重要な部分だった。

事実は局面だ。判定はそうした局面が並ぶ棚に誰かが貼ったラベルであり、棚なしにラベルだけを訳せば、その意味の大半は失われる。

どこまで確かに分かっているのか

この表の判定は三つの等級のいずれかに入り、それらは同等とは程遠い。証明済みのものがある。データベースがその終盤を全部計算しており、答えは参照で済む。探索済みのものがある。私が走らせた深さでエンジンが同意している。それは証拠であって証明ではない。残りは主張されているだけで、出典の付いていない教本によるものだ。

それらの分類には二度の検証が必要だった。

英語の節から32件の判定を取り出し、それぞれに代表的な局面を作り、Pikafishに深さ26で尋ねた。

深さ26、32件の判定  
エンジンが同意 29
教本は引き分け、エンジンは勝ち確定を発見 2
教本は勝ち、エンジンは決めきれない 1

次に同じ局面を別の方法で二度目の検証にかけた。シャンチーには探索の代わりに答えを参照するクラウド終盤データベースがあり、chessdb.cnは駒数が十分少ない局面について勝ち・引き分け・負けと手数を返す。私の32件のうち27件が収まった。この上限は聞こえるより寛大で、士と象が合わせて8枚乗っている局面は、3枚の局面とほぼ同じくらい制約が強いからだ。士の合法マスは5つ、象は7つ、どちらも自陣を離れられない。そして実際に単なる参照でもある。それ自身の最善手順を一手ずつ辿っても判定は決して反転せず、手数も決して増えない。探索ならそうはならない。

上の三項目のうち二つには、データベースが確認する守備配置が付いた。そしてどちらの撤回も教本のものではなく私のものだった。一巡の結果は、32件のうち31件がPikafishと一致、1件が傾きあり。32局面のうち27件がデータベースに収まる大きさで、その27件すべてが厳密だ。

検証が私の作った局面で見つけたもの

検証が見つけた残りは私の落ち度だった。不正な局面が三つ。開いた筋で二将を向かい合わせにしたままで、構文上は通り、見た目も問題なく、しかしシャンチーとしては非合法だ。定跡引き分けと私がラベルを付けた局面が二つ、Pikafishは2手詰みを告げた。判定は正しく、私のスナップショットがゴミだった。そしてもう一つ、局面は正しくて私の説明が間違っていたものがある。

教本は高兵三枚が士象全を破ると言い、それは7段目の兵を意味する。同じ三枚を一段下げると勝ちは消える。私はそれを手数の問題、すべてに一手足りないのだと書いた。そうではない。黒の象は盤上の7点にしか立てず、e8からはちょうどc6、g6、c10、g10に届く。6段目の兵三枚のうち二枚は象の点に居座っているのだ。黒はそこで技術を要さず、ただ取ればよい。

15手で詰み

黒が一枚取る

「高兵」が守っているのは象の利きだ。7段目の兵は、どのマスからであれ、対局のどの時点であれ、象に取られることがない。一段下げれば二枚が象の届くマスに立つ。

私の局面のうち六つが壊れていて、検証はその六つすべてを見つけた。教本の判定に壊れていたものは一つもなかった。

最前線

データベースが終盤を決着させるのは、誰かがその全部を計算したからだ。chessdb.cnはシャンチーについて8,705個を構築している。その形を述べた英語のページは存在しないので、ここに記す。

駒数 表の数 局面数
3 4 18,858
4 36 690万
5 169 13億
6 615 1880億
7 1,582 7.0兆
8 2,494 26.1兆
9 2,169 33.9兆
10 1,227 23.6兆
11 368 10.4兆
12 40 1.0兆
13 1 304億

102,230,279,715,348局面。ディスク上で25.56 TiB、変換までの手数の表とDTM(詰みまでの手数)の表を合わせた値だ。表の数は9枚で頂点に達し、11枚を過ぎると急速に減る。内側から見た最前線とはこういう形をしている。全体で最長の勝ち確定は759プライ。馬二枚と士一枚に対し、象二枚・馬・兵という組み合わせだ。

双方13枚、両方の守りが無傷という形は、その表の最後の行の先にある。それが馬砲の項目だ。教本の例勝、その「型通りの勝ち」は、誰も計算していない局面についての判定である。

chessdbが構築した唯一の13枚の表は別の終盤で、しかもそれは本稿の冒頭で出したものだ。士象全を背にした兵三枚が士象全に当たる形である。30,445,843,365局面、シャンチーで解かれた中で最も駒数の多い駒組みで、紅の勝ちは48.00%。この数値は良い局面ではなく駒のあらゆる配置を数えており、それは定跡の判定と勝率が同じ主張ではないのと同じ理由だ。

この二つの数値は、どちらもこのページ冒頭の表の隣に置いておく価値がある。基本終盤とは小さな終盤であり、その大半はすでに完全に解かれている。判定が双方の万全な陣形を語り出した瞬間、それは誰にも計算されたことのない駒組みを語っており、そこでは教本が唯一の情報源のままだ。


32件の項目は、各行に出典と由来を付けてxiangqi-endgame-corpus.tsにある。検証プログラムはverify-xiangqi-endgames.tsで、Pikafishのバイナリを指定すれば、教本の判定とエンジンの読みを並べ、最善手順付きで出力する。--tablebaseを付ければ、答えを持てる大きさのすべての局面について厳密な結果を追加する。

基本終盤は試せる主張であり、それこそがこれらを表ではなく盤に載せる理由のすべてだ。教本が負けと言う側を持って、どれだけ持ちこたえられるか確かめてほしい。32件すべてがMistboard上のスタディで、1件ずつ1章になっていて、局面を起点にエンジンの手順を本線とし、判定を下に書いてある。うまくいかなかったときのために、Pikafishがボットの階段に全力で控えており、全力が学びにならなくなったときのためにFairy-Stockfishの8段階がその下にある。