Many of the schedules in the library assume some alignment relations (see section 4.5) between their array arguments. Although these are usually natural restrictions from the point of view of the parallel implementation, they can sometimes take programmers by surprise, or appear unnecessarily complex.
For example, it is required that the source array for a Shift is aligned with the destination array. This sometimes surprises people, although it probably shouldn't. Historically, an essential feature of the shift operation is that it can be implemented very efficiently by simple nearest neighbour communications. The library could easily have been defined to implement shift without the alignment constraint, but then implementation would be essentially the same as the more complex Remap operation. In some sense the whole point of Shift is that it is a simpler, lighter-weight operation. If versions of the library functions without alignment restrictions are needed, they can always be constructed by combining the constrained operation with Remap operations.
Because the alignment constraints implied by particular implementations of the schedules can be quite complex, the restrictions are sometimes simplified slightly in the following sections. The conditions given are always sufficient, but sometimes weaker conditions would have been adequate. For simplicity, we restrict ourselves to the vocabularly defined in section 4.5.