Start +++++++++++++> Finish P: none P: on(A,B) E: on(C,A) on(B,C) handempty ontable(A) ontable(B) clear(B) clear(C)
on(A,B) Start +++++++++++++> Stack(A,B) ------------> Finish P: none P: holding(A) P: on(A,B) E: on(C,A) clear(B) on(B,C) handempty E: on(A,B) ontable(A) clear(A) ontable(B) handempty clear(B) ~holding(A) clear(C) ~clear(B)
on(A,B) Start +++++++++++++> Stack(A,B) ------------> Finish P: none P: holding(A) ^ P: on(A,B) E: on(C,A) clear(B) | on(B,C) handempty E: on(A,B) | ontable(A) clear(A) | ontable(B) handempty | clear(B) ~holding(A) | clear(C) ~clear(B) | | on(B,C) | Stack(B,C) ------------| P: holding(B) clear(C) E: on(B,C) clear(B) handempty ~holding(B) ~clear(C)
on(A,B) Start +++++++++++++> Stack(A,B) ------------> Finish P: none P: holding(A) ^ P: on(A,B) E: on(C,A) clear(B) | on(B,C) handempty E: on(A,B) | ontable(A) clear(A) | ontable(B) handempty | clear(B) ~holding(A) |on(B,C) clear(C) ~clear(B) | | holding(B) | Pickup(B) -----------> Stack(B,C) P: ontable(B) P: holding(B) clear(B) clear(C) handempty E: on(B,C) E: holding(B) clear(B) ~ontable(B) handempty ~clear(B) ~holding(B) handempty ~clear(C)
holding(A) on(A,B) Start ++++++++> Pickup(A) ----------> Stack(A,B) --------> Finish P: none P: ontable(A) P: holding(A) ^ P: on(A,B) E: on(C,A) clear(A) clear(B) | on(B,C) handempty handempty E: on(A,B) | ontable(A) E: holding(A) clear(A) | ontable(B) ~clear(A) handempty | clear(B) ~ontable(A) ~holding(A) |on(B,C) clear(C) ~handempty ~clear(B) | | |---------| holding(B) | Pickup(B) -----------> Stack(B,C) P: ontable(B) P: holding(B) clear(B) clear(C) handempty E: on(B,C) E: holding(B) clear(B) ~ontable(B) handempty ~clear(B) ~holding(B) handempty ~clear(C)
Start P: none E: on(C,A) handempty ontable(A) ontable(B) clear(B) clear(C) clear(A) holding(A) on(A,B) Unstack(C,A) ----> Pickup(A) ----------> Stack(A,B) -------> Finish P: clear(C) P: ontable(A) P: holding(A) ^ P: on(A,B) on(C,A) clear(A) clear(B) | on(B,C) handempty handempty E: on(A,B) | E: holding(C) E: holding(A) clear(A) | clear(A) ~clear(A) handempty | ~clear(C) ~ontable(A) ~holding(A) |on(B,C) ~on(C,A) ~handempty ~clear(B) | ~handempty | |-----------| holding(B) | Pickup(B) -----------> Stack(B,C) P: ontable(B) P: holding(B) clear(B) clear(C) handempty E: on(B,C) E: holding(B) clear(B) ~ontable(B) handempty ~clear(B) ~holding(B) handempty ~clear(C)
Start P: none E: on(C,A) handempty ontable(A) ontable(B) clear(B) clear(C) clear(A) holding(A) on(A,B) Unstack(C,A) ----> Pickup(A) ----------> Stack(A,B) -------> Finish P: clear(C) P: ontable(A) P: holding(A) ^ P: on(A,B) on(C,A) clear(A) clear(B) | on(B,C) handempty handempty E: on(A,B) | E: holding(C) E: holding(A) clear(A) | clear(A) ~clear(A) handempty | ~clear(C) ~ontable(A) ~holding(A) |on(B,C) ~on(C,A) ~handempty ~clear(B) | ~handempty | |-----------| handempty holding(B) | Putdown(C) --------> Pickup(B) -----------> Stack(B,C) P: holding(C) P: ontable(B) P: holding(B) E: ontable(C) clear(B) clear(C) clear(C) handempty E: on(B,C) handempty E: holding(B) clear(B) ~holding(C) ~ontable(B) handempty ~clear(B) ~holding(B) handempty ~clear(C)
Open Precond | in Step | Solved by Step |
---|---|---|
clear(C) | Unstack(C,A) | Start |
on(C,A) | Unstack(C,A) | Start |
handempty | Unstack(C,A) | Start |
Start ---------- P: none | E: on(C,A) | handempty |clear(C) ontable(A) |on(C,A) ontable(B) |handempty clear(B) | clear(C) | | |----------| | V clear(A) holding(A) on(A,B) Unstack(C,A) ----> Pickup(A) ----------> Stack(A,B) -------> Finish P: clear(C) + P: ontable(A) P: holding(A) ^ P: on(A,B) on(C,A) + clear(A) clear(B) | on(B,C) handempty + handempty E: on(A,B) | E: holding(C) + E: holding(A) clear(A) | clear(A) + ~clear(A) handempty | ~clear(C) + ~ontable(A) ~holding(A) |on(B,C) ~on(C,A) ++++ ~handempty ~clear(B) | ~handempty ++++++++++++++++++++++++++ | + |-----------| handempty holding(B) v | Putdown(C) --------> Pickup(B) -----------> Stack(B,C) P: holding(C) P: ontable(B) P: holding(B) E: ontable(C) clear(B) clear(C) clear(C) handempty E: on(B,C) handempty E: holding(B) clear(B) ~holding(C) ~ontable(B) handempty ~clear(B) ~holding(B) handempty ~clear(C)
Open Precond | in Step | Solved by Step |
---|---|---|
Holding(C) | Putdown(C) | Unstack(C,A) |
ontable(B) | Pickup(B) | Start |
clear(B) | Pickup(B) | Start |
handempty | Pickup(B) | Putdown(C) |
Note: This fix means there is no threat at step Stack(A,B) to causal link from Start to Pickup(B) because now Stack(A,B) is after Pickup(A) which is after Pickup(B), so Stack(A,B) must occur after Pickup(B).
Start ---------- P: none | E: on(C,A) | handempty |clear(C) ontable(A) |on(C,A) ontable(B) |handempty clear(B) | clear(C) | | |----------| | V clear(A) holding(A) on(A,B) Unstack(C,A) ----> Pickup(A) ----------> Stack(A,B) -------> Finish | P:clear(C) + ^ P: ontable(A) P: holding(A) ^ P: on(A,B) | on(C,A) + + clear(A) clear(B) | on(B,C) | handempty + + handempty E: on(A,B) | | E:holding(C) + + E: holding(A) clear(A) | | clear(A) + + ~clear(A) handempty | | ~clear(C) + + ~ontable(A) ~holding(A) |on(B,C) | ~on(C,A) ++++ ~handempty ~clear(B) | | ~handempty + +++++++++++++++++++++++++ | | + + | |holding(C) ++++ + |------------| | + + | v handempty + holding(B) v | Putdown(C) --------> Pickup(B) -----------> Stack(B,C) P: holding(C) P: ontable(B) P: holding(B) E: ontable(C) clear(B) clear(C) clear(C) handempty E: on(B,C) handempty E: holding(B) clear(B) ~holding(C) ~ontable(B) handempty ~clear(B) ~holding(B) handempty ~clear(C)
Open Precond | in Step | Solved by Step |
---|---|---|
clear(C) | Stack(B,C) | Putdown(C) |
ontable(A) | Pickup(A) | Start |
handempty | Pickup(A) | Stack(B,C) |
clear(B) | Stack(A,B) | Stack(B,C) |
Start ---------------------- P: none | | E: on(C,A) | | handempty |clear(C) |ontable(A) ontable(A) |on(C,A) | ontable(B) |handempty | clear(B) | | clear(C) | | | |------| |----------| | | | V clear(A) v holding(A) on(A,B) Unstack(C,A) ----> Pickup(A) ----------> Stack(A,B) -------> Finish | P:clear(C) + ^ ^P: ontable(A) ^ P: holding(A) ^ P: on(A,B) | on(C,A) + + | clear(A) | clear(B) | on(B,C) | handempty + + | handempty | E: on(A,B) | | E:holding(C) + + |E: holding(A) | clear(A) | | clear(A) + + | ~clear(A) | handempty | | ~clear(C) + + | ~ontable(A) | ~holding(A) |on(B,C) | ~on(C,A) + + | ~handempty | ~clear(B) | | ~handempty + + |------| |--------| | | + + | handempty | | | +++++++++ |--------------------| | | | + + | |clear(B) | |holding(C) +++++ ++++++++++++++++++++++ | | | | + + | | |--------| v handempty + holding(B) v | | | Putdown(C) --------> Pickup(B) -----------> Stack(B,C) P: holding(C) \ P: ontable(B) ^ P: holding(B) E: ontable(C) \ clear(B) | clear(C) clear(C) \ handempty | E: on(B,C) handempty \ E: holding(B) | clear(B) ~holding(C) \ ~ontable(B) | handempty | ~clear(B) | ~holding(B) | handempty | ~clear(C) | | | clear(C) | |------------------------
Copyright © 1996-2003 by Charles R. Dyer. All rights reserved.