idealmate.cql

; idealmate.cql can be downloaded here.
; This search for ideal mate is based on modelmate.cql,
; but adds the requirement that every non-King black piece participates, either
; by blocking the King's escape squares or by blocking a black's piece attack on
; a checker or by blocking a black's piece attack on a square between a checker and the black King.
; Once again, note the addition of the parentheses around the square alls.
; However, this might include some non-ideal mates as in modelmate.cql.
; Not yet 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))}

square all $friend in [rnbpqp]
  attack (k $friend)
  or square $checker in A
    attack ($checker k)
     ray attack (a
                 $friend
		 $checker or
		 between ($checker k))