fliphorizontal

`fliphorizontal` is a transform filter corresponding to the following 2 basic transforms.
• id, the identity
• reflecth: reflection about the horizontal bisector.

`fliphorizontal` is normally called with a single argument filter, F:

`      fliphorizontal F`

`fliphorizontal` also accepts an optional `count` parameter. `fliphorizontal F` matches the current position if any transformation of F by one of the 2 basic transforms above matches the current position. These two transforms are examples of dihedral transforms.

For example, suppose F is the filter `{Ka1 kh8}`, matching a position in which the white king is on `a1` and the black king is on `h8`. If we transform this filter by reflecth we get the new filter `{Ka8 kh1}`. The filters that results from transforming `{Ka1 kh8}` by all the elements of `fliphorizontal`, which is to say the identity and reflection about the horizontal bisector, are:

```  {Ka1 kh8}
{Ka8 kh1}```

The filter `fliphorizontal {Ka1 kh8}` will thus match a position if either of these two filters match the position, that is, if the white king is on `a1` or `a8` and the black king is on the opposite corner. (This can also be done, more efficiently, via `k==diagonal 7 K[a1,a8]` )

If F is a set filter then so is

`fliphorizontal F`

in which case its value is the union of the values of each of the sets represented by each transformed version of F.

For example,

`fliphorizontal a1` is the set `[a1,a8]`.

If F is a numeric filter then so is `fliphorizontal F` in which case its value is the maximum of the values of F and the value of the reflection of F about the horizontal bisector.

`fliphorizontal count F`

is a numeric filter whose value is the number of distinct matching transformed versions of F. For example, if the current position is the initial position, then

`fliphorizontal count find {Qa1 qh8}`

is equal to 0 if neither `{Qa1 qh8}` nor `{Qa8 qh1}` occur in the game; is equal to 1 if exactly one of these configurations does; and is equal to 2 if both of them do.

The `fliphorizontal` filter also modifies directions parameters and filters. Thus,

`fliphorizontal ray up (R K)`

will match if and only if

`ray vertical (R K)`

matches.