# Overview of `←`

The `←`

filter (ascii `<-`

) is the dual of → .
As with `→`

we can divide usages of `←`

into binary, ternary, and *n*-ary forms.

A `←`

filter is true exactly when the `→`

filter formed by reversing all the arrows and the order of the constituent filters is true:

` y←x`

is true exactly when
` y→x`

is true.

z←y←xis true exactly when

x→y→zis true.

## value returned by `←`

The reason to use `←`

rather than `→`

is that the value returned by the filters is different.
The value returned by `y→x`

is all squares in `y`

that are attacked by `x`

.

In general, if *Z* is a set filter, then the value of a chain of `←`

filters is loosely speaking, all the squares in the first filter in the chain that make the filter true.

# ←, binary case

The filteris true exactly whenx←y

is true.y→x

However, the value of

is the set of squares iny←x

*y*that are attacked by a piece in

*x*.

For example, if the current position is the start position, then

♙←♘ ≡ [e2,d2]

# ← chains

matches a position if and only ifz←y←z

matches the position.x→y→z

The value returned by

is the set of squaresz←y←z

*Z*in

*z*such that

matches the position.Z←y←x

Likewise,

matches a position if and only ifx_{1}→x_{2}→x_{3}→...→x_{n}

matches the position.x_{n}←x_{n-1}←...←x_{1}

As before, the value of

is the set ofx_{n}←x_{n-1}←...←x_{1}

*X*in

*x*

_{n}such that

X←x_{n-1}←...←x_{1}

# Examples

The black king's field, which is the set of squares attacked by the black king, is▦←♚

Thus, to check that a white pawn is guarding an empty square in the black king's field, use:

♙→(□←♚)

To check that the maximum 27 squares are attacked by a white queen, use

▦←♕==27(As in maxqueenattack.cql).