View source with formatted comments or as raw
    2final(s0).
    3final(s2).
    4
    5path(A,B,R) :-
    6    A = s(s0,0,_), B = s(F,5,_),
    7    reach(A,B,R),
    8    final(F).
    9
   10reach(A,B,[A-Action,B]) :-
   11    trans(A,B,Action).
   12reach(A,B,[A-Action|R]) :-
   13    trans(A,Z,Action),
   14    reach(Z,B,R).
   15
   16trans(s(s0,T0, C0), s(s1, T1, C1), drop(T1)) :-
   17    T1 .>=. T0 + 1,
   18    drop(T1),
   19    C1 .=. 0.
   20trans(s(s1,T1, C1), s(s0, T00, C00), catch(T00)) :-
   21    T00 .>=. T1 + 1,
   22    C00 .=. T00 - T1,
   23    catch(T00),
   24    C00 .<. 2.
   25trans(s(s1,T1, C1), s(s2, T2, C2), wait(T2)) :-
   26    T2 .>=. T1 + 1,
   27    C2 .=. T2 - T1,
   28    not catch(T2),
   29    C2 .>=. 2.
   30
   31catch(T) :- not wait(T).
   32wait(T) :- not catch(T).
   33
   34drop(T) :- not negdrop(T).
   35negdrop(T) :- not drop(T).
   36
   37
   38p(A, B, R) :- catch(T), path(A,B,R), T < 5.
   39
   40
   41
   42s:- r.
   43r:- p(1), p(1).
   44
   45p(1)