Go backward to Subgoal creation for operator application.
Go up to Encoding A Task in Soar.
Go forward to Problem space refinement.

Problem space proposal for subgoal
==================================

Once a subgoal is created, a problem space must be proposed.  A problem space
symbol will act as a cue for proposing and selecting the initial state and
operators in the subgoal.  Operators should be defined such that any sequence
of operator applications that produces a final state that satisfies the
constraints of the problem.  For example, in the Blocks World, changing the
name of a block is not a legal operation and would violate an implicit
constraint in the problem description.

If the problem space selection can be made based on the name of the goal,
then a simple production such as the one below will be sufficient for problem
space proposal.

(sp build-tower*propose*space*blocks-world
  (goal <g> ^name build-tower)
-->
  (<g> ^problem-space <p>)
  (<p> ^name blocks-world))

Since the variable <p> only appears in the action, it will be bound to a
newly generated symbol, starting with the first letter of the variable
(something like P2).  The second occurrence of <p> will use this same symbol.
The goal is augmented with a name that can be tested by later productions.
After this production fires and the next decision is made, the cumulative
trace at (watch 0) is as follows:

     0: ==>G: G1 
     1:    P: P1 (top-ps)
     2:    S: S1 (top-state)
Initial state has A on B and B and C on the table.
The goal is to get A on B on C on the table.
     3:    O: O2 (build-tower)
     4:    ==>G: G2 (operator no-change)
     5:       P: P2 (blocks-world)