modelmate.cql
; modelmate.cql can be downloaded
here.
; This search for model mate checks both that
; every empty square in the Black King's field is
; guarded ("controlled", see notes to puremate-1) at most once, and checks that every
; Black piece in the King's field is not attacked by a White piece,
; unless that piece is also pinned, and also requires that
; every non-pawn, non-King White piece either attack the black King,
; or an empty square in its field, or is pinning a black piece, or is interfering
; with a black piece that could otherwise break a check.
; As before, we don't check that the pins are actually necessary for the mate.
; This is based on puremate-2.cql.
; As in the comments to that file, note that both sets of parentheses are required.
; At this time, the output of this file has not been verified.
cql( input heijden.pgn )
mate btm
{square all $empty in attack (k _)
attack 0 1 (A $empty)
attack 0 (A $empty) or
ray 0 attack (A k $empty)
}
{square all $selfblocker in attack (k a)
attack 0 (A $selfblocker)
or ray attack (A $selfblocker k)}
square all $attacker in [RNBQ]
attack ($attacker k)
or attack ($attacker attack (k _))
or ray attack ($attacker a k)
or square $checker in A
attack ($checker k)
square $defender in [rbq]
ray attack ($defender
$attacker
$checker or between($checker k))