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