数理:大局将棋の数学
形式モデル、エンジンで計算した正確な数、そして Lean 4 による機械検証された形式化へのロードマップ。
要旨 · 1 形式モデル · 2 正確な数 · 3 状態空間 · 4 ゲーム木 · 5 移動力 · 6 階級の代数 · 7 対称性 · 8 計算量 · 9 Lean · 10 AIと解決 · 11 未解決問題 · 参考文献
草稿です。V を付けた数値はすべてゲーム自身のルールエンジンで計算したもので、
godot --headless --path . -s tests/math_stats.gd で再現できます。P は本ページで短く証明した命題、
C は文献からの引用、O は未解決または予想、L は Lean 4 で機械検証する予定の主張です。
Lean による形式化はまだ書かれていません。以下のコード片は、証明するつもりの主張であって、コンパイル済みの定理ではありません。
要旨
大局将棋は知られている中で最大の将棋で、\(36\times 36\) の盤に片側402枚、301種の駒が並びます。駒の動きには、無制限の走り、跳び、二歩動く「エリアムーブ」、 90°曲がる「鉤行」、複数の駒を一度に取る「範囲取り」が含まれます。本ページでは、局面と合法手の形式モデル、初期局面からの正確な数 (初手の合法手は \(97\)、3手後の局面は \(1{,}426{,}099\))、状態空間の上界(\(<10^{3604}\))、ランダムな対局で測った分岐数(\(\approx 320.6\))、 走り駒の移動力の閉じた式、範囲取りの階級の代数を与えます。続いて、Lean 4 で形式化する予定の定理を述べ、AI を強くしてゲームを解けるところまで解くための取り組みを説明し、未解決問題を挙げます。
1. 形式モデル
1.1 盤・手番・駒
1.2 集合値関数としての動き
手番側と相手側の駒がある升の集合を \(\mathrm{Own}_t(\pi)\)、\(\mathrm{Opp}_t(\pi)\) と書き、方向ベクトルは動かす側に合わせて向ける(先手は \(d\mapsto d\)、後手は \(d\mapsto -d\))。 動きは有限の経路 \(p=q_0\to q_1\to\cdots\to q_m\) と取られる升の集合 \(C\) の組である。各駒種の動きの規則は、次の要素の有限和集合である。
局面の合法手の集合 \(\mathrm{Mv}(s)\) は、手番側の各駒の各要素の動きの和集合である。王手の規則はなく、生成された動きがそのまま合法手である。 相手の王類をすべて取った側が勝つ。成りは規則のパラメータで、敵陣の奥11段に入ったとき(既定)、最初に取ったとき、成りなしから選ぶ。
実装では動きは三つ組 \((\text{from},\text{to},\text{via})\) である。\(\text{via}\) が異なる動きは別の動きとして数えるため、以下の数は (from,to) の組の数を上回る。
2. 初期局面からの正確な数
| \(n\) | \(\mathrm{perft}(s_0,n)\) | 前の値との比 |
|---|---|---|
| 1 | 97 | - |
| 2 | 9,393 | 96.8 |
| 3 | 1,426,099 | 151.8 |
V 初手の合法手は先手に \(97\) 通りある。\(\mathrm{perft}(s_0,2)=9393\) は \(97^2=9409\) より \(16\) 小さい。後手の応手の数は先手の初手によってわずかに変わる(平均は \(9393/97\approx96.8\))。
Lean での主張:L theorem perft_one : (moves init).card = 97。同様に perft init 2 = 9393、perft init 3 = 1426099。まず decide / native_decide で確認し、カーネルが現実的な時間で許す場合にはコンパイラを使わない証明に置き換える(第9節)。
3. 状態空間の大きさ
どちらの数も、他のゲームでよく引用される値(Allis, 1994 の表による):チェス \(\approx10^{46}\)、将棋 \(\approx10^{71}\)、囲碁 \(\approx10^{172}\) の局面数 C をはるかに上回る。 到達可能な局面は駒が最大804枚で、取りは不可逆であるため、はるかに良い上界があるはずだが、どのような上界でも全探索の対象にはならない天文学的な大きさである。
3.1 終盤テーブルベースは手が届く
王と他の1枚 対 王だけの配置数は \(1296\cdot1295\cdot1294\cdot 2=4,343,492,160\)(3つの異なる駒の順序付き配置に手番の2通りを掛けたもの)P。 約 \(4.3\times10^{9}\) 状態であり、このような終盤の全後退解析は現実的な計算で、すべての駒種について正確な勝ちまでの手数表が得られる。O まだ計算していない。
4. 分岐数とゲーム木の大きさ
ランダムな対局(固定シードで30局、最大120手)の局面 3,600 個で、合法手の数を測った V:
| 手数 | 0–19 | 20–39 | 40–59 | 60–79 | 80–99 | 100–119 |
|---|---|---|---|---|---|---|
| 合法手の平均 | 203.0 | 267.8 | 307.4 | 349.8 | 382.9 | 412.9 |
全体の平均は \(\bar b\approx 320.6\)、最大は 608 である。手数とともに増えるのは、駒が取られて盤が開け、走り駒の利きが通るようになるためである。 (ランダムな指し方は強い指し方を代表しないので、\(\bar b\) は大まかな目安であり、強者の対局の推定値ではない。)
Allis にならい、ゲーム木の複雑さの推定は平均の対局の長さ \(d\) 手に対して \(\bar b^{\,d}\) とする。実際の対局の長さは不明なので、表にする:
| \(d\)(手) | \(\log_{10}\bar b^{\,d}\) |
|---|---|
| 100 | 251 |
| 200 | 501 |
| 400 | 1002 |
| 800 | 2005 |
比較として、Allis はチェス \(\approx10^{123}\)、将棋 \(10^{226}\)、囲碁 \(10^{360}\) を挙げている C。200手の短い対局でも、この3つをすべて超える。
5. 移動力と駒の価値
V 301 種について、最小 \(\mu=1\)、中央値 \(43\)、平均 \(70.0\)、最大 \(2,520\)。最大は Hook mover で、曲がる経路が数を増やす:\(\mu\) は動き \((\text{from},\text{to},\text{via})\) を数えるため、複数の曲がり升から届く1つの行き先は複数回数えられる。 (異なる行き先の升の数はそれより小さい。第9節 M6 を参照。)
したがって、この盤でのチェスのクイーン(飛車+角の動き)の平均移動力は \(\approx 70+46.02=116.02\) である。飛車と角の平均移動力の比は \(70/46.02\approx1.52\) で、チェスの古典的な評価 \(5:3.25\approx1.54\) に近い。 示唆的ではあるが、障害物を無視しているので、駒の価値の導出ではない。障害物の密度 \(\delta\) をランダムに与え、走りの長さが幾何分布に従うとする占有を考慮した移動力のモデルが、自然な改良である。O
6. 範囲取りと階級の代数
Lean での予定の形。
-- スケッチ(まだコンパイルしていない)
inductive Side | black | white
structure Pos where
board : Fin 36 → Fin 36 → Option (Kind × Side)
turn : Side
def rangeCapturePassed (π : Pos) (p : Fin 36 × Fin 36) (d : Int × Int) (r : Nat) : List (Fin 36 × Fin 36) := ...
theorem rangeCapture_rank_lt {π p d r c} (hc : c ∈ captured (rangeCapture π p d r)) :
rank (kindAt π c) < r := by ...
theorem royal_untouchable {π p d r c} (hc : c ∈ captured (rangeCapture π p d r)) :
¬ isRoyal (kindAt π c) := by ...
theorem rangeCapture_card_le {π p d r} : (captured (rangeCapture π p d r)).length ≤ 35 := by ...
7. 対称性と不変量
初期配置は左右対称ではない(12段のうち左右対称に読めるのは2段だけ)V。したがって、初期局面には利用できる鏡映対称性はない。
8. 計算量の文脈
\(n\times n\) への一般化では、チェスは EXPTIME 完全(Fraenkel & Lichtenstein, 1981)、将棋は EXPTIME 完全(Adachi, Kamekawa & Iwata, 1987)、日本ルールの囲碁も EXPTIME 完全(Robson, 1983)である C。 大局将棋は有限の1つの例なので、漸近的な計算量クラスは直接には当てはまらない。\(N\) を大きくし、配置を相応に拡大して、上記の動きの要素の固定された集まりで定義したゲームの族も EXPTIME 完全であろうと予想する。 自然な道筋は、一般化将棋の局面からの帰着である(将棋のすべての駒は大局将棋の要素だからである)。O 証明はない。
無限の対局。 実装されている規則には千日手や手数制限がないので、ゲームのグラフには閉路があり、局面の値は通常の後退解析の不動点で定義される(有限手数での勝ち・負け、それ以外は無限に続く引き分け)。
Lean で形式化するには、帰納的述語 WinIn : Nat → Pos → Side → Prop と、負けを避け続けることの余帰納的な概念が必要である。L
9. Lean 4 での機械検証された形式化のロードマップ
上のモデルを Lean 4(de Moura & Ullrich, 2021)で構築し、本ページの V と P の主張をすべてカーネルが検証した定理にし、数え上げの主張をゲームが実行するのと同じデータに結びつけたい。予定のマイルストーン:
- M1 データ。 301種(ベツァ記法による動きの記述)を Lean の構造体として取り込み、生成した要素の表がエンジンの使うものと等しいことを証明する。
- M2 局面と動き。
Pos、各要素の動きの関数(走り、跳び、跳び越え走り、鉤行、エリア、範囲取り)、moves : Pos → Finset Moveを定義し、健全性(すべての動きは盤内にあり、範囲取り以外では味方を取らず、範囲取りで王類を取らない)を証明する。 - M3 Perft。
perft init 1 = 97、perft init 2 = 9393をdecideで;perft init 3 = 1426099は素朴なmovesからの洗練証明をもつ、検証された効率的な実装で。native_decideを使わない \(n=3\) のカーネル検証は大きな計算(葉が約 \(1.4\times10^{6}\))で、特注の反射的証明が必要になるかもしれない。 - M4 不変量。 第7節の (i)–(v)。
- M5 階級の代数。 補題1・2、そして範囲取りが3枚以上を取れる唯一の動きの要素であるという主張。
- M6 閉じた式。 走り駒の平均移動力(命題3・4)を、任意の方向集合 \(D\subseteq\{-1,0,1\}^2\) へ一般化し、\(N=8\) と \(N=36\) では
decideで確認する。 - M7 対称性。 命題5とその結果としての結果クラスへの帰結。
- M8 ゲーム理論。 後退帰納による結果の述語、小さな終盤ソルバー(王+1枚 対 王)の正しさ、各駒種についてテーブルベースの値が \(4.3\times10^{9}\) の範囲で計算できるという主張。
式を超えて、Lean は資料の細かい点を浮かび上がらせるだろう。残された規則の記述が食い違う箇所(成り、鉤行、エリアムーブの端の場合)では、形式的な定義が選択を迫るので、選択はそれぞれラベル付きの規則パラメータとして公開する。
10. AI を賢くし、ゲームを解く
現在の AI。 コンピューターの相手は、キラーと履歴による手の並べ替え、最高難度での静止探索、持ち時間(ふつう 1.5 秒、むずかしい 3 秒)をもつ反復深化のアルファベータ探索である。評価は、第5節の移動力による価値 \(v(k)=10+2\mu(k,c)\) で重みづけした駒の損得に、位置の項(前進と敵の王類への圧力)を加えたものである。 強くはない:分岐数が \(\approx 320.6\)(第4節)なので、一定時間の探索が届くのは数手先にすぎない。
目標。 AI を大幅に賢くし、数学が許す限り、ゲームを解くことを目指している。Allis にならい、ゲームは、初期局面の値がわかっているとき超弱解決、初期局面からその値を達成する戦略がわかっているとき弱解決、すべての局面の値がわかっているとき強解決されたという。 ここで強解決は不可能である:第3節は状態空間を \(10^{3604}\) でしか抑えておらず、両軍の初期配置の数だけでも \(\approx10^{2181}\) である。ゲーム全体の弱解決・超弱解決も、今日の計算能力による力まかせの探索をはるかに超えている。そこで計画は段階的である:
- 探索の工学。 Zobrist ハッシュによる置換表、より良い手の並べ替え、ヌルムーブと後ろの手の削減、より速い合法手生成(現在の生成器は速度ではなく明快さのために書かれており、\(\mathrm{perft}(s_0,3)\) の \(1.4\times10^6\) の葉を列挙するのに約20秒かかる)。すべての最適化は、第2節の perft の基準値と照合する。
- 学習による評価。 手で決めた移動力の価値を、移動力モデルを事前分布とした自己対戦から学習した価値関数に置き換え、モンテカルロ木探索または方策ネットワークで、\(\approx 320.6\) 手のうち有望な数百手に探索を絞る。
- 序盤・中盤の知識。 自己対戦から作る定跡と、各版の前の版に対する強さの測定(そのための AI 対 AI の対戦用ハーネスはすでにある)。
- 終盤テーブルベース。 王+1枚 対 王(\(4.3\times10^{9}\) 状態、第3.1節)から始め、各側2〜3枚の局面へと進める、小さな駒数の終盤の正確な後退解析。これらは強解決された部分ゲームで、探索の葉に正確な値を与える。
- 規則の縮小版の解決。 縮小した配置による小さな盤(たとえば \(N=8,\dots,12\))の完全な解決。先手有利や引き分けやすさが大きさにどう依存するかを知り、ゲーム全体についての証拠とする。
- 検証されたソルバー。 計算がゲーム理論的な値(テーブルベースや縮小盤の解)を主張する場合、Lean で検査される証明オブジェクトで保証し(第9節 M8)、公表された結果が「プログラムがそう言った」だけにならないようにする。
大局将棋の完全な解決は、可能だとしても長いあいだ手の届かないままだと予想している。この取り組みの目的は、AI を測定可能な形で強くし、解ける断片のすべてについて正確な結果を確立し、境界がどこにあるかを正確に述べることである。O
11. 未解決問題
- 先手有利か。(チェスや将棋でも未解決であり、ここでは探索で決められるはずもない。)O
- 強者の対局での対局の長さの経験分布は。これが実際のゲーム木の大きさを決める(第4節)。
- 小さな駒数の到達可能な局面数の正確な値(第3.1節)と、各駒種について 王+1枚 対 王 での最長の強制勝ち。
- 多重度 \(m_k\) による到達可能な局面数の厳密な組合せ論的上界。
- 拡大した族の計算量(第8節)。
- 範囲取りの将に、取りだけの手順に閉路がないことを示す美しいポテンシャル関数はあるか。取りでは駒の数が減るので自明だが、取りと取りの間の取らない手の数が有界かという、より強い問題は未解決である。
参考文献
- H. Adachi, H. Kamekawa and S. Iwata. Shogi on \(n\times n\) board is complete in exponential time. Trans. IEICE J70-D(10):1843–1852, 1987(日本語)。
- L. V. Allis. Searching for Solutions in Games and Artificial Intelligence. PhD thesis, University of Limburg, 1994.
- R. Betza. Chess with different armies and the “funny notation” for piece moves. Chess Variant Pages, 1996.
- L. de Moura and S. Ullrich. The Lean 4 theorem prover and programming language. CADE-28, 2021.
- A. S. Fraenkel and D. Lichtenstein. Computing a perfect strategy for \(n\times n\) chess requires time exponential in \(n\). J. Combin. Theory Ser. A 31(2):199–214, 1981.
- G. Hodges. Ten Shogi Variants. 2002.
- J. M. Robson. The complexity of Go. Proc. IFIP Congress, 1983.
- C. E. Shannon. Programming a computer for playing chess. Philosophical Magazine 41(314):256–275, 1950.
- J. Tromp. Counting legal Go positions (with G. Farnebäck), 2016、およびチェスの局面数についての推定。
- “Taikyoku shogi”, English Wikipedia (CC BY-SA 4.0):ここで使った駒の一覧と初期配置の出典。
エンジン、データ、V の数値を生成するスクリプトはプロジェクトのリポジトリにあり、本ページの数値は data/math_stats.json から python3 tools/build_math.py で再生成される。
誤りの指摘や Lean の開発への協力のお申し出は hello@taikyokushogi.com まで。日本語版は機械で作成しており、専門家による校正をまだ受けていない。