trans(N,Tb,Te):-
    time(Tb), time(Te), Tb <= Te,
    between(Tb1,Tb,Te),
    between(Te1,Tb1,Te),
    primitive(N,A),
    trans(A,Tb1,Te1).

trans(N,Tb,Te):-
    time(Tb), time(Te), Tb <= Te,
    htn(N,Tasks,Phi),    % set of Tasks, constraint Phi
    not bad(N,Tb,Te).

1{begin(N, I, Ti, Tb, Te):between(Ti,Tb,Te)}1:-
    time(Tb), time(Te), Tb <= Te,
    htn(N,Tasks,Phi),
    in(I, Tasks),
    trans(N,Tb,Te).

1{end(N, I, Ti, Tb, Te):between(Ti,Tb,Te)}1:-
    time(Tb), time(Te), Tb <= Te,
    htn(N,Tasks,Phi),
    in(I, Tasks),
    trans(N,Tb,Te).

between(Ti,Tb,Te):-
    time(Tb), time(Te), Tb <= Te,
    time(Te), Tb <= Ti, Ti <= Te.

:-  time(Tb), time(Te), Tb <= Te,
    htn(N,Tasks,Phi), in(I, Tasks),
    time(Tib), time(Tie),
    begin(N, I, Tib, Tb, Te),
    end(N, I, Tie, Tb, Te),
    Tib > Tie.

bad(N,Tb,Te):-
    time(Tb), time(Te), Tb <= Te,
    htn(N,Tasks,Phi),
    in(Ta, Tasks),
    time(Tab), time(Tae), Tab <= Tae,
    begin(N, Ta, Tab, Tb, Te),
    end(N, Ta, Tae, Tb, Te),
    not trans(Ta,Tab,Tae).

bad(N,Tb,Te):-
    time(Tb), time(Te), Tb <= Te,
    htn(N,Tasks,Phi),
    not trans(N,Tb,Te).

bad(N,Tb,Te):-
    time(Tb), time(Te), Tb <= Te,
    htn(N,Tasks,Phi),
    in(T1, Tasks),
    time(T1b), time(T1e), T1b <= T1e,
    begin(N, T1, T1b, Tb, Te),
    end(N, T1, T1e, Tb, Te),
    in(T2, Tasks),
    time(T2b), time(T2e), T2b <= T2e,
    begin(N, T2, T2b, Tb, Te),
    end(N, T2, T2e, Tb, Te),
    in(C, Phi),
    order(C, T1, T2),
    T1b > T2b.     

bad(N,Tb,Te):-
    time(Tb), time(Te), Tb <= Te,
    htn(N,Tasks,Phi),
    in(T1, Tasks),
    time(T1b), time(T1e), T1b <= T1e,
    begin(N, T1, T1b, Tb, Te),
    end(N, T1, T1e, Tb, Te),
    in(T2, Tasks),
    time(T2b), time(T2e), T2b <= T2e,
    begin(N, T2, T2b, Tb, Te),
    end(N, T2, T2e, Tb, Te),
    in(C, Phi), is_formula(F), 
    maintain(C, F, T1, T2),
    time(T3), T3 <=T2b, T1b <= T3, 
    not hf(F,T3).
    

bad(N,Tb,Te):-
    time(Tb), time(Te), Tb <= Te,
    htn(N,Tasks,Phi),
    in(T1, Tasks),
    time(T1b), time(T1e), T1b <= T1e,
    begin(N, T1, T1b, Tb, Te),
    end(N, T1, T1e, Tb, Te),
    in(C, Phi), is_formula(F), 
    precondition(C, F, T1),
    not hf(F, T1b-1).

bad(N,Tb,Te):-
    time(Tb), time(Te), Tb <= Te,
    htn(N,Tasks,Phi),
    in(T1, Tasks),
    time(T1b), time(T1e), T1b <= T1e,
    begin(N, T1, T1b, Tb, Te),
    end(N, T1, T1e, Tb, Te),
    in(C, Phi), is_formula(F), 
    postcondition(C, F, T1),
    is_formula(F), 
    not hf(F, T1e-1).

hide between(T,T1,T2).
hide bad(N,T1,T2).
