View source with formatted comments or as raw
    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#