View source with formatted comments or as raw
    2:- use_package(tabling).    3:- use_package(t_clpq).    4% :- push_prolog_flag(quiet, on).
    5
    6print_const(X) :-
    7    display(X),
    8    dump_constraints(X,X,C),
    9    display(C).
   10
   11final(s0).
   12final(s2).
   13
   14path(A,B,R) :-
   15    A = s(s0,_,_), B = s(F,_,_),
   16    reach(A,B,R),
   17%       print_const(R),nl,
   18    final(F).
   19
   20:- table reach/3.   21reach(A,B,[A-Action,B]) :-
   22    trans(A,B,Action).
   23reach(A,B,[A-Action|R]) :-
   24    trans(A,Z,Action),
   25    reach(Z,B,R).
   26
   27trans(s(s0,T0, _C0), s(s1, T1, C1), drop(T1)) :-
   28    T1 .>=. T0 + 1,
   29    drop(T1),
   30    C1 .=. 0.
   31trans(s(s1,T1, _C1), s(s0, T00, C00), catch(T00)) :-
   32    T00 .>=. T1 + 1,
   33    C00 .=. T00 - T1,
   34    catch(T00),
   35    C00 .<. 2.
   36trans(s(s1,T1, _C1), s(s2, T2, C2), wait(T2)) :-
   37    T2 .>=. T1 + 1,
   38    C2 .=. T2 - T1,
   39    not catch(T2),
   40    C2 .>=. 2.
   41
   42catch(T) :- not negcatch(T).
   43negcatch(T) :- not catch(T).
   44
   45
   46run :-
   47    path(s(s0,0,0),s(_S,11,_C),R), T2 .=. T1 + 5, member(s(s0,T1,_)-drop(T2),R).
   48
   49% hold(T) :- T .>. 0.
   50% hold(T) :- T .<. Td, drop(Td), not falling(T), not broken(T).
   51% falling(T) :- not hold(T), not broken(T).
   52% broken(T) :- not hold(T), not falling(T).
   53
   54% drop(2).
   55%drop(T) :- T1 .<. T, T .<. T2, hold(T1), falling(T2).
   56
   57
   58
   59
   60% hold(T) :- T .=. 0.
   61% hold(T1) :-
   62%       T1 .>. Ti,
   63%       T1 .<. Td,
   64%       hold(Ti),
   65%       drop(Td).
   66
   67
   68
   69% findrange(M, N, X) :- driver(0, s0, 0, 0, X, R),
   70%       append(A, [f(catch, T2)|_], R), append(_, [f(drop, T1)|_], A),
   71%       N .<. T2 - T1, T2 .<. T1 + M, M .>. 0, N .>. 0.
   72
   73% append([],    L, L).
   74% append([X|A], B, [X|C]) :- append(A, B, C).
   75
   76% ball(s0, drop, s1, T1, T2, T3) :-
   77%       T3 .=. T1.
   78% ball(s1, catch, s0, T1, T2, T3) :-
   79%       T1 .=<. T2 + 1,
   80%       T3 .=. T2.
   81% ball(s1, wait, s2, T1, T2, T3) :-
   82%       T1 .>. T2 + 1,
   83%       T3 .=. T2.
   84
   85% driver(0,s0,T,T0,[X|Rst], [f(X,T)|R]) :-
   86%       ball(S0,X,S00,T,T0,T00),
   87% %     action(X,T),
   88%       TA .>. T,
   89% %     X = drop, N = 0,
   90%       driver(1, S00,TA,T00,Rst,R).
   91
   92% driver(N,S0,T,T0,[X|Rst], [f(X,T)|R]) :-
   93%       N > 0,
   94%       ball(S0,X,S00,T,T0,T00),
   95% %     action(X,T),
   96%       TA .>. T,
   97%       X \= drop, 
   98%       driver(N, S00,TA,T00,Rst,R).
   99
  100% driver(N,S0,T,T0,[X|Rst], [f(X,T)|R]) :-
  101%       ball(S0,X,S00,T,T0,T00),
  102% %     action(X,T),
  103%       TA .>. T,
  104%       (X = drop ; X = wait),
  105%        R = [], Rst = [], N>0.
  106
  107
  108
  109
  110% hold(T) :-
  111%       T1 .<. T,
  112%       T .<. T2,
  113%       init(T1),
  114%       drop(T2).
  115
  116
  117
  118
  119
  120
  121
  122% drop(T,T1,T2) :-
  123%       T1 .<. T2,
  124%       holding(T1,T),
  125%       not holding(T,T2).
  126
  127% holding(0,5).
  128
  129% not_holding(T,D) :- not holding(T,D).
  130
  131% :- holding(T,D), not_holding(T,D).
  132
  133
  134
  135
  136% :- use_package(clpr).
  137% :- op(700, fx,  [(not)]). 
  138
  139% n1(T) :-
  140%       holding(T),
  141%       not falling(T),
  142%       not broken(T).
  143% n2(T) :-
  144%       not holding(T),
  145%       falling(T),
  146%       not broken(T).
  147% n3(T) :-
  148%       not holding(T),
  149%       not falling(T),
  150%       broken(T).
  151
  152% edge(n1(T1),n2(T2),T1,T2) :-
  153%       T .>. T1 + 4,
  154%       drop(T),
  155% %     T2 .>. T1,
  156%       T1 .<. T,
  157%       T2 .>=. T.
  158
  159% edge(n2(T1), n1(T2),T1,T2) :-
  160%       catch(T),
  161% %     T2 .>. T1,
  162%       T1 .<. T,
  163%       T2 .>=. T,      
  164%       T2 .<. T + 1.
  165% edge(n2(T1), n3(T2),T1,T2) :-
  166%       not catch(T),
  167% %     T2 .>. T1,
  168%       T1 .<. T,
  169%       T2 .>=. T,      
  170%       T2 .>=. T + 1.
  171
  172% trans(S1,S2,T1,T2) :-
  173%       edge(S1,S2,T1,T2).
  174
  175% trans(S1,S2,T1,T2) :-
  176%       T2 .>. T1,
  177%       edge(S1,Si,T1,Ti),
  178%       trans(Si,S2,Ti,T2).