Cassandra notices an uncertainty when its current plan becomes dependent
upon a particular outcome of that uncertainty through the use of an
uncertain effect, i.e., an effect with an unknown precondition that
specifies an outcome of that uncertainty. The plan that Cassandra has
built up to that point is in effect a plan branch for that outcome.
Since branches must also be constructed for all other possible
outcomes of the uncertainty, Cassandra makes a copy of its overall goal
for each possible outcome of the uncertainty, each copy carrying a
label indicating the outcome of the uncertainty in which it must be
achieved. It thus effectively splits the plan into a set of branches,
one for each possible outcome of the uncertainty.
In planning for these otherwise identical goals, Cassandra must make certain that no element of the branch for the goal for one outcome relies on a different outcome of the same uncertainty. In other words, no goal, nor any of its subgoals may be achieved by any effect that depends, directly or indirectly, on any outcome of the uncertainty other than the one in the goal's label. As described above, Cassandra achieves this by using a system of negative labels indicating contingencies from which particular plan elements must be excluded.
In the bomb-in-the-toilet example, when the plan is made dependent
upon the uncertain outcome bomb in package1, a new copy of the
top level goal bomb is disarmed is added to the set of open
conditions. The new copy is given a label indicating that it belongs
to contingency in which the bomb is in package2.
The existing top level goal and
all its subgoals are labeled to indicate that they belong to the
contingency in which the bomb is in package1. The effect
bomb in package1, the action dunk package1, and all
effects of the action dunk package1 are be labeled to indicate
that they cannot play a role in the contingency in which the bomb is
in package2.
Notice that the action move package1, although it plays a role in the plan in the contingency in which the bomb is in package1, does not in fact depend upon the bomb being in package1. It could in principle be made part of the plan for disarming the bomb in the contingency in which the bomb is in package2, were it to prove useful for anything. This is indicated by the fact that it has no negative label for for the package2 contingency.
Figure 7: A contingency plan to disarm a bomb
When Cassandra attempts to achieve the new open condition bomb
is disarmed, it may choose the dunk
operator once again
(notice that it is prohibited from using any effects of the existing
dunk
operator). This new instance of the
dunk
operator
in turn gives rise to a subgoal to have the bomb be in the package
that is dunked. This can only be achieved by identification with the
effect bomb in package2. The plan thus constructed is
depicted in Figure 7 (the
decision-step has been omitted for clarity) and is listed in Section A.2.