We adopt the convention that, if a block design has points, then the points are the integers . This is a combination of two assumptions: the points are ordered; and the index set starts at 0 (rather than 1).

There are several choices of ordering of sets (or multisets) of points. We have chosen to order in the following way:

- first compare the length of the two lists; the shorter comes
first.
- for lists of the same length, we order lexicographically.
(Recall that the lists are sorted.)

So for example, here are a few sets in order:

For the purpose of defining functions on the collection of blocks, we now index these blocks from 0 to , where is the number of blocks of the design. If the above list contains all the blocks of a certain design , then we can refer to block 5 of , which will be the set in this case.

The same principle can be extended to lists of lists. Assuming that the ``inner'' lists are already ordered, we first compare the length of the two lists, and if they are equal, we order the lists ``lexicographically'' (with the order previously defined between list elements). This process can be continued recursively to any level of nesting.

However, we do not require that this ordering is adhered to throughout
the tree. The following objects may be required to be ordered (they have
a boolean attribute `ordered`):

`blocks``function_on_indices``function_on_ksubsets_of_indices``cycle_type`

Functions on indices, and on *k*-subsets of indices, are described next.
For cycle types, see the section 7.4 on Automorphisms.