# 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←x`
is true exactly when
`      x→y→z`
is 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 filter
`    x←y`
is true exactly when
`    y→x`
is true.

However, the value of

`    y←x`
is the set of squares in y that are attacked by a piece in x.

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

```    ♙←♘
≡
[e2,d2]```

# ← chains

`z←y←z`
matches a position if and only if
`x→y→z`
matches the position.

The value returned by

`z←y←z`
is the set of squares Z in z such that
`Z←y←x`
matches the position.

Likewise,

`x1→x2→x3→...→xn`
matches a position if and only if
`      xn←xn-1←...←x1`
matches the position.

As before, the value of

`          xn←xn-1←...←x1`
is the set of X in xn such that
`          X←xn-1←...←x1`

# 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).