When establishing possible sliding motion, the most important information
about the scene is the description of what features or objects are in contact
with other features or objects. These contacts were represented using
``contact lists''. Whenever one shape feature comes into contact with another,
a contact list is created for each feature. The contact list is linked to the
feature by the name of that feature at the head of the list. The rest of the
list consists of all features which are in contact with the feature at the
head. Any further contacts that occur can be added to this list.

The contact lists are ordered in a clockwise direction (relative to the object
on which the head feature is found). This implicit direction in the contact
list ordering is used as the basis for distinguishing between clockwise and
anticlockwise sliding, since the system must be able to tell what relative
direction successive slides occur in.

All contacts between objects in a scene are collected in the ``contact set'',
which is the set of all contact lists. The contact set contains two entries
for every contact; one entry is found on the contact list of each of the two
features in contact. It is necessary to maintain consistency in the contact
set by removing entries from the relevant contact lists when a contact is
broken, and removing whole lists when the feature the list refers to is no
longer in contact with anything.

For ease in formulating the problem, one object in a scene is represented
directly as the moving-object, while all others are called obstacle-1, obstacle-2 etc. The analysis of sliding therefore commences
with the contact lists for each feature of moving-object.

In order to represent motion around the boundary of a single obstacle, the
features on the boundary must be ordered. This is also achieved by using an
implicit clockwise ordering in the list of features that are in a given
subpart or object. Use of a linear list for this purpose created some
problems, in that the clockwise ordering of features on the boundary is
circular. It is possible to create circular lists in LISP, but they are
difficult to operate on - the reasoning system therefore had to allow for a
``wrap-around'' from the last item in a list of features to the first, and
vice-versa in the anticlockwise direction.

Although size comparison between features on different objects would have been
useful, this system was not able to easily perform such comparison. This
resulted from the fact that feature sizes are expressed by the relationship
between the length of the feature axis, and the length of the main object or
subpart axis. The relative sizes of whole objects were expressed in a similar
fashion. Comparison of two features therefore required following a chain of
qualitative size comparisons through two objects - by the end of the chain,
it was seldom possible to make any clear conclusion of size relative to the
feature at the start of the chain.

As described above, the sliding system searches exhaustively for all possible
contact states. This exhaustive search terminates when a previous contact
state is repeated (when the moving object has circumnavigated all obstacles).
Detection of a repeated contact state is not trivial, because there is no
canonical ordering of the contact set (even though all contact lists and
object feature lists are guaranteed to be clockwise-ordered, they can start
and end at different points). It was therefore necessary to construct a
function for comparing overall scene configurations after each sliding motion.