:- module tree234. :- use_module assoc_list, bool, builtin, int, list, private_builtin, require, std_util, term. :- type (tree234:tree234(K, V)) ---> empty ; two(K, V, (tree234:tree234(K, V)), (tree234:tree234(K, V))) ; three(K, V, K, V, (tree234:tree234(K, V)), (tree234:tree234(K, V)), (tree234:tree234(K, V))) ; four(K, V, K, V, K, V, (tree234:tree234(K, V)), (tree234:tree234(K, V)), (tree234:tree234(K, V)), (tree234:tree234(K, V))) . :- inst ((tree234:four(K, V, T))) = bound(four(K, V, K, V, K, V, T, T, T, T)). :- inst ((tree234:three(K, V, T))) = bound(three(K, V, K, V, T, T, T)). :- inst ((tree234:two(K, V, T))) = bound(two(K, V, T, T)). :- inst ((tree234:uniq_four(K, V, T))) = unique(four(K, V, K, V, K, V, T, T, T, T)). :- inst ((tree234:uniq_three(K, V, T))) = unique(three(K, V, K, V, T, T, T)). :- inst ((tree234:uniq_two(K, V, T))) = unique(two(K, V, T, T)). :- mode ((tree234:di_four)) :: builtin:di(tree234:uniq_four(unique, unique, unique)). :- mode ((tree234:di_three)) :: builtin:di(tree234:uniq_three(unique, unique, unique)). :- mode ((tree234:di_two)) :: builtin:di(tree234:uniq_two(unique, unique, unique)). :- mode ((tree234:in_four)) :: builtin:in(tree234:four(ground, ground, ground)). :- mode ((tree234:in_three)) :: builtin:in(tree234:three(ground, ground, ground)). :- mode ((tree234:in_two)) :: builtin:in(tree234:two(ground, ground, ground)). :- mode ((tree234:out_two)) :: builtin:out(tree234:two(ground, ground, ground)). :- mode ((tree234:sdi_four)) :: builtin:di(tree234:uniq_four(ground, ground, (tree234:uniq_tree234_gg))). :- mode ((tree234:sdi_three)) :: builtin:di(tree234:uniq_three(ground, ground, (tree234:uniq_tree234_gg))). :- mode ((tree234:sdi_two)) :: builtin:di(tree234:uniq_two(ground, ground, (tree234:uniq_tree234_gg))). :- mode ((tree234:suo_two)) :: builtin:out(tree234:uniq_two(ground, ground, (tree234:uniq_tree234_gg))). :- mode ((tree234:uo_two)) :: builtin:out(tree234:uniq_two(unique, unique, unique)). :- pred tree234:delete_2((tree234:tree234(K_1, V_2)), K_1, (tree234:tree234(K_1, V_2)), (bool:bool)). :- mode tree234:delete_2((builtin:di), (builtin:in), (builtin:uo), (builtin:out)) is det. :- mode tree234:delete_2((builtin:in), (builtin:in), (builtin:out), (builtin:out)) is det. :- pred tree234:remove_2((tree234:tree234(K_1, V_2)), K_1, V_2, (tree234:tree234(K_1, V_2)), (bool:bool)). :- mode tree234:remove_2((builtin:di), (builtin:in), (builtin:uo), (builtin:uo), (builtin:out)) is semidet. :- mode tree234:remove_2((builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:out)) is semidet. :- pred tree234:remove_smallest_2((tree234:tree234(K_1, V_2)), K_1, V_2, (tree234:tree234(K_1, V_2)), (bool:bool)). :- mode tree234:remove_smallest_2((builtin:di), (builtin:uo), (builtin:uo), (builtin:uo), (builtin:out)) is semidet. :- mode tree234:remove_smallest_2((builtin:in), (builtin:out), (builtin:out), (builtin:out), (builtin:out)) is semidet. :- pred tree234:keys_2((tree234:tree234(K_1, V_2)), (list:list(K_1)), (list:list(K_1))). :- mode tree234:keys_2((builtin:in), (builtin:in), (builtin:out)) is det. :- pred tree234:values_2((tree234:tree234(K_1, V_2)), (list:list(V_2)), (list:list(V_2))). :- mode tree234:values_2((builtin:in), (builtin:in), (builtin:out)) is det. :- pred tree234:assoc_list_to_tree234_2((list:list((std_util:pair(K_1, V_2)))), (tree234:tree234(K_1, V_2)), (tree234:tree234(K_1, V_2))). :- mode tree234:assoc_list_to_tree234_2((builtin:in), (builtin:in), (builtin:out)) is det. :- pred tree234:tree234_to_assoc_list_2((tree234:tree234(K_1, V_2)), (list:list((std_util:pair(K_1, V_2)))), (list:list((std_util:pair(K_1, V_2))))). :- mode tree234:tree234_to_assoc_list_2((builtin:in), (builtin:in), (builtin:out)) is det. tree234:init((tree234:empty)). tree234:init = T_2 :- tree234:init(T_2). tree234:is_empty(Tree_2) :- Tree_2 = tree234:empty. tree234:lookup(T_4, K_5) = V_6 :- tree234:lookup(T_4, K_5, V_6). tree234:set(T1_5, K_6, V_7) = T2_8 :- tree234:set(T1_5, K_6, V_7, T2_8). tree234:delete(Tin_4, K_5, Tout_6) :- tree234:delete_2(Tin_4, K_5, Tout_6, V_7). tree234:delete(T1_4, K_5) = T2_6 :- tree234:delete(T1_4, K_5, T2_6). tree234:remove(Tin_5, K_6, V_7, Tout_8) :- tree234:remove_2(Tin_5, K_6, V_7, Tout_8, V_9). tree234:remove_smallest(Tin_5, K_6, V_7, Tout_8) :- tree234:remove_smallest_2(Tin_5, K_6, V_7, Tout_8, V_9). tree234:keys(Tree_3, Keys_4) :- V_5 = list:[], tree234:keys_2(Tree_3, V_5, Keys_4). tree234:keys(T_3) = Ks_4 :- tree234:keys(T_3, Ks_4). tree234:values(Tree_3, Values_4) :- V_5 = list:[], tree234:values_2(Tree_3, V_5, Values_4). tree234:values(T_3) = Vs_4 :- tree234:values(T_3, Vs_4). tree234:count(T_3) = N_4 :- tree234:count(T_3, N_4). tree234:assoc_list_to_tree234(AssocList_3, Tree_4) :- V_5 = tree234:empty, tree234:assoc_list_to_tree234_2(AssocList_3, V_5, Tree_4). tree234:assoc_list_to_tree234(AL_3) = T_4 :- tree234:assoc_list_to_tree234(AL_3, T_4). tree234:tree234_to_assoc_list(Tree_3, AssocList_4) :- V_5 = list:[], tree234:tree234_to_assoc_list_2(Tree_3, V_5, AssocList_4). tree234:tree234_to_assoc_list(T_3) = AL_4 :- tree234:tree234_to_assoc_list(T_3, AL_4). tree234:foldl(_Pred_5, (tree234:empty), Acc_6, Acc_6). tree234:foldl(Pred_7, (tree234:two(K_8, V_9, T0_10, T1_11)), Acc0_12, Acc_13) :- tree234:foldl(Pred_7, T0_10, Acc0_12, Acc1_14), call(Pred_7, K_8, V_9, Acc1_14, Acc2_15), tree234:foldl(Pred_7, T1_11, Acc2_15, Acc_13). tree234:foldl(Pred_16, (tree234:three(K0_17, V0_18, K1_19, V1_20, T0_21, T1_22, T2_23)), Acc0_24, Acc_25) :- tree234:foldl(Pred_16, T0_21, Acc0_24, Acc1_26), call(Pred_16, K0_17, V0_18, Acc1_26, Acc2_27), tree234:foldl(Pred_16, T1_22, Acc2_27, Acc3_28), call(Pred_16, K1_19, V1_20, Acc3_28, Acc4_29), tree234:foldl(Pred_16, T2_23, Acc4_29, Acc_25). tree234:foldl(Pred_30, (tree234:four(K0_31, V0_32, K1_33, V1_34, K2_35, V2_36, T0_37, T1_38, T2_39, T3_40)), Acc0_41, Acc_42) :- tree234:foldl(Pred_30, T0_37, Acc0_41, Acc1_43), call(Pred_30, K0_31, V0_32, Acc1_43, Acc2_44), tree234:foldl(Pred_30, T1_38, Acc2_44, Acc3_45), call(Pred_30, K1_33, V1_34, Acc3_45, Acc4_46), tree234:foldl(Pred_30, T2_39, Acc4_46, Acc5_47), call(Pred_30, K2_35, V2_36, Acc5_47, Acc6_48), tree234:foldl(Pred_30, T3_40, Acc6_48, Acc_42). tree234:foldl(F_5, T_6, A_7) = B_8 :- P_9 = (pred(V_17::(builtin:in), V_16::(builtin:in), V_15::(builtin:in), V_14::(builtin:out)) is det :- some [] ( V_17 = W_18, V_16 = X_19, V_15 = Y_20, V_14 = Z_21, Z_21 = apply(F_5, W_18, X_19, Y_20) ) ), tree234:foldl(P_9, T_6, A_7, B_8). tree234:foldl2(_Pred_7, (tree234:empty), A_8, A_8, DCG_0_9, DCG_1_10) :- DCG_0_9 = DCG_1_10. tree234:foldl2(Pred_11, (tree234:two(K_12, V_13, T0_14, T1_15)), A0_16, A_17, DCG_0_20, DCG_3_23) :- tree234:foldl2(Pred_11, T0_14, A0_16, A1_18, DCG_0_20, DCG_1_21), call(Pred_11, K_12, V_13, A1_18, A2_19, DCG_1_21, DCG_2_22), tree234:foldl2(Pred_11, T1_15, A2_19, A_17, DCG_2_22, DCG_3_23). tree234:foldl2(Pred_24, (tree234:three(K0_25, V0_26, K1_27, V1_28, T0_29, T1_30, T2_31)), A0_32, A_33, DCG_0_38, DCG_5_43) :- tree234:foldl2(Pred_24, T0_29, A0_32, A1_34, DCG_0_38, DCG_1_39), call(Pred_24, K0_25, V0_26, A1_34, A2_35, DCG_1_39, DCG_2_40), tree234:foldl2(Pred_24, T1_30, A2_35, A3_36, DCG_2_40, DCG_3_41), call(Pred_24, K1_27, V1_28, A3_36, A4_37, DCG_3_41, DCG_4_42), tree234:foldl2(Pred_24, T2_31, A4_37, A_33, DCG_4_42, DCG_5_43). tree234:foldl2(Pred_44, (tree234:four(K0_45, V0_46, K1_47, V1_48, K2_49, V2_50, T0_51, T1_52, T2_53, T3_54)), A0_55, A_56, DCG_0_63, DCG_7_70) :- tree234:foldl2(Pred_44, T0_51, A0_55, A1_57, DCG_0_63, DCG_1_64), call(Pred_44, K0_45, V0_46, A1_57, A2_58, DCG_1_64, DCG_2_65), tree234:foldl2(Pred_44, T1_52, A2_58, A3_59, DCG_2_65, DCG_3_66), call(Pred_44, K1_47, V1_48, A3_59, A4_60, DCG_3_66, DCG_4_67), tree234:foldl2(Pred_44, T2_53, A4_60, A5_61, DCG_4_67, DCG_5_68), call(Pred_44, K2_49, V2_50, A5_61, A6_62, DCG_5_68, DCG_6_69), tree234:foldl2(Pred_44, T3_54, A6_62, A_56, DCG_6_69, DCG_7_70). tree234:map_values(_Pred_4, (tree234:empty), (tree234:empty)). tree234:map_values(Pred_5, Tree0_6, Tree_7) :- Tree0_6 = tree234:two(K0_8, V0_9, Left0_10, Right0_11), Tree_7 = tree234:two(K0_8, W0_12, Left_13, Right_14), call(Pred_5, K0_8, V0_9, W0_12), tree234:map_values(Pred_5, Left0_10, Left_13), tree234:map_values(Pred_5, Right0_11, Right_14). tree234:map_values(Pred_15, Tree0_16, Tree_17) :- Tree0_16 = tree234:three(K0_18, V0_19, K1_20, V1_21, Left0_22, Middle0_23, Right0_24), Tree_17 = tree234:three(K0_18, W0_25, K1_20, W1_26, Left_27, Middle_28, Right_29), call(Pred_15, K0_18, V0_19, W0_25), call(Pred_15, K1_20, V1_21, W1_26), tree234:map_values(Pred_15, Left0_22, Left_27), tree234:map_values(Pred_15, Middle0_23, Middle_28), tree234:map_values(Pred_15, Right0_24, Right_29). tree234:map_values(Pred_30, Tree0_31, Tree_32) :- Tree0_31 = tree234:four(K0_33, V0_34, K1_35, V1_36, K2_37, V2_38, Left0_39, LMid0_40, RMid0_41, Right0_42), Tree_32 = tree234:four(K0_33, W0_43, K1_35, W1_44, K2_37, W2_45, Left_46, LMid_47, RMid_48, Right_49), call(Pred_30, K0_33, V0_34, W0_43), call(Pred_30, K1_35, V1_36, W1_44), call(Pred_30, K2_37, V2_38, W2_45), tree234:map_values(Pred_30, Left0_39, Left_46), tree234:map_values(Pred_30, LMid0_40, LMid_47), tree234:map_values(Pred_30, RMid0_41, RMid_48), tree234:map_values(Pred_30, Right0_42, Right_49). tree234:map_values(F_4, T1_5) = T2_6 :- P_7 = (pred(V_13::(builtin:in), V_12::(builtin:in), V_11::(builtin:out)) is det :- some [] ( V_13 = X_14, V_12 = Y_15, V_11 = Z_16, Z_16 = apply(F_4, X_14, Y_15) ) ), tree234:map_values(P_7, T1_5, T2_6). tree234:map_foldl(_Pred_6, (tree234:empty), (tree234:empty), A_7, A_7). tree234:map_foldl(Pred_8, Tree0_9, Tree_10, A0_11, A_12) :- Tree0_9 = tree234:two(K0_13, V0_14, Left0_15, Right0_16), Tree_10 = tree234:two(K0_13, W0_17, Left_18, Right_19), tree234:map_foldl(Pred_8, Left0_15, Left_18, A0_11, A1_20), call(Pred_8, K0_13, V0_14, W0_17, A1_20, A2_21), tree234:map_foldl(Pred_8, Right0_16, Right_19, A2_21, A_12). tree234:map_foldl(Pred_22, Tree0_23, Tree_24, A0_25, A_26) :- Tree0_23 = tree234:three(K0_27, V0_28, K1_29, V1_30, Left0_31, Middle0_32, Right0_33), Tree_24 = tree234:three(K0_27, W0_34, K1_29, W1_35, Left_36, Middle_37, Right_38), tree234:map_foldl(Pred_22, Left0_31, Left_36, A0_25, A1_39), call(Pred_22, K0_27, V0_28, W0_34, A1_39, A2_40), tree234:map_foldl(Pred_22, Middle0_32, Middle_37, A2_40, A3_41), call(Pred_22, K1_29, V1_30, W1_35, A3_41, A4_42), tree234:map_foldl(Pred_22, Right0_33, Right_38, A4_42, A_26). tree234:map_foldl(Pred_43, Tree0_44, Tree_45, A0_46, A_47) :- Tree0_44 = tree234:four(K0_48, V0_49, K1_50, V1_51, K2_52, V2_53, Left0_54, LMid0_55, RMid0_56, Right0_57), Tree_45 = tree234:four(K0_48, W0_58, K1_50, W1_59, K2_52, W2_60, Left_61, LMid_62, RMid_63, Right_64), tree234:map_foldl(Pred_43, Left0_54, Left_61, A0_46, A1_65), call(Pred_43, K0_48, V0_49, W0_58, A1_65, A2_66), tree234:map_foldl(Pred_43, LMid0_55, LMid_62, A2_66, A3_67), call(Pred_43, K1_50, V1_51, W1_59, A3_67, A4_68), tree234:map_foldl(Pred_43, RMid0_56, RMid_63, A4_68, A5_69), call(Pred_43, K2_52, V2_53, W2_60, A5_69, A6_70), tree234:map_foldl(Pred_43, Right0_57, Right_64, A6_70, A_47). :- pragma termination_info(tree234:init((builtin:uo)), finite(0, [no, no, no]), cannot_loop). :- pragma termination_info((tree234:init) = (builtin:out), finite(0, [no, no, no]), cannot_loop). :- pragma termination_info(tree234:is_empty((builtin:in)), finite(0, [no, no, no]), cannot_loop). :- pragma termination_info(tree234:member((builtin:in), (builtin:out), (builtin:out)), finite(-4, [no, no, yes, no, no]), cannot_loop). :- pragma termination_info(tree234:search((builtin:in), (builtin:in), (builtin:out)), finite(-4, [no, no, yes, no, no]), cannot_loop). :- pragma termination_info(tree234:lookup((builtin:in), (builtin:in), (builtin:out)), finite(-4, [no, no, yes, no, no]), can_loop). :- pragma termination_info(tree234:lookup((builtin:in), (builtin:in)) = (builtin:out), finite(-4, [no, no, yes, no, no]), can_loop). :- pragma termination_info(tree234:lower_bound_search((builtin:in), (builtin:in), (builtin:out), (builtin:out)), finite(-4, [no, no, yes, yes, no, no]), cannot_loop). :- pragma termination_info(tree234:lower_bound_lookup((builtin:in), (builtin:in), (builtin:out), (builtin:out)), finite(-4, [no, no, yes, yes, no, no]), can_loop). :- pragma termination_info(tree234:upper_bound_search((builtin:in), (builtin:in), (builtin:out), (builtin:out)), finite(-4, [no, no, yes, yes, no, no]), cannot_loop). :- pragma termination_info(tree234:upper_bound_lookup((builtin:in), (builtin:in), (builtin:out), (builtin:out)), finite(-4, [no, no, yes, yes, no, no]), can_loop). :- pragma termination_info(tree234:insert((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, cannot_loop). :- pragma termination_info(tree234:set((builtin:di), (builtin:di), (builtin:di), (builtin:uo)), infinite, cannot_loop). :- pragma termination_info(tree234:set((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, cannot_loop). :- pragma termination_info(tree234:set((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(tree234:delete((builtin:di), (builtin:in), (builtin:uo)), infinite, can_loop). :- pragma termination_info(tree234:delete((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(tree234:delete((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(tree234:remove((builtin:di), (builtin:in), (builtin:uo), (builtin:uo)), infinite, can_loop). :- pragma termination_info(tree234:remove((builtin:in), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop). :- pragma termination_info(tree234:remove_smallest((builtin:di), (builtin:uo), (builtin:uo), (builtin:uo)), infinite, can_loop). :- pragma termination_info(tree234:remove_smallest((builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, can_loop). :- pragma termination_info(tree234:keys((builtin:in), (builtin:out)), finite(0, [no, no, yes, no]), cannot_loop). :- pragma termination_info(tree234:keys((builtin:in)) = (builtin:out), finite(0, [no, no, yes, no]), cannot_loop). :- pragma termination_info(tree234:values((builtin:in), (builtin:out)), finite(0, [no, no, yes, no]), cannot_loop). :- pragma termination_info(tree234:values((builtin:in)) = (builtin:out), finite(0, [no, no, yes, no]), cannot_loop). :- pragma termination_info(tree234:update((builtin:in), (builtin:in), (builtin:in), (builtin:out)), finite(0, [no, no, yes, no, yes, no]), cannot_loop). :- pragma termination_info(tree234:count((builtin:in), (builtin:out)), finite(0, [no, no, no, no]), cannot_loop). :- pragma termination_info(tree234:count((builtin:in)) = (builtin:out), finite(0, [no, no, no, no]), cannot_loop). :- pragma termination_info(tree234:assoc_list_to_tree234((builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(tree234:assoc_list_to_tree234((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(tree234:tree234_to_assoc_list((builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(tree234:tree234_to_assoc_list((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(tree234:foldl((pred((builtin:in), (builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(tree234:foldl((pred((builtin:in), (builtin:in), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(tree234:foldl((pred((builtin:in), (builtin:in), (builtin:di), (builtin:uo)) is det), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop). :- pragma termination_info(tree234:foldl((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(tree234: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(tree234: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(tree234: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(tree234: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(tree234:map_values((pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(tree234:map_values((pred((builtin:in), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(tree234:map_values((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(tree234:map_foldl((pred((builtin:in), (builtin:in), (builtin:out), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(tree234:map_foldl((pred((builtin:in), (builtin:in), (builtin:out), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop).