2duration(load,D) :- 3 D #< 23/3, D #> 10/3. 4duration(shoot,5). 5duration(wait,36). 6 7holds(0,State,[]) :- 8 init(State). 9holds(Time1, FinalState, [Action|As]) :- 10 Time1 #> 0, 11 Time1 #= Time + Duration, 12 duration(Action, Duration), 13 not prohibited(Action, Time1), 14 transition(Action, PrevState, FinalState), 15 holds(Time, PrevState, As). 16 17init(state(alive, unloaded, 0)). 18 19transition(load, state(alive, _, _), state(alive, loaded,FinalArmed)) :- 20 FinalArmed = 0. 21transition(wait, state(alive, Gun, PrevArmed), state(alive, Gun, FinalArmed)) :- 22 duration(wait, D), FinalArmed #= PrevArmed + D. 23transition(shoot, state(alive, loaded, PrevArmed), state(dead, unloaded, 0)) :- 24 not spoiled(PrevArmed). 25transition(shoot, state(alive, loaded, PrevArmed), state(alive, unloaded, 0)) :- 26 spoiled(PrevArmed). 27 28spoiled(Armed) :- Armed #> 35. 29prohibited(shoot, T) :- T #< 35. 30 31?- T #< 40, holds(T, state(dead,_,_), List). 32 33#