2
3:- expects_dialect(cilog). 4
6
7sitting_at(rob,o109,init).
8sitting_at(parcel,storage,init).
9sitting_at(k1,mail,init).
10color(parcel,blue,init).
12
14
15at(Obj,Pos,S) <-
16 sitting_at(Obj,Pos,S).
17at(Obj,Pos,S) <-
18 carrying(Ag,Obj,S) &
19 at(Ag,Pos,S).
20
21
22adjacent(o109,o103,_).
23adjacent(o103,o109,_).
24adjacent(o109,storage,_).
25adjacent(storage,o109,_).
28adjacent(o103,mail,_).
29adjacent(mail,o103,_).
30adjacent(lab2,o109,_).
31adjacent(P_1,P_2,S) <-
32 blocks(Door,P_1,P_2)&
33 unlocked(Door,S).
34
36blocks(door1,o103,lab2).
37opens(k1,door1).
38autonomous(rob).
39
41poss(move(Ag,Pos,Pos_1),S) <-
42 autonomous(Ag) &
43 adjacent(Pos,Pos_1,S) &
44 sitting_at(Ag,Pos,S).
45poss(pickup(Ag,Obj),S) <-
46 autonomous(Ag) &
47 at(Ag,Pos,S)&
48 sitting_at(Obj,Pos,S)&
49 Ag \= Obj .
50poss(putdown(Ag,Obj),S) <-
51 carrying(Ag,Obj,S).
52poss(unlock(Ag,Door),S) <-
53 autonomous(Ag) &
54 blocks(Door,P_1,_)&
55 at(Ag,P_1,S)&
56 opens(Key,Door)&
57 carrying(Ag,Key,S).
58
60
61sitting_at(Obj,Pos,do(move(Obj,Pos_0,Pos),S)) <-
62 poss(move(Obj,Pos_0,Pos),S).
63
64sitting_at(Obj,Pos,do(putdown(Ag,Obj),S)) <-
65 poss(putdown(Ag,Obj),S)&
66 at(Ag,Pos,S).
67
68sitting_at(Obj,Pos,do(A,S) ) <-
69 poss(A,S) &
70 sitting_at(Obj,Pos,S) &
71 ~ ismove(A,Obj,Pos) &
72 ~ ispickup(A,Obj).
73ismove(move(Obj,Pos,_),Obj,Pos).
74ispickup(pickup(_,Obj),Obj).
75
76carrying(Ag,Obj,do(pickup(Ag,Obj),S)) <-
77 poss(pickup(Ag,Obj),S).
78
79carrying(Ag,Obj,do(A,S)) <-
80 carrying(Ag,Obj,S) &
81 poss(A,S) &
82 A \= putdown(Ag,Obj).
83
88
89unlocked(Door,do(unlock(Ag,Door),S)) <-
90 poss(unlock(Ag,Door),S).
91unlocked(Door,do(A,S)) <-
92 unlocked(Door,S) &
93 poss(A,S).
94
97:- trace. 98askable sitting_at(parcel,o109,S).
99% bound 8.
100askable carrying(rob,k1,S).
101% bound 16.
102askable sitting_at(rob,lab2,S).
103% bound 15.
104askable sitting_at(rob,lab2,S).
105 % warning: this takes a *very* *very* long time
106askable sitting_at(parcel,lab2,S).
107askable