:- module rbtree.
:- use_module assoc_list, bool, builtin, int, list, maybe, pair, private_builtin, require, table_builtin.
:- type rbtree.rbtree(K, V)
	--->	empty 
	;	red(K, V, rbtree.rbtree(K, V), rbtree.rbtree(K, V))
	;	black(K, V, rbtree.rbtree(K, V), rbtree.rbtree(K, V)).
:- pred rbtree.delete_2(rbtree.rbtree(K_1, V_2), K_1, bool.bool, maybe.maybe(V_2), rbtree.rbtree(K_1, V_2)).
:- mode rbtree.delete_2((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.out)) is semidet.
:- mode rbtree.delete_2((builtin.in), (builtin.in), builtin.in(bound(no)), (builtin.out), (builtin.out)) is det.
rbtree.init = RBT_2 :-
    rbtree.init(RBT_2).
rbtree.init(rbtree.empty).
rbtree.singleton(K_4, V_5) = rbtree.black(K_4, V_5, V_6, V_7) :-
    V_6 = rbtree.empty : rbtree.rbtree(K_1, V_2),
    V_7 = rbtree.empty : rbtree.rbtree(K_1, V_2).
rbtree.is_empty(Tree_2) :-
    Tree_2 = rbtree.empty : rbtree.rbtree(K_1, V_2).
rbtree.set(STATE_VARIABLE_RBT_0_8, K_6, V_7) = STATE_VARIABLE_RBT_9 :-
    rbtree.set(K_6, V_7, STATE_VARIABLE_RBT_0_8, STATE_VARIABLE_RBT_9).
rbtree.insert_duplicate(STATE_VARIABLE_RBT_0_8, K_6, V_7) = STATE_VARIABLE_RBT_9 :-
    rbtree.insert_duplicate(K_6, V_7, STATE_VARIABLE_RBT_0_8, STATE_VARIABLE_RBT_9).
rbtree.lookup(RBT_4, K_5) = V_6 :-
    rbtree.lookup(RBT_4, K_5, V_6).
rbtree.delete(STATE_VARIABLE_RBT_0_6, K_5) = STATE_VARIABLE_RBT_7 :-
    rbtree.delete(K_5, STATE_VARIABLE_RBT_0_6, STATE_VARIABLE_RBT_7).
rbtree.delete(K_4, STATE_VARIABLE_Tree_0_7, STATE_VARIABLE_Tree_8) :-
    V_9 = bool.no : bool.bool,
    rbtree.delete_2(STATE_VARIABLE_Tree_0_7, K_4, V_9, V_6, STATE_VARIABLE_Tree_8).
rbtree.remove(K_5, V_6, STATE_VARIABLE_Tree_0_8, STATE_VARIABLE_Tree_9) :-
    V_10 = bool.yes : bool.bool,
    V_11 = maybe.yes(V_6) : maybe.maybe(V_2),
    rbtree.delete_2(STATE_VARIABLE_Tree_0_8, K_5, V_10, V_11, STATE_VARIABLE_Tree_9).
rbtree.keys(RBT_3) = Ks_4 :-
    rbtree.keys(RBT_3, Ks_4).
rbtree.values(RBT_3) = Vs_4 :-
    rbtree.values(RBT_3, Vs_4).
rbtree.count(RBT_3) = N_4 :-
    rbtree.count(RBT_3, N_4).
rbtree.assoc_list_to_rbtree(AL_3) = RBT_4 :-
    rbtree.assoc_list_to_rbtree(AL_3, RBT_4).
rbtree.from_assoc_list(AList_3) = HeadVar__2_2 :-
    HeadVar__2_2 = rbtree.assoc_list_to_rbtree(AList_3).
rbtree.rbtree_to_assoc_list(RBT_3) = AL_4 :-
    rbtree.rbtree_to_assoc_list(RBT_3, AL_4).
rbtree.to_assoc_list(T_3) = HeadVar__2_2 :-
    HeadVar__2_2 = rbtree.rbtree_to_assoc_list(T_3).
rbtree.foldl(F_5, T_6, A_7) = B_8 :-
    P_9 = (pred(V_14::(builtin.in), V_15::(builtin.in), V_16::(builtin.in), V_17::(builtin.out)) is det :-
      some [] (
        V_14 = W_18,
        V_15 = X_19,
        V_16 = Y_20,
        Z_21 = apply(F_5, W_18, X_19, Y_20),
        V_17 = Z_21
      )
    )
 : pred(K_1, V_2, T_3, T_3),
    rbtree.foldl(P_9, T_6, A_7, B_8).
rbtree.foldl(_Pred_5, rbtree.empty, STATE_VARIABLE_Acc_0_7, STATE_VARIABLE_Acc_8) :-
    STATE_VARIABLE_Acc_8 = STATE_VARIABLE_Acc_0_7.
rbtree.foldl(Pred_9, rbtree.red(K_10, V_11, Left_12, Right_13), STATE_VARIABLE_Acc_0_15, STATE_VARIABLE_Acc_16) :-
    rbtree.foldl(Pred_9, Left_12, STATE_VARIABLE_Acc_0_15, STATE_VARIABLE_Acc_17_17),
    call(Pred_9, K_10, V_11, STATE_VARIABLE_Acc_17_17, STATE_VARIABLE_Acc_18_18),
    rbtree.foldl(Pred_9, Right_13, STATE_VARIABLE_Acc_18_18, STATE_VARIABLE_Acc_16).
rbtree.foldl(Pred_20, rbtree.black(K_21, V_22, Left_23, Right_24), STATE_VARIABLE_Acc_0_26, STATE_VARIABLE_Acc_27) :-
    rbtree.foldl(Pred_20, Left_23, STATE_VARIABLE_Acc_0_26, STATE_VARIABLE_Acc_28_28),
    call(Pred_20, K_21, V_22, STATE_VARIABLE_Acc_28_28, STATE_VARIABLE_Acc_29_29),
    rbtree.foldl(Pred_20, Right_24, STATE_VARIABLE_Acc_29_29, STATE_VARIABLE_Acc_27).
rbtree.map_values(F_4, T1_5) = T2_6 :-
    P_7 = (pred(V_11::(builtin.in), V_12::(builtin.in), V_13::(builtin.out)) is det :-
      some [] (
        V_11 = X_14,
        V_12 = Y_15,
        Z_16 = apply(F_4, X_14, Y_15),
        V_13 = Z_16
      )
    )
 : pred(K_1, V_2, W_3),
    rbtree.map_values(P_7, T1_5, T2_6).
rbtree.map_values(_Pred_4, rbtree.empty, rbtree.empty).
rbtree.map_values(Pred_5, Tree0_6, Tree_7) :-
    Tree0_6 = rbtree.red(K0_8, V0_9, Left0_10, Right0_11) : rbtree.rbtree(K_1, V_2),
    call(Pred_5, K0_8, V0_9, W0_12),
    rbtree.map_values(Pred_5, Left0_10, Left_13),
    rbtree.map_values(Pred_5, Right0_11, Right_14),
    Tree_7 = rbtree.red(K0_8, W0_12, Left_13, Right_14) : rbtree.rbtree(K_1, W_3).
rbtree.map_values(Pred_15, Tree0_16, Tree_17) :-
    Tree0_16 = rbtree.black(K0_18, V0_19, Left0_20, Right0_21) : rbtree.rbtree(K_1, V_2),
    call(Pred_15, K0_18, V0_19, W0_22),
    rbtree.map_values(Pred_15, Left0_20, Left_23),
    rbtree.map_values(Pred_15, Right0_21, Right_24),
    Tree_17 = rbtree.black(K0_18, W0_22, Left_23, Right_24) : rbtree.rbtree(K_1, W_3).
:- pragma exceptions(function, (rbtree.init), 1, 0, will_not_throw).
:- pragma exceptions(predicate, (rbtree.init), 1, 0, will_not_throw).
:- pragma exceptions(function, (rbtree.singleton), 3, 0, will_not_throw).
:- pragma exceptions(predicate, (rbtree.is_empty), 1, 0, will_not_throw).
:- pragma exceptions(predicate, (rbtree.insert), 4, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.update), 4, 0, conditional).
:- pragma exceptions(predicate, (rbtree.transform_value), 4, 0, may_throw(user_exception)).
:- pragma exceptions(function, (rbtree.set), 4, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.set), 4, 0, may_throw(user_exception)).
:- pragma exceptions(function, (rbtree.insert_duplicate), 4, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.insert_duplicate), 4, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.member), 3, 0, will_not_throw).
:- pragma exceptions(predicate, (rbtree.search), 3, 0, conditional).
:- pragma exceptions(function, (rbtree.lookup), 3, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.lookup), 3, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.lower_bound_search), 4, 0, conditional).
:- pragma exceptions(predicate, (rbtree.lower_bound_lookup), 4, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.upper_bound_search), 4, 0, conditional).
:- pragma exceptions(predicate, (rbtree.upper_bound_lookup), 4, 0, may_throw(user_exception)).
:- pragma exceptions(function, (rbtree.delete), 3, 0, conditional).
:- pragma exceptions(predicate, (rbtree.delete), 3, 0, conditional).
:- pragma exceptions(predicate, (rbtree.remove), 4, 0, conditional).
:- pragma exceptions(predicate, (rbtree.remove_smallest), 4, 0, will_not_throw).
:- pragma exceptions(predicate, (rbtree.remove_largest), 4, 0, will_not_throw).
:- pragma exceptions(function, (rbtree.keys), 2, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.keys), 2, 0, may_throw(user_exception)).
:- pragma exceptions(function, (rbtree.values), 2, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.values), 2, 0, may_throw(user_exception)).
:- pragma exceptions(function, (rbtree.count), 2, 0, will_not_throw).
:- pragma exceptions(predicate, (rbtree.count), 2, 0, will_not_throw).
:- pragma exceptions(function, (rbtree.assoc_list_to_rbtree), 2, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.assoc_list_to_rbtree), 2, 0, may_throw(user_exception)).
:- pragma exceptions(function, (rbtree.from_assoc_list), 2, 0, may_throw(user_exception)).
:- pragma exceptions(function, (rbtree.rbtree_to_assoc_list), 2, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.rbtree_to_assoc_list), 2, 0, may_throw(user_exception)).
:- pragma exceptions(function, (rbtree.to_assoc_list), 2, 0, may_throw(user_exception)).
:- pragma exceptions(function, (rbtree.foldl), 4, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.foldl), 4, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.foldl), 4, 1, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.foldl), 4, 2, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.foldl), 4, 3, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.foldl), 4, 4, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.foldl), 4, 5, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.foldl2), 6, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.foldl2), 6, 1, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.foldl2), 6, 2, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.foldl2), 6, 3, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.foldl2), 6, 4, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.foldl2), 6, 5, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.foldl2), 6, 6, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.foldl3), 8, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.foldl3), 8, 1, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.foldl3), 8, 2, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.foldl3), 8, 3, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.foldl3), 8, 4, may_throw(user_exception)).
:- pragma exceptions(function, (rbtree.map_values), 3, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.map_values), 3, 0, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.map_values), 3, 1, may_throw(user_exception)).
:- pragma exceptions(predicate, (rbtree.delete_2), 5, 0, conditional).
:- pragma exceptions(predicate, (rbtree.delete_2), 5, 1, conditional).
:- pragma termination_info((rbtree.init) = (builtin.out), finite(0, [no, no, no]), cannot_loop).
:- pragma termination_info(rbtree.init((builtin.uo)), finite(0, [no, no, no]), cannot_loop).
:- pragma termination_info(rbtree.singleton((builtin.in), (builtin.in)) = (builtin.out), finite(4, [no, no, yes, yes, no]), cannot_loop).
:- pragma termination_info(rbtree.is_empty((builtin.in)), finite(0, [no, no, no]), cannot_loop).
:- pragma termination_info(rbtree.insert((builtin.in), (builtin.in), (builtin.in), (builtin.out)), finite(4, [no, no, yes, yes, yes, no]), can_loop).
:- pragma termination_info(rbtree.update((builtin.in), (builtin.in), (builtin.in), (builtin.out)), finite(0, [no, no, yes, yes, yes, no]), cannot_loop).
:- pragma termination_info(rbtree.transform_value(builtin.in((pred((builtin.in), (builtin.out)) is det)), (builtin.in), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(rbtree.set((builtin.in), (builtin.in), (builtin.in)) = (builtin.out), finite(4, [no, no, yes, yes, yes, no]), can_loop).
:- pragma termination_info(rbtree.set((builtin.in), (builtin.in), (builtin.in), (builtin.out)), finite(4, [no, no, yes, yes, yes, no]), can_loop).
:- pragma termination_info(rbtree.insert_duplicate((builtin.in), (builtin.in), (builtin.in)) = (builtin.out), finite(4, [no, no, yes, yes, yes, no]), can_loop).
:- pragma termination_info(rbtree.insert_duplicate((builtin.in), (builtin.in), (builtin.in), (builtin.out)), finite(4, [no, no, yes, yes, yes, no]), can_loop).
:- pragma termination_info(rbtree.member((builtin.in), (builtin.out), (builtin.out)), finite(-4, [no, no, yes, no, no]), cannot_loop).
:- pragma termination_info(rbtree.search((builtin.in), (builtin.in), (builtin.out)), finite(-4, [no, no, yes, no, no]), cannot_loop).
:- pragma termination_info(rbtree.lookup((builtin.in), (builtin.in)) = (builtin.out), finite(-4, [no, no, yes, no, no]), can_loop).
:- pragma termination_info(rbtree.lookup((builtin.in), (builtin.in), (builtin.out)), finite(-4, [no, no, yes, no, no]), can_loop).
:- pragma termination_info(rbtree.lower_bound_search((builtin.in), (builtin.in), (builtin.out), (builtin.out)), finite(-4, [no, no, yes, no, no, no]), cannot_loop).
:- pragma termination_info(rbtree.lower_bound_lookup((builtin.in), (builtin.in), (builtin.out), (builtin.out)), finite(-4, [no, no, yes, no, no, no]), can_loop).
:- pragma termination_info(rbtree.upper_bound_search((builtin.in), (builtin.in), (builtin.out), (builtin.out)), finite(-4, [no, no, yes, no, no, no]), cannot_loop).
:- pragma termination_info(rbtree.upper_bound_lookup((builtin.in), (builtin.in), (builtin.out), (builtin.out)), finite(-4, [no, no, yes, no, no, no]), can_loop).
:- pragma termination_info(rbtree.delete((builtin.in), (builtin.in)) = (builtin.out), finite(0, [no, no, yes, no, no]), cannot_loop).
:- pragma termination_info(rbtree.delete((builtin.in), (builtin.in), (builtin.out)), finite(0, [no, no, no, yes, no]), cannot_loop).
:- pragma termination_info(rbtree.remove((builtin.in), (builtin.out), (builtin.in), (builtin.out)), finite(-1, [no, no, no, no, yes, no]), cannot_loop).
:- pragma termination_info(rbtree.remove_smallest((builtin.out), (builtin.out), (builtin.in), (builtin.out)), finite(-4, [no, no, no, no, yes, no]), cannot_loop).
:- pragma termination_info(rbtree.remove_largest((builtin.out), (builtin.out), (builtin.in), (builtin.out)), finite(-4, [no, no, no, no, yes, no]), cannot_loop).
:- pragma termination_info(rbtree.keys((builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(rbtree.keys((builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(rbtree.values((builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(rbtree.values((builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(rbtree.count((builtin.in)) = (builtin.out), finite(0, [no, no, no, no]), cannot_loop).
:- pragma termination_info(rbtree.count((builtin.in), (builtin.out)), finite(0, [no, no, no, no]), cannot_loop).
:- pragma termination_info(rbtree.assoc_list_to_rbtree((builtin.in)) = (builtin.out), finite(0, [no, no, yes, no]), can_loop).
:- pragma termination_info(rbtree.assoc_list_to_rbtree((builtin.in), (builtin.out)), finite(0, [no, no, yes, no]), can_loop).
:- pragma termination_info(rbtree.from_assoc_list((builtin.in)) = (builtin.out), finite(0, [no, no, yes, no]), can_loop).
:- pragma termination_info(rbtree.rbtree_to_assoc_list((builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(rbtree.rbtree_to_assoc_list((builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(rbtree.to_assoc_list((builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(rbtree.foldl((builtin.in), (builtin.in), (builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(rbtree.foldl((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(rbtree.foldl((pred((builtin.in), (builtin.in), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.mdi), (builtin.muo)), infinite, can_loop).
:- pragma termination_info(rbtree.foldl((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.di), (builtin.uo)), infinite, can_loop).
:- pragma termination_info(rbtree.foldl((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(rbtree.foldl((pred((builtin.in), (builtin.in), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.mdi), (builtin.muo)), infinite, can_loop).
:- pragma termination_info(rbtree.foldl((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.di), (builtin.uo)), infinite, can_loop).
:- pragma termination_info(rbtree.foldl2((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(rbtree.foldl2((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)), infinite, can_loop).
:- pragma termination_info(rbtree.foldl2((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)), infinite, can_loop).
:- pragma termination_info(rbtree.foldl2((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)), infinite, can_loop).
:- pragma termination_info(rbtree.foldl2((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(rbtree.foldl2((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)), infinite, can_loop).
:- pragma termination_info(rbtree.foldl2((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)), infinite, can_loop).
:- pragma termination_info(rbtree.foldl3((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(rbtree.foldl3((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(rbtree.foldl3((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)), infinite, can_loop).
:- pragma termination_info(rbtree.foldl3((pred((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)), infinite, can_loop).
:- pragma termination_info(rbtree.foldl3((pred((builtin.in), (builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)), infinite, can_loop).
:- pragma termination_info(rbtree.map_values((builtin.in), (builtin.in)) = (builtin.out), infinite, can_loop).
:- pragma termination_info(rbtree.map_values((pred((builtin.in), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(rbtree.map_values((pred((builtin.in), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.out)), infinite, can_loop).
:- pragma termination_info(rbtree.delete_2((builtin.in), (builtin.in), (builtin.in), (builtin.out), (builtin.out)), finite(0, [no, no, yes, no, no, no, no]), cannot_loop).
:- pragma termination_info(rbtree.delete_2((builtin.in), (builtin.in), builtin.in(bound(no)), (builtin.out), (builtin.out)), finite(0, [no, no, yes, no, no, no, no]), cannot_loop).
