I think the superiority of Rybka in this ending over the other chess programs I have (playing native) can only be explained by embedded rules specific to this ending.
However when I played White against Rybka from position C given here (viz. N6k/2p5/2N2K2/8/8/8/8/8 w - - 0 1), the game went.
1. Ne5 Kg8
2. Ke6 c5
You will notice that on move 2, Rybka moves from an obviously drawn position into an obviously lost position.
I am fairly sure from playing Rybka in similar situations that Rybka "recognises" the position after move 2 to be lost for black. If that be the case, the only explanation for its second move is that it also (erroneously) evaluates the position after move 1 as a loss for black.
I think a likely explanation of this is that the program implements a version of the Troitsky line rule similar to, or actually, one of the Wikipedia versions reported in the above link, without adequately covering the exceptional cases.
The source code for Rybka is not generally available, so it's difficult to check in this particular case. Does anyone know of a similar case where a program which is generally competent in knnkp plays crap in position C and the reason is the implementation of a bad version of the Troitsky line rule?
Note that if a version of the Troitsky line rule reading:
were implemented this would not lead to the play mentioned. I don't think this would introduce any significant performance degredation over incorrect versions either. No code to cover exceptions would be required.If the black pawn stands on or behind the Troitsky line and a white knight stands immediately in front of the pawn and is protected by the other knight, then the position is won for White (and the reverse in colours)
I think the rule could be extended to:
These rules would, of course, not take account of the 50 move rule.If a white knight stands on the same file as and in front of the black pawn no further forward (from the pawn's point of view) than one square beyond the Troitsky line and it is defended by the other knight from a square that is not both on a file adjacent to the pawn and on a rank strictly ahead of the pawn but behind the first knight, then the position is won for White (and the reverse in colours).