Proof-number search


Proof-number search is a game tree search algorithm invented by Victor Allis, with applications mostly in endgame solvers, but also for sub-goals during games.
Using a binary goal, game trees of two-person perfect-information games can be mapped to an and–or tree. Maximizing nodes become OR-nodes, minimizing nodes are mapped to AND-nodes. For all nodes proof and disproof numbers are stored, and updated during the search.
To each node of the partially expanded game tree the proof number and
disproof number are associated. A proof number represents the minimum number of leaf
nodes which have to be proved in order to prove the node. Analogously, a disproof
number represents the minimum number of leaves which have to be disproved
in order to disprove the node. Because the goal of the tree is to prove a forced
win, winning nodes are regarded as proved. Therefore, they have proof number
0 and disproof number ∞. Lost or drawn nodes are regarded as
disproved. They have proof number ∞ and disproof number
0. Unknown leaf nodes have a proof and disproof number of unity.
The proof number of an internal AND node is equal to the sum of
its children's proof numbers, since to prove an AND node all the children have
to be proved. The disproof number of an AND node is equal to the minimum of
its children's disproof numbers. The disproof number of an internal OR node is
equal to the sum of its children's disproof numbers, since to disprove an OR node
all the children have to be disproved. Its proof number is equal to the minimum
of its children's proof numbers.
The procedure of selecting the most-proving node
to expand is the following. We start at the root. Then, at each OR node the child
with the lowest proof number is selected as successor, and at each AND node the
child with the lowest disproof number is selected as successor. Finally, when a
leaf node is reached, it is expanded and its children are evaluated.
The proof and disproof numbers represent lower bounds on the number of nodes to be evaluated to prove certain nodes. By always selecting the most proving node to expand, an efficient search is generated.
Some variants of proof number search like dfPN, PN2, PDS-PN have been developed to address the quite big memory
requirements of the algorithm.