6
8execute(A,Sr) :- ask_execute(A,Sr).
9exog_occurs(_) :- fail.
10
11fl(N) :- N=1; N=2; N=3; N=4; N=5; N=6. 12
14prim_action(down). 15prim_action(up). 16prim_action(off(N)) :- fl(N). 17prim_action(open). 18prim_action(close). 19
21prim_fluent(floor). 22prim_fluent(light(N)) :- fl(N). 23
25causes_val(up, floor, N, N is floor+1).
26causes_val(down, floor, N, N is floor-1).
27causes_val(off(N), light(N), off, true). 28
30poss(down, neg(floor=1)).
31poss(up, neg(floor=6)).
32poss(off(N), and(floor=N,light(N)=on)).
33poss(open, true).
34poss(close, true).
35
37initially(floor,3).
38initially(light(1), off).
39initially(light(2), on).
40initially(light(3), off).
41initially(light(4), off).
42initially(light(5), on).
43initially(light(6), off).
44
46proc(below_floor(N), floor<N).
47proc(above_floor(N), floor>N).
48proc(next_floor_to_serve(N), light(N)=on).
49
51proc(go_floor(N), while(neg(floor=N), if(below_floor(N),up,down))).
52proc(serve_a_floor, pi(n,
53 [ ?(next_floor_to_serve(n)), go_floor(n), open, close, off(n) ])).
54proc(control,
55 [ while( some(n,light(n)=on), serve_a_floor ),
56 go_floor(1),
57 open ] )