
## Pomp(

a genda )
Termination:  If agenda is empty, return Goal Selection: Let are need be a pair on the agenda . ( need is an action and is a conjunct from its precondition list )

Action Selection: Let add = Choose an action one of whose effects unifies with    subject to the constraints in . (This may be a newly instantiated action from A or an action that is already in and can be ordered consistently prior to need). If no such action exists, then return failure. Let
' =
{ add - need }. Form   ' by adding to    any codesignation constraints that are needed in order to force add to have the desired effect. Let as ' = ' - { add to maneed }. If th add is newly instantiated, then   ' =       {    ada } and    ' =    '    {
Concurrent Action Selection: If agg is newly instantiated then apply the following steps to all positive actions   see in its concurrent list: Let   cone = Choose a newly instantiated action from A or an action that is already in    and can be ordered consistently concurrently with   add. Make sure that there is a free agent that can perform this action concurrently with a dd and any other concurrently scheduled actions.  If no such action exists then return failure.  Let cone is newly instantiated, then   ' =       {             } and     ' =
let ) ' =   ). If   add is the agent variable in  add and  cone is the agent variable in   cone, then add = conc to   ', as well as all similar non-codesignation constraints for actions   such that
= . add E. ..
Re-apply this step to cone, if needed. For every negative action - conc in - add concurrent list let 
{ -conc = add} Add to any codesignation constraints associated with . 7595.

Updating of Goal State: Let agenda' = agenda - { .

lf a ad is newly instantiated, then add {      add } to agenda' for every    j that is a logical precondition of . add Add the other preconditions to  '. If additional concurrent actions were added, add their preconditions as well.

Causal Link Protection: For every action   that might threaten a causal link
(a) Demotion: Add to p to '.

(b) Weak Promotion: Add t >       to
, instead.

If neither constraint is consistent, then return failure.

Nonconcurrency Enforcement For every action   that threatens a nonconcurrency constraint A =
(i.e., t is an instance of the schema A that does not violate any constraint in   ') add a consistent constraint, either
(a) Demotion: Add to
.

(b) Promotion: Add to '.

If neither constraint is consistent, then return failure.

Recursive Invocation: POMP( , ', ', ',
agenda ')
P
O
M
P