rule and adding the properties in the finish of the rule. This is done until all further states are order-equivalent to those already generated. The enablers of the rules are ignored, with the consequence that some of the new states generated might be unreachable. When this process is completed in the current example the finished property spaces are as follows:
Property space 1

$$a t_{1}\,,\,i n_{1}\;\;\;\;\;\;a t_{1}\;\;\;\;\;\;\;\;i n_{1}\,,\,f u e l l e d_{1}\;\;\;\;\;\;\;a t_{1}\;\;\;\;\;\;\;\;a t_{1}\;\;\;\;\;\;\;\;r o c k e t,\,p a c k a g e\;\;,$$

## Property Space 2

$$\begin{array}{l l l l}{{f u e l l e d_{1},\,u n f u e l l e d_{1}}}&{{\ a t_{1}}}&{{\ f u e l l e d_{1}}}&{{\ u n f u e l l e d_{1}}}&{{\ r o c k e t}}\\ {{}}&{{}}&{{}}&{{}}\\ {{}}&{{}}&{{}}&{{f u e l l e d_{1}\ ,\ \ u n f u e l i e d_{1}\ ,\ \ u n f u e l e l e d_{1}}}\end{array}$$

We now consider each attribute space in turn and add domain objects (not already members) that potentiate their increasing rules. No new domain objects can be added to the first attribute space since only London and Paris can potentiate the increasing rule, and they are already present. However, when the second attribute space is considered it can be observed that rocket and package both potentiate the increasing rule and are therefore both added as new members. The resulting attribute spaces are:

$\begin{array}{cccccccccccc}at_{2}&location_{1}&null&at_{2},\ at_{2}&at_{2}&null,&London,\ Paris\\ at_{2}&null&&&\\ in_{2}&at_{1}&null&in_{2}&&\\ \end{array}$
The oddity of the load operator is revealed at this stage, since both package and rocket have been assigned as members of the in2 attribute space (meaning that they both can have the attribute of having things in them).

The number of distinct bit patterns that are constructed, indicating object membership of the state and attribute spaces, determines the number of distinct types that exist in the domain. Hence, in this simplified encoding of the Rocket domain, there are three distinct types. The rocket has type 1101, the package has type 1001 and Paris and London both have type 0010 . These types are given abstract identifiers, T 0 , T 1 and T 2 , but might be more meaningfully interpreted as the types of: movable object requiring fuel, movable object and location respectively. As expected, London and Paris are of type location, whilst the package is of type movable object and the rocket is of type movable object requiring fuel, which is a sub-type of movable object.

The distinction we have made between state and attribute spaces is further exploited in the process of inferring state invariants, discussed in Section 2.7.

## 2.6  The Assignment Of Types To Operator Parameters

Types are assigned to the parameters of the operators in the following way. Given an operator schema and a collection of property spaces and attribute spaces we allocate a type vector to each of the variables in the schema. The membership in the state and attribute spaces of each of the properties of a given variable is recorded by setting the appropriate bits in the vector for that variable. Only the properties that appear in the preconditions of the