bob wrote:OK, didn't read it like that "fail-high" is often used incorrectly and I just ignored it completely. But let's figure this out to be sure I follow:
After Qxf4 black is going to try the recapture and since he won't see the mate, he will fail high being over a rook up, so now he extends and researches the same tree one ply deeper? But what if this is a Qxf4 Qxf4 and now material is equal, and qxf4 does not fail high, but if you look a ply deeper you get mated? Here you would not look a ply deeper.
The simplicity of the null-move mate threat is that if you make a null-move anywhere (and I try null moves at _every_ node, and you get mated, then something is definitely "up" about the position... It would seem that restricting it as above might miss things. I'd rathere extend it always (much simpler, no re-search needed) to keep the code simple and not miss threats that being cuter might miss...
Problem is that you will extend a lot of cases where one side is significantly ahead, opponent nullmoves, you say, oh I can checkmate let's extend, wich will just burn nodes.
To Steve: In pv I will always extend.
In XiniX I use an extra safeguard for burning nodes: If the failhigh move is capturing the checkmating piece, it will not extend. (get that for free in XiniX's eval)
I got the idea from Deep Blue: a singular move can only be singular of it fails high. This goes for nullmove threath extensions, singular replies and more...
Side effects: Your hashtable statistics (first move fail high percentage) will go crazy, reaching 95% easily.
Tony