Go backward to State copying.
Go up to Using lookahead search.
Go forward to Evaluating states.

Operator application
--------------------

 
When performing a lookahead search, the operators must be applied to the copy
of the state.  If the operator will modify the external environment when it
is applied to the top-level state, there must exist productions that will
simulate its actions on the copy of the state.  Thus, performing a lookahead
search can often require additional knowledge that is not used when actions
are executed in the external environment when no internal simulation is
required.  For the Blocks World task we have implemented, the top-level state
is modified directly without an external environment so that no additional
productions are required for lookahead.

When productions are required to simulate the actions of an external
operator, they must fire only during the lookahead and not at the top-level,
otherwise, there could be confusion as to whether the changes to the
top-level state arose because of changes in the external environment or
because they are simulated.  To differentiate between applying the operator
to the top-level state or during the lookahead, the productions can test the
name of the current goal.  During lookahead, the goal is augmented with ^name
implement-evaluate-object (see Section See The evaluate-object operator
on page See The evaluate-object operator for details of the evaluation
goal).