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