indian.cql
// Download indian.cql// PGN output when run on sample.pgn
/*Indian theme: White moves a line piece over a critical square Then white moves another piece to the critical square without checking, preventing what would be a stalemate without the interference Later white moves the interfering piece away */ cql(input heijden.pgn quiet result 1-0) /* A "virtual stalemate" is not a stalemate, but would be one if the piece on the argument 'critical' did not block the line piece on the square 'rear' */ function virtualstalemate(rear critical){ btm not check not stalemate kingfield= .attackedby k square all x in kingfield{ a & x or A attacks x or xray (rear critical x) } not xray(rear critical k) square all x in a & ~k{ not move legal from x or xray (rear critical x k) } {square x in [_A]&kingfield xray (rear critical x)} or square x in a xray (rear critical x k) } piece criticalpiece=move from [RBQ] dest=move to . square criticalsquare in between(criticalpiece dest) piece interferer in [RBNP]&~criticalpiece line-->move from criticalpiece to dest comment ("CQL critical move by " criticalpiece " over " criticalsquare) -->not move from criticalpiece* -->move from interferer to criticalsquare comment ("interfering move to " criticalsquare) -->virtualstalemate(criticalpiece criticalsquare) -->not move from (interferer | criticalpiece)* -->move from interferer comment ("interferer moves away") -->criticalpiece attacks criticalsquare