Solving Go under Positional Superko: Sound Proof Transfer and New Board Values
Organizations: Zuse Institute Berlin Berlin, Germany
Abstract
Positional superko (PSK) forbids recreating any earlier whole-board position. It is part of the Chinese rules as written and of the rules used in computer Go. Yet almost all solved Go boards were computed under a simpler basic-ko rule set. PSK makes solving hard: legality depends on the whole game history, and this breaks the three tools that make solving tractable, namely transposition tables (the graph-history interaction problem), static life-and-death recognition, and safe move pruning. We present Sanko, a parallel depth-first proof-number solver that restores all three soundly. Its core is a cheap proof-transfer theorem: a stored proof stays valid on a new path unless a board that the proof's winner must create has already occurred. Sanko proves 5x5 Go in 16 minutes with six threads, where the previous state of the art needed 5.25 hours with six processes, and in about a minute and a half on one 192-thread machine. It also establishes the first PSK values of twenty-three further boards, eleven of which were unsolved under any rules. Superko changes game-theoretic values: 4x7, a full-board win under basic ko, is worth only 12 points under PSK, and we pinpoint the move at which the previously published optimal line fails. Unlike earlier solutions of empty Go boards, we release the solver source together with the command line and outcome of every run behind our values and measurements, so that all reported values can be reproduced.
Figures & tables
| Solver | CPU, parallelism | Time | Nodes |
|---|---|---|---|
| , komi 24.5 (Black wins) | |||
| EWS | i7-10510U, 6 proc. | 5.25 h | 2.61 B |
| Sanko | EPYC 9475F, 6 threads | 15.7 min | 1.38 B |
| Sanko | EPYC 9475F, 14 threads | 7.4 min | 1.54 B |
| Sanko | EPYC 9475F, 192 threads | 1.3–1.6 min | 2.0–2.5 B |
| , komi 1.5 (Black wins), one thread | |||
| Board | PSK | Basic ko | Black proof | White proof | ||||||||
| komi | exp. | time | komi | exp. | time | |||||||
| 1 | 1 | 0.5 | 25 | k | 10 | s | 1.5 | 0.12 | M | 10 | s | |
| 2 | 2 | 1.5 | 35 | k | 10 | s | 2.5 | 0.34 | M | 10 | s | |
| 2 | 2 | 1.5 | 1.5 | B | 30 | s | 2.5 | 26 | M | 10 | s | |
| 0 | – | 0.5 | 0.41 | M | 10 | s | 0.5 | 88 | M | 11 | s | |
| 1 | – | 0.5 | 4.1 | M | 10 | s | 1.5 | 0.57 | B | 17 | s | |
| Variant (problem) | Effect |
|---|---|
| No proof transfer ( ) | 5,952 |
| No region solver | 2.33 (1.02–4.61) |
| No interior region moves | 1.70 (1.00–2.60) |
| Eye-space prior instead of the learned prior | 3.19 (2.15–4.43) |
| No prior (uniform initial numbers) | 4.72 (3.40–6.02) |
| 1 thread vs. 192 threads ( ) | 42 time |
| Source | Per event | Largest run | Campaign |
|---|---|---|---|
| Twin signatures | |||
| Mixed slot | |||
| One 64-bit signature ∗ | |||
| Silent CPU errors † | 114 FIT | ||
| Defective cores ‡ |
Appendix figures & tables8 assets
Supplementary material from the paper’s appendix.
Appendix
| White reply | Black’s answer | Expansions | Time |
|---|---|---|---|
| pass | pass | 192 | 10 s |
| A5 | B4 | 1.8 B | 74 s |
| B5 | D4 | 2.3 B | 89 s |
| C5 | B4 | 2.0 B | 78 s |
| B4 | D2 | 1.8 B | 67 s |
| C4 | B4 | 1.3 B | 53 s |
| Black’s first move | White’s reply | Expansions | Time |
|---|---|---|---|
| pass | pass | 192 | 50 s |
| A3 | D3 | 60.1 B | 42 min |
| A5 | B3 | 87.4 B | 1.1 h |
| A4 | E3 | 100 B | 1.2 h |
| B5 | C3 | 146 B | 1.7 h |
| C5 | C3 | 166 B | 2.0 h |
| First move | Reply | Expansions | Time |
|---|---|---|---|
| pass | pass | 192 | 11 s |
| A3 | D2 | 9.4 B | 7 min |
| B3 | H2 | 10.4 B | 8 min |
| C3 | G2 | 15.3 B | 11 min |
| D3 | H2 | 10.6 B | 8 min |
| E3 | G2 | 10.9 B | 8 min |
| Komi | Run | Result | Exp. |
|---|---|---|---|
| 27.5 | White-pruned, one-liberty convention | White | 14.6 B |
| 23.5 | White-pruned, after Black D3 | White (C2) | 13.6 B |
| 12.5 | unpruned | White | 16.4 B |
| 11.5 | unpruned | Black (D3) | 86.6 B |
| 11.5 | Black-pruned | Black (D3) | 65.6 B |
| Value | Black’s move | Black proof | White proof | |
|---|---|---|---|---|
| 4 | 4 | 2nd point | 207 | (full) |
| 5 | 0 | 2nd | 421 | 493 |
| 6 | 1 | 2nd | 1,148 | 1,109 |
| 7 | 2 | 4th | 461 | 3,334 |
| 8 | 3 | 2nd | 8,177 | 19,937 |
| 9 | 0 | 2nd | 5,134 | 20,477 |
| Position | Komi | Result | Exp. |
|---|---|---|---|
| after move 31 | 27.5 | Black | 9,318 |
| after move 26 | 27.5 | Black (C1) | 134,266 |
| after move 24 | 27.5 | unknown | 9,660 |
| after move 25 | 27.5 | White (G2) | 889 |
| after 25, G2 | 2.5 | Black (A2) | 436 |
| after 25, G2 | 3.5 | White | 495 |
| Check | Result |
|---|---|
| Selftests, 7 small boards, 3 oracle modes | 10,808 positions, 0 mismatches |
| Threshold probes, 9 boards up to | 31,622 probes, 0 counterexamples |
| Brute-force minimax with an exact memo against shared-table solves ( , , ) | 7,538 positions, 0 mismatches |
| Large-board selftests ( , , , , , , , , , three solver modes) | 28,033 positions, 0 mismatches |
| Proof entries rejected by the second hash (path-specific collisions or mixed writes) | up to 552 per run ( ) |
| Work | Result | Public artifact |
|---|---|---|
| MIGOS van der Werf et al. [2003] | , basic ko | none known |
| MIGOS van der Werf and Winands [2009] | most boards up to 30 points, basic ko | none known, selected variations in the paper |
| Positional Linear Go Weninger and Hayward [2017] | , , PSK | none known |
| EWS Randall et al. [2024] | , PSK | minimal example 2 2 2 https://github.com/davidowe/EWS-Python that solves up to , solver not released |
| Killall-Go Wu et al. [2023] | openings | solver and solution trees, different problem |
| Sanko (this work) | Table 2 | solver source, command line and outcome of every run |