Michel wrote:Best move is h3. And the fact that it wins depends essentially on zugzwang. So without verification search (or a similar device) an engine can never solve this position even with infinite time.

I was going to say that finding the solution to this problem at all would be an interesting project, because it involves underpromotion to knight and then a fairly precise sequence of moves that I would imagine are hard to find if you don't notice the goal is Nxb3#.

However, before saying that, I fed the position into Jazz, which to my astonishment came back with this:

Code: Select all

```
1 -4947 0 3 1. h3
2 -4909 0 8 1. h4 Qa2
3 -4834 0 25 1. h4 Qa2 2. h5
4 -4838 0 44 1. h4 Qa2 2. h5 Qa1
5 -4763 0 65 1. h4 Qa2 2. h5 Qa1 3. h6
6 -4759 0 90 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2
7 -4653 0 131 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7
8 -3822 0 174 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q
9 -3822 0 222 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q
10 -3818 0 279 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2
11 -3682 0 401 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4
12 -3467 0 553 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qxc4
13 0 0 824 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
14 0 0 1476 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
15 0 0 2272 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
16 0 0 3880 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8 Qa2
17 0 1 6123 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8 Qa2
18 0 1 12589 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8 Qa2
19 0 1 20024 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
20 0 2 36118 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
21 0 3 53674 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
22 0 4 80661 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
23 0 6 112308 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
24 0 9 172269 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
25 0 13 257874 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
26 0 18 374425 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
27 0 24 513327 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
28 0 33 721958 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
29 0 45 994873 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
30 0 62 1437696 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
31 0 84 1985484 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
32 0 118 2827111 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
33 0 164 3935752 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
34 0 246 5674567 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
35 0 357 8142404 1. h4 Qa2 2. h5 Qa1 3. h6 Qa2 4. h7 Qa1 5. h8Q Qa2 6. Qh4 Qa1 7. Qh8
36 15972 544 12029848 1. h3 Qa2 2. h4 Qa1 3. h5 Qa2 4. h6 Qa1 5. h7 Qa2 6. h8N Qa1 7. Nf7 Qa2 8. Ne5 Qa1 9. Nd7 Qa2 10. Nxc5 Qa1 11. Nd7 Qa2 12. Ne5 Qa1 13. Nxc4 Qa2 14. Na5 Qa1 15. Nxb3
```

Now, Jazz' condition for disabling null move for the side to move is "is not able to lose a tempo", which is simply based on the material on the board (more than one piece that can do a triangulation, ie, a king+non-knight, non-pawn). Still, I wouldn't have expected it to find the mate here.

EDIT: in retrospect, the fact that you can easily win some material probably helps get the relevant moves reasonably high up in the move list.