7
9execute(A,Sr) :- ask_execute(A,Sr).
10exog_occurs(_) :- fail.
11
12fl(N) :- N=1; N=2; N=3; N=4; N=5; N=6. 13
15prim_action(down). 16prim_action(up). 17prim_action(off(N)) :- fl(N). 18prim_action(look(N)) :- fl(N). 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(look(_), true).
34
36senses(look(N), light(N)). 37
39initially(floor,3).
40
42proc(below_floor(N), floor<N).
43proc(above_floor(N), floor>N).
44proc(next_floor_to_serve(N), light(N)=on).
45
47proc(go_floor(N), while(neg(floor=N), if(below_floor(N),up,down))).
48proc(serve_a_floor, pi(n, [?(next_floor_to_serve(n)), go_floor(n), off(n)])).
49proc(check_buttons, [look(1), look(2), look(3), look(4), look(5), look(6)]).
50
51proc(control,
52 [ check_buttons,
53 while(or(some(n,light(n)=on), above_floor(1)),
54 if(some(n,light(n)=on), serve_a_floor, [down, check_buttons])) ])