要点

  • 英語版と中国語版のWikipedia記事から、シャンチーの基本終盤の判定32件を局面に組み立て、Pikafishとchessdb.cnのテーブルベースでそれぞれ検証した。32件すべてがスタディで指せる。
  • 教本は持ちこたえた。32件のうち31件がエンジンと一致し、残る1件も同じ方向を示している。壊れていた局面は6つ、すべて私の作ったものだった。
  • 3行は英語版が落としている配置で結果が決まる。車対馬砲は、砲が自陣の将の真後ろにいるときだけ引き分けになる。1点横にずれれば12手詰めだ。
  • データベースは8,705の終盤、102兆局面を収録している。それを超えて双方の守備が揃った局面では、いまも教本だけが情報源だ。

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

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

そのうち32件の判定を以下に挙げる。それぞれ局面に組み立てて二重に検証しており、それぞれ検証したエンジンを相手に実際に指し進められる盤になっている。スタディはMistboardにある。判定ごとに1章だ。

基本:士象全に勝てるのは何か

車はシャンチー最強の駒で、名前が違うだけのルークだ。標準的な士象全は守備駒4枚をすべて残す。将は自陣、士が2枚、象が2枚で、砲に砲台として使われないように士2枚が将の真正面に並ぶ配置だ。

裸の車だけでこの守備に当たると引き分けで、いまやそれは証明済みだ。データベースは引き分けと答え、Pikafishの評価値はちょうど0になる。

兵3枚なら勝てる。15手の必至だ。

馬2枚でも勝てる。25手だ。

引き分け

15手詰め

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

どの駒価値表を見ても、車は兵3枚より価値が高く、馬2枚よりも高い。ところがこの終盤では、そのどちらよりも価値が低い。兵は後退できない。弱点のように聞こえるが、それがそのまま勝つ理由になる。九宮に迫る3枚の兵は押し戻せず、守備側にはそれらを交換して減らす手段がない。

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

引き分け

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

これらの終盤を決めるのは配置であり、英語版の節にはそれをはっきり示す図が一組ある。

車単騎対馬と象2枚。守備が要塞の形(馬がe8、象がi8とg6)なら持ちこたえ、データベースもそれを裏づける。そのg6の象をg10に動かすと紅の勝ちで、1.Rb7から始まる。

引き分け

紅の勝ち

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

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

勝つのに必要なもの

32件の判定のうち3件は、英語版が伝えていない指示で結果が決まる。いずれも配置が結果を決めており、それを述べた一文がちょうど落とされている。

車対馬砲、引き分けはたった1マス

英語版の節はこう述べる。「守備駒なしの車対軽駒2枚:引き分けだが、良い守備位置を要する。」

私はそれを8通り作った。Pikafishは8つすべてで必至を見つけ、最も粘れる形でも15手だった。8つ中8つは探索の見間違いではないので、この行は異論ありとして書き留めて先に進んだ。それが判断の誤りだった。

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

引き分け

12手詰め

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

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

車自身の位置はまったく関係ないと判明した。a10、e5、i1、a1から確認したが、どれも引き分けのままだ。だからこそこれは幸運な配置ではなく要塞なのだ。馬には教本の「将からできるだけ遠く」よりも緩い規則が当てはまる。車の一手で狙えるマスを避けていればよい。b7、c7、d7、e7、d6、d4、d2なら持ちこたえる。車と同じ段にあるd5では、車がそのまま取って5手で詰む。

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

車砲対車、「中央の列」はマスではない

英語版の節はこう述べる。「車+砲は、守備側の車が中央の列を占めている限り、車単騎に勝てない。」

これは検証できる規則のように読める。私の局面はそれを満たしていた。黒の車は中央の列の自陣、自分の将の真正面にいる。Pikafishは28手で詰ます。

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

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

引き分け

紅の勝ち

どちらも守備側の車は中央の列を保っている。引き分けになるのは下側だけだ。最後の詰みは海底撈月で、列の最下段で決まる。

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

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

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

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

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

13枚だ。chessdbはその大きさの表を1つだけ構築しているが、それは別の13枚の組み合わせであり、この局面を実際に照会しても未知と返ってくる。しかし探索だけが残るわけではない。強い側に士を1枚残す縮約であるKANCKAABBNの10枚まで落とすと、表が存在する。24,251,768,055局面で、紅の勝ちは85.48%だ。この判定を支えているのは深さではなく、この縮約の階段である。

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

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

次に、Pikafishに探索深さ32で自己対局させてみた。紅は33手のあいだ、双方まったく駒を取らずに駒組みを進め、34手目に士を取り、その4手後に2枚目の士を取り、そのまま押し切って56手目、局面が10枚に落ちてデータベースの範囲に戻ってきた。黒の手番で、合法手はすべて負けだった。

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

シャンチーはもう一つの扉も閉ざしており、そちらはチェスプレイヤーにはより痛い。千日手(連続王手)はここでは負けだ。王手をかけ続ける側が手を変えなければ負けになる。チェスでは負け局面を救う標準手段なので、その直感は役に立たないどころか、勝ち星を相手に渡してしまう。この二つの規則が、本稿のあらゆる終盤を上下から挟んでいる。守備側は王手で逃げ切れず、攻め側は永遠に絞り続けられない。どちらもチェスに訳し込む相手がなく、まさにそのために英語の要約から落ちるのだ。

それでもこの行の証明にはならない。黒もPikafishだったし、もっと早い段階でより良い守りがあれば持ちこたえるかもしれない。それを排除するものは何もない。決着がついたのは、かつて私の信頼に依っていた部分だ。最後の勝ちは、エンジンが探索深さ32で宣言して私が信じた詰みではなく、証明として負けだと分かっている局面である。だからエンジンの手順は、エンジン自身の意見ではなく厳密な何かに帰着する。エンジンは依然として、初期局面から教本の判定を確認することを拒む。だが今は、確実な局面へと指し進めてくれる。34手の絞りがどれほど薄氷かを感じたければ、守備側を持つべき行はこれで、引き分け側の半分は駒1枚の違いだ。

未解決

13枚、どのテーブルベースもカバーしていない行だ。黒は駒を取られずに60手生き延びる必要がある。

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

つまりその一文の攻め側にある「守備駒4枚」は実質的な働きをしており、効いている数は1枚だ。士1枚が勝ちを担い、象はほぼ無償である。表の存在を知る前に、私はまずPikafishで探索深さ30の同じ階段を回してそこに到達し、順序は同じ結果になった。

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

六つの語、二つの箱

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

判定 主張する内容 本稿の分類
必勝 この駒組みのあらゆる局面から勝てる 勝ち
例勝 標準的な技術で勝てる 勝ち
巧勝 特定の局面からのみ勝てる 勝ち
難勝 勝ちにくい。引き分けと同じではない 勝ち または 引き分け
例和 標準的な技術で引き分けられる 引き分け
必和 あらゆる局面から引き分けられる 引き分け

六つのうち五つは翻訳を生き延びる。六つ目はどちらかに寄せざるを得ず、上の3行のうち2つがそこに乗っている。

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

二つ目の行は逆方向から同じ段に着地する。中国語の表は車砲対車単騎を勝ちまたは引き分け(胜/和)と挙げ、それからどちらがどちらかに一段落を費やす。英語はそのきれいな半分だけを残して段落を落とし、その段落こそが肝心な部分だった。

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

どの程度確かに分かっているのか

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

仕分けには2段階かかった。

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

探索深さ26、判定32件  
エンジンが同意 29
教本は引き分けと言うが、エンジンは必勝を見つける 2
教本は勝ちと言うが、エンジンは決めきれない 1

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

上の3行のうち2つは、いまやデータベースが裏づける守備配置を伴い、どちらの撤回も教本ではなく私のものだった。総ざらいの結果は、32件のうち31件がPikafishと一致し、1件は同じ方向に傾く。32局面のうち27局面がデータベースに収まる大きさで、その27件すべてが厳密だ。

私が作った局面で検査が捕らえたもの

検査が捕らえた残りは私のミスだった。二つの将を開いた列で向かい合わせに残した非合法局面が3つ。解析は通るし見た目も問題ないが、合法なシャンチーではない。定跡引き分けと私がラベルを付けた局面のうち2つは、Pikafishが2手詰めを宣言した。判定は正しく、私のスナップショットがゴミだったのだ。そしてもう1つは、局面は問題なく、私の説明が間違っていた。

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

15手詰め

黒が1枚取る

「高兵」が守っているのは象の利きだ。7段目の兵は、どのマスからも、対局のどの時点でも象に取られることがない。1段下げると、うち2枚が象の届くマスに立ってしまう。

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

最前線

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

駒数 表の数 局面数
3 4 18,858
4 36 690万
5 169 13億
6 615 1,880億
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局面。変換までの距離とDTM(詰みまでの手数)の表を合わせて、ディスク上で25.56 TiB。数は9枚でピークに達し、11枚を過ぎると急速に落ちる。内側から見た最前線はそういう姿だ。全体で最長の必勝は759手に及ぶ。馬2枚と士1枚が、象2枚・馬1枚・兵1枚に対する終盤だ。

片側13枚で双方の守備が揃った局面は、その表の最終行の先にある。それが馬砲の行だ。教本の例勝、その「標準的な勝ち」は、誰も計算していない局面についての判定なのだ。

chessdbが構築した唯一の13枚の表は別の終盤で、それは本稿の冒頭で扱ったものだ。士象全を後ろに置いた兵3枚が、士象全に当たる終盤である。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段階が用意されている。