1%DEFINITION OF DELIVERY ROBOT WORLD IN STRIPS NOTATION
    2
    3:- expects_dialect(cilog).    4
    5% ACTIONS
    6% move(Ag,Pos,Pos_1) is the action of Ag moving from Pos to Pos_1
    7
    8preconditions(move(Ag,Pos,Pos_1),
    9    [autonomous(Ag), adjacent(Pos,Pos_1), sitting_at(Ag,Pos)]).
   10achieves(move(Ag,Pos,Pos_1),sitting_at(Ag,Pos_1)).
   11deletes(move(Ag,Pos,Pos_1),sitting_at(Ag,Pos)).
   12
   13% pickup(Ag,Obj,Pos) is the action of agent Ag picking up Obj.
   14preconditions(pickup(Ag,Obj),
   15    [autonomous(Ag), Ag \= Obj, location(Pos),
   16                       sitting_at(Obj,Pos), at(Ag,Pos) ]).
   17achieves(pickup(Ag,Obj), carrying(Ag,Obj)).
   18deletes(pickup(Ag,Obj), sitting_at(Obj,Pos)).
   19
   20% putdown(Ag,Obj,Pos)
   21preconditions(putdown(Ag,Obj,Pos), 
   22    [autonomous(Ag),  Ag \= Obj, at(Ag,Pos), carrying(Ag,Obj)]).
   23achieves(putdown(Ag,Obj,Pos),sitting_at(Obj,Pos)).
   24deletes(putdown(Ag,Obj,Pos),carrying(Ag,Obj)).
   25
   26% unlock(Ag,Door)
   27preconditions(unlock(Ag,Door),
   28    [autonomous(Ag), blocks(Door,P_1,_), opens(Key,Door),  
   29        carrying(Ag,Key), at(Ag,P_1)]).
   30achieves(unlock(Ag,Door),unlocked(Door)).
   31
   32% PRIMITIVE RELATIONS
   33primitive(carrying(_,_)).
   34primitive(sitting_at(_,_)).
   35primitive(unlocked(_)).
   36primitive(autonomous(_)).
   37
   38% DERIVED RELATIONS
   39
   40clause(at(Obj,Pos),[sitting_at(Obj,Pos)] ).
   41clause(at(Obj,Pos),[autonomous(Ag), Ag \= Obj, carrying(Ag,Obj), at(Ag,Pos)]).
   42
   43clause(location(o109),[]).
   44clause(location(o103),[]).
   45clause(location(storage),[]).
   46clause(location(o111),[]).
   47clause(location(mail),[]).
   48clause(location(lab2),[]).
   49
   50
   51clause(adjacent(o109,o103),[]).
   52clause(adjacent(o103,o109),[]).
   53clause(adjacent(o109,storage),[]).
   54clause(adjacent(storage,o109),[]).
   55clause(adjacent(o109,o111),[]).
   56clause(adjacent(o111,o109),[]).
   57clause(adjacent(o103,mail),[]).
   58clause(adjacent(mail,o103),[]).
   59clause(adjacent(lab2,o109),[]).
   60clause(adjacent(P_1,P_2), [blocks(Door,P_1,P_2), unlocked(Door)]).
   61clause(blocks(door1,o103,lab2),[]).
   62clause(opens(k1,door1),[]).
   63clause(autonomous(rob),[]).
   64
   65% INITIAL SITUATION
   66holds(sitting_at(rob,o109),init).
   67holds(sitting_at(parcel,storage),init).
   68holds(sitting_at(k1,mail),init).
   69
   70achieves(init,X)