@@ -175,3 +175,65 @@ def goal_test(kb):
175175    leave_overnight  =  Action (expr ("LeaveOvernight" ), [precond_pos , precond_neg ], [effect_add , effect_rem ])
176176
177177    return  PDLL (init , [remove , put_on , leave_overnight ], goal_test )
178+ 
179+ def  three_block_tower ():
180+     init  =  [expr ('On(A, Table)' ),
181+             expr ('On(B, Table)' ),
182+             expr ('On(C, A)' ),
183+             expr ('Block(A)' ),
184+             expr ('Block(B)' ),
185+             expr ('Block(C)' ),
186+             expr ('Clear(B)' ),
187+             expr ('Clear(C)' )]
188+ 
189+     def  goal_test (kb ):
190+         required  =  [expr ('On(A, B)' ), expr ('On(B, C)' )]
191+         for  q  in  required :
192+             if  kb .ask (q ) is  False :
193+                 return  False 
194+         return  True 
195+ 
196+     ## Actions 
197+     #  Move 
198+     precond_pos  =  [expr ('On(b, x)' ), expr ('Clear(b)' ), expr ('Clear(y)' ), expr ('Block(b)' ),
199+                    expr ('Block(y)' ), expr ('b != x' ), expr ('b != y' ), expr ('x != y' )]
200+     precond_neg  =  []
201+     effect_add  =  [expr ('On(b, y)' ), expr ('Clear(x)' )]
202+     effect_rem  =  [expr ('On(b, x)' ), expr ('Clear(y)' )]
203+     move  =  Action (expr ('Move(b, x, y)' ), [precond_pos , precond_neg ], [effect_add , effect_rem ])
204+     
205+     #  MoveToTable 
206+     precond_pos  =  [expr ('On(b, x)' ), expr ('Clear(b)' ), expr ('Block(b)' ), expr ('b != x' )]
207+     precond_neg  =  []
208+     effect_add  =  [expr ('On(b, Table)' ), expr ('Clear(x)' )]
209+     effect_rem  =  [expr ('On(b, x)' )]
210+     moveToTable  =  Action (expr ('MoveToTable(b, x)' ), [precond_pos , precond_neg ], [effect_add , effect_rem ])
211+ 
212+     return  PDLL (init , [move , moveToTable ], goal_test )
213+ 
214+ def  cake ():
215+     init  =  [expr ('Have(Cake)' )]
216+ 
217+     def  goal_test (kb ):
218+         required  =  [expr ('Have(Cake)' ), expr ('Eaten(Cake)' )]
219+         for  q  in  required :
220+             if  kb .ask (q ) is  False :
221+                 return  False 
222+         return  True 
223+ 
224+     ## Actions 
225+     #  Eat 
226+     precond_pos  =  [expr ('Have(Cake)' )]
227+     precond_neg  =  []
228+     effect_add  =  [expr ('Eaten(Cake)' )]
229+     effect_rem  =  [expr ('Have(Cake)' )]
230+     eat  =  Action (expr ('Eat(Cake)' ), [precond_pos , precond_neg ], [effect_add , effect_rem ])
231+     
232+     #  Bake 
233+     precond_pos  =  []
234+     precond_neg  =  [expr ('Have(Cake)' )]
235+     effect_add  =  [expr ('Have(Cake)' )]
236+     effect_rem  =  []
237+     bake  =  Action (expr ('Bake(Cake)' ), [precond_pos , precond_neg ], [effect_add , effect_rem ])
238+ 
239+     return  PDLL (init , [eat , bake ], goal_test )
0 commit comments