typefilter takes one argument, a set filter. It returns a number that represents the type of the piece on that square:
x=type a1 y=type h1 x==y
If its argument set filter does not represent a set that has exactly one element, the
type filter does not match the position.
Otherwise, suppose s is the square represented by the argument set filter. The numeric values of the piece types are given by the following table:
typefilter is used in parallelpaths.cql and babson.cql .
The babson.cql file looks for studies that are (partially) fulfill the Babson task. In the Babson task, a black pawn can promote to any of the 4 possible piece types on its next move: queen, rook, knight, bishop. Whichever piece it promotes to, white's only refutation is to promote to exactly the same piece type. For example, if Black promotes to a rook, then White's only refutation is to promote to a rook.
The file finds the following position:
(found from CQL file: babson.cql)
Here, Black's natural move is
7...e:d1Q. But that fails tactically to
8. e8Q Qd4+ 9. c4!
Thus, Black might instead promote to a rook with
7...e:d1R. Here if White tries the earlier line, Black draws after
8. e8Q? Rd4+ 9. c4 Rb4+! 10. a:b4 stalemate. White prevents this idea with
8. e8R! which wins.
Finally, if Black tries
7...e:d1N then White's early ideas of
8. e8Q and
8. e8R fail to
8...N:b2#. But now
8. e8N! is White's (only) winning reply.
Thus, if Black promotes to a rook, White must promote to a rook; if Black promotes to a knight, white must promote to a knight; if Black promotes to a queen, White must promote to a queen.
In babson.cql, the Babson condition that the White and Black pawns promote to the same type is expressed by
type pawn==Piecetype ... type Pawn==PieceType
This particular CQL file might seem a bit convoluted, since it relies on some of the more esoteric features of CQL, so we will briefly go over them.
As above, the main work is done by the function named
babsonpair. This function relies on three global variables:
Pawn, the particular white pawn being examined;
pawn, the particular black pawn being examined, and
numberbabsons, the number of Babson pairs found so far using this
Pawn pair. A "Babson pair" is a pair of consecutive moves by a black and then a white pawn, each promoting to the same type.
The Babson pair condition itself is verified by the line filter. Each
--> after the
line keyword starts a new move, with the first
--> representing the current position. So the filter after the first
--> means that in the current position, the variable named
pawn represents a piece that promote.
After that promotion, the filter after the second
type pawn == PieceType verifies the promotion is to the correct type. The primary here means that the next move consider should be a "primary" move - the first White response in the PGN file. This means that in a correct study it is White's only refutation. Finally, the
== filter after the third
--> verifies the condition for the white promotion.
line filter is wrapped in an if statement that increments
numberbabson whenever the
line filter succeeds, that is, whenever there is a Babson pair for this
the main part of the CQL file invokes
babsonpair() on each possible piece type, for each
Pawn pair that could be a promoting pawn (hence the
piece pawn in pa-h2).
The numberbabsons>= 2 means that only positions with at least two Babson pairs are considered. The sort sorts the games in decreasing order of
numberbabsons. The study here is one of only three in the Heijden database that exhibit 3 Babson pairs, that is which are "3/4 Babsons".
The Babson task is to find a position with 4 Babson pairs, that is, with
numberbabsons==4. It has never been done in a study. Whether a Babson task exists in study form is the most famous open question in chess studies.