# shiftvertical

Let*j*be an integer between -7 and 7. The

*basic vertical shift transform*

**V**

^{j}shifts a square on the chessboard

*j*squares up. (Directions are reversed if the argument is negative). If the square goes off the board, we say that

**V**

^{j}is

*empty*or

*undefined*.

A vertical basic shift transform acts on square designators. For example,

because ifV^{3}a1 ≡ a4

`a1`

is shifted up 3 squares it becomes `a4`

.
As a special rule, suppose a square designator contains an entire file, like `[a1-8,c4]`

contains the entire a file in addition to the `c4`

square. Then any vertical shifts of squares on that file are ignored. Thus,

V^{3}[a1-8,c4] ≡ [a1-8,c7]

A vertical shift transform can be extended to a vertical shift transform of an arbitrary filter: each square designator appearing in the filter is shifted by the specified amount.

Sometimes a vertical shift transform will result in an empty square designator. For example,

V^{7}[a-h2,c4]

will be empty. Any empty square designator makes the whole filter containing that empty square designator empty as well.

`shiftvertical`

is a transform filter that represents each of the 15 basic vertical shift transforms including the identity.

The effect of `shiftvertical `

is first to create the 15 distinct filters that result from applying each of the basic vertical shift transforms to *F**F*. Empty filters and repetitions are deleted, and the resulting set is called the *orbit* of `shiftvertical `

.
*F*

For example, the orbit of `shiftvertical Ka1`

is 8 distinct filters, `Ka1`

, `Ka2`

, and so on.

On the other hand, the orbit of `shiftvertical {Ka1 ka7}`

only contains 2 filters, namely `{Ka1 ka7}`

,
`{Ka2 ka8}`

. Any other vertical shift results in one of the kings going off the board, and which makes the corresponding filter empty.

If *F* is a numeric filter then so is `shiftvertical `

in which case its value is the maximum of the values of the matching transformed versions of *F**F*.

shiftvertical countF

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

shiftvertical count find Qa1

is the number of different squares on the a file on which there is a white queen in the game.