:- module list. :- use_module bintree_set, builtin, int, private_builtin, require, std_util, term. :- pred list:replace_nth_2((list:list(T_1)), int, T_1, (list:list(T_1))). :- mode list:replace_nth_2((builtin:in), (builtin:in), (builtin:in), (builtin:out)) is semidet. :- pred list:length_2((list:list(T_1)), int, int). :- mode list:length_2((builtin:in), (builtin:in), (builtin:out)) is det. :- pred list:reverse_2((list:list(T_1)), (list:list(T_1)), (list:list(T_1))). :- mode list:reverse_2((builtin:in), (builtin:in), (builtin:out)) is det. :- pred list:merge_sort((list:list(T_1)), (list:list(T_1))). :- mode list:merge_sort((builtin:in), (builtin:out)) is det. :- pragma type_spec(list:merge_sort((builtin:in), (builtin:out)), (T_1 = (term:var(V_2))), (list:'TypeSpecOf__pred__merge_sort__[T = var(V_2)]')). :- pred list:merge_sort_2(int, (list:list(T_1)), (list:list(T_1))). :- mode list:merge_sort_2((builtin:in), (builtin:in), (builtin:out)) is det. :- pragma type_spec(list:merge_sort_2((builtin:in), (builtin:in), (builtin:out)), (T_1 = (term:var(V_2))), (list:'TypeSpecOf__pred__merge_sort_2__[T = var(V_2)]')). :- pred list:remove_dups_2((list:list(T_1)), (bintree_set:bintree_set(T_1)), (list:list(T_1))). :- mode list:remove_dups_2((builtin:in), (builtin:in), (builtin:out)) is det. :- pred list:remove_adjacent_dups_2((list:list(T_1)), T_1, (list:list(T_1))). :- mode list:remove_adjacent_dups_2((builtin:in), (builtin:in), (builtin:out)) is det. :- pragma type_spec((list:remove_adjacent_dups_2)/3, (T_1 = (term:var(V_2))), (list:'TypeSpecOf__pred_or_func__remove_adjacent_dups_2__[T = var(V_2)]')). :- pred list:chunk_2((list:list(T_1)), int, (list:list(T_1)), int, (list:list((list:list(T_1))))). :- mode list:chunk_2((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:out)) is det. :- pred list:all_same_2(T_1, (list:list(T_1))). :- mode list:all_same_2((builtin:in), (builtin:in)) is semidet. :- pred list:remove_adjacent_dups_2(pred(T_1, T_1, (builtin:comparison_result)), (list:list(T_1)), T_1, (list:list(T_1))). :- mode list:remove_adjacent_dups_2(builtin:in((builtin:comparison_pred)), (builtin:in), (builtin:in), (builtin:out)) is det. :- pred list:hosort(pred(X_1, X_1, (builtin:comparison_result)), int, (list:list(X_1)), (list:list(X_1)), (list:list(X_1))). :- mode list:hosort(builtin:in((builtin:comparison_pred)), (builtin:in), (builtin:in), (builtin:out), (builtin:out)) is semidet. list:is_empty((list:[])). list:is_not_empty((list:[V_2 | V_3])). list:append(Xs_4, Ys_5) = Zs_6 :- list:append(Xs_4, Ys_5, Zs_6). list:(L1_4 ++ L2_5) = HeadVar__3_3 :- HeadVar__3_3 = list:append(L1_4, L2_5). list:remove_suffix(List_4, Suffix_5, Prefix_6) :- list:length(List_4, ListLength_7), list:length(Suffix_5, SuffixLength_8), PrefixLength_9 = int:(ListLength_7 - SuffixLength_8), list:split_list(PrefixLength_9, List_4, Prefix_6, Suffix_5). list:merge(Xs_4, Ys_5) = Zs_6 :- list:merge(Xs_4, Ys_5, Zs_6). list:merge_and_remove_dups(Xs_4, Ys_5) = Zs_6 :- list:merge_and_remove_dups(Xs_4, Ys_5, Zs_6). list:remove_adjacent_dups((list:[]), (list:[])). list:remove_adjacent_dups((list:[X_3 | Xs_4]), L_5) :- list:remove_adjacent_dups_2(Xs_4, X_3, L_5). list:remove_adjacent_dups(Xs_3) = Ys_4 :- list:remove_adjacent_dups(Xs_3, Ys_4). list:remove_dups(Xs_3, Ys_4) :- bintree_set:init(Zs0_5), list:remove_dups_2(Xs_3, Zs0_5, Ys_4). list:remove_dups(Xs_3) = Ys_4 :- list:remove_dups(Xs_3, Ys_4). list:member(X_3, (list:[X_3 | V_4])). list:member(X_5, (list:[V_6 | Xs_7])) :- list:member(X_5, Xs_7). list:member(Element_4, List_5, SubList_6) :- SubList_6 = list:[Element_4 | V_7], list:append(V_8, SubList_6, List_5). list:length(L_3, N_4) :- V_5 = 0, list:length_2(L_3, V_5, N_4). list:length(Xs_3) = N_4 :- list:length(Xs_3, N_4). list:same_length((list:[]), (list:[])). list:same_length((list:[V_3 | L1_4]), (list:[V_5 | L2_6])) :- list:same_length(L1_4, L2_6). list:take_upto(N_4, As_5, Bs_6) :- (if list:take(N_4, As_5, Bs0_7) then Bs_6 = Bs0_7 else Bs_6 = As_5 ). list:take_upto(N_4, Xs_5) = Ys_6 :- list:take_upto(N_4, Xs_5, Ys_6). list:insert(Elem_4, List0_5, List_6) :- list:delete(List_6, Elem_4, List0_5). list:delete_all(Xs_4, A_5) = Ys_6 :- list:delete_all(Xs_4, A_5, Ys_6). list:delete_elems(Xs_4, Ys_5) = Zs_6 :- list:delete_elems(Xs_4, Ys_5, Zs_6). list:replace_all(Xs_5, A_6, B_7) = Ys_8 :- list:replace_all(Xs_5, A_6, B_7, Ys_8). list:replace_nth(Xs_5, P_6, R_7, L_8) :- V_9 = 0, int:(P_6 > V_9), list:replace_nth_2(Xs_5, P_6, R_7, L_8). list:replace_nth_det(Xs_5, N_6, A_7) = Ys_8 :- list:replace_nth_det(Xs_5, N_6, A_7, Ys_8). list:sort_and_remove_dups(L0_3, L_4) :- list:merge_sort(L0_3, L1_5), list:remove_adjacent_dups(L1_5, L_4). list:sort_and_remove_dups(Xs_3) = Ys_4 :- list:sort_and_remove_dups(Xs_3, Ys_4). list:sort(L0_3, L_4) :- list:merge_sort(L0_3, L_4). list:sort(Xs_3) = Ys_4 :- list:sort(Xs_3, Ys_4). list:reverse(L0_3, L_4) :- V_5 = list:[], list:reverse_2(L0_3, V_5, L_4). list:reverse(Xs_3) = Ys_4 :- list:reverse(Xs_3, Ys_4). list:index1(List_4, N_5, Elem_6) :- N1_7 = int:(N_5 - V_8), V_8 = 1, list:index0(List_4, N1_7, Elem_6). list:index1_det(List_4, N_5, Elem_6) :- N1_7 = int:(N_5 - V_8), V_8 = 1, list:index0_det(List_4, N1_7, Elem_6). list:index0_det(Xs_4, N_5) = A_6 :- list:index0_det(Xs_4, N_5, A_6). list:index1_det(Xs_4, N_5) = A_6 :- list:index1_det(Xs_4, N_5, A_6). list:zip(Xs_4, Ys_5) = Zs_6 :- list:zip(Xs_4, Ys_5, Zs_6). list:duplicate(N_4, A_5) = Xs_6 :- list:duplicate(N_4, A_5, Xs_6). list:condense(Xss_3) = Ys_4 :- list:condense(Xss_3, Ys_4). list:chunk(List_4, ChunkSize_5, ListOfSmallLists_6) :- V_7 = list:[], V_8 = ChunkSize_5, list:chunk_2(List_4, ChunkSize_5, V_7, V_8, ListOfSmallLists_6). list:chunk(Xs_4, N_5) = Ys_6 :- list:chunk(Xs_4, N_5, Ys_6). list:all_same((list:[])). list:all_same((list:[H_2 | T_3])) :- list:all_same_2(H_2, T_3). list:map(V_4, (list:[]), (list:[])). list:map(P_5, (list:[H0_6 | T0_7]), (list:[H_8 | T_9])) :- call(P_5, H0_6, H_8), list:map(P_5, T0_7, T_9). list:map(F_4, Xs_5) = Ys_6 :- P_7 = (pred(V_11::(builtin:in), V_10::(builtin:out)) is det :- some [] ( V_11 = X_12, V_10 = Y_13, Y_13 = apply(F_4, X_12) ) ), list:map(P_7, Xs_5, Ys_6). list:map2(V_5, (list:[]), (list:[]), (list:[])). list:map2(P_6, (list:[H0_7 | T0_8]), (list:[H1_9 | T1_10]), (list:[H2_11 | T2_12])) :- call(P_6, H0_7, H1_9, H2_11), list:map2(P_6, T0_8, T1_10, T2_12). list:map3(V_6, (list:[]), (list:[]), (list:[]), (list:[])). list:map3(P_7, (list:[H0_8 | T0_9]), (list:[H1_10 | T1_11]), (list:[H2_12 | T2_13]), (list:[H3_14 | T3_15])) :- call(P_7, H0_8, H1_10, H2_12, H3_14), list:map3(P_7, T0_9, T1_11, T2_13, T3_15). list:map_corresponding(V_5, (list:[]), (list:[])) = (list:[]). list:map_corresponding(V_6, (list:[]), (list:[V_7 | V_8])) = HeadVar__4_4 :- HeadVar__4_4 = require:func_error(V_9), V_9 = "list__map_corresponding/3: mismatched list arguments". list:map_corresponding(V_10, (list:[V_11 | V_12]), (list:[])) = HeadVar__4_4 :- HeadVar__4_4 = require:func_error(V_13), V_13 = "list__map_corresponding/3: mismatched list arguments". list:map_corresponding(F_14, (list:[A_15 | As_16]), (list:[B_17 | Bs_18])) = (list:[V_19 | V_20]) :- V_19 = apply(F_14, A_15, B_17), V_20 = list:map_corresponding(F_14, As_16, Bs_18). list:map_corresponding3(F_6, As_7, Bs_8, Cs_9) = HeadVar__5_5 :- (if As_7 = list:[A_10 | As0_11], Bs_8 = list:[B_12 | Bs0_13], Cs_9 = list:[C_14 | Cs0_15] then HeadVar__5_5 = list:[V_16 | V_17], V_16 = apply(F_6, A_10, B_12, C_14), V_17 = list:map_corresponding3(F_6, As0_11, Bs0_13, Cs0_15) else (if As_7 = list:[], Bs_8 = list:[], Cs_9 = list:[] then HeadVar__5_5 = list:[] else HeadVar__5_5 = require:func_error(V_18), V_18 = "list__map_corresponding3: mismatched list arguments" ) ). list:filter_map_corresponding(V_5, (list:[]), (list:[])) = (list:[]). list:filter_map_corresponding(V_6, (list:[]), (list:[V_7 | V_8])) = HeadVar__4_4 :- HeadVar__4_4 = require:func_error(V_9), V_9 = "list__filter_map_corresponding/3: mismatched list arguments". list:filter_map_corresponding(V_10, (list:[V_11 | V_12]), (list:[])) = HeadVar__4_4 :- HeadVar__4_4 = require:func_error(V_13), V_13 = "list__filter_map_corresponding/3: mismatched list arguments". list:filter_map_corresponding(F_14, (list:[A_15 | As_16]), (list:[B_17 | Bs_18])) = HeadVar__4_4 :- (if C_19 = apply(F_14, A_15, B_17) then HeadVar__4_4 = list:[C_19 | V_20], V_20 = list:filter_map_corresponding(F_14, As_16, Bs_18) else HeadVar__4_4 = list:filter_map_corresponding(F_14, As_16, Bs_18) ). list:filter_map_corresponding3(F_6, As_7, Bs_8, Cs_9) = HeadVar__5_5 :- (if As_7 = list:[A_10 | As0_11], Bs_8 = list:[B_12 | Bs0_13], Cs_9 = list:[C_14 | Cs0_15] then (if D_16 = apply(F_6, A_10, B_12, C_14) then HeadVar__5_5 = list:[D_16 | V_17], V_17 = list:filter_map_corresponding3(F_6, As0_11, Bs0_13, Cs0_15) else HeadVar__5_5 = list:filter_map_corresponding3(F_6, As0_11, Bs0_13, Cs0_15) ) else (if As_7 = list:[], Bs_8 = list:[], Cs_9 = list:[] then HeadVar__5_5 = list:[] else HeadVar__5_5 = require:func_error(V_18), V_18 = "list__filter_map_corresponding3: mismatched list arguments" ) ). list:foldl(V_5, (list:[]), Acc_6, Acc_6). list:foldl(P_7, (list:[H_8 | T_9]), Acc0_10, Acc_11) :- call(P_7, H_8, Acc0_10, Acc1_12), list:foldl(P_7, T_9, Acc1_12, Acc_11). list:foldl(F_5, Xs_6, A_7) = B_8 :- P_9 = (pred(V_15::(builtin:in), V_14::(builtin:in), V_13::(builtin:out)) is det :- some [] ( V_15 = X_16, V_14 = Y_17, V_13 = Z_18, Z_18 = apply(F_5, X_16, Y_17) ) ), list:foldl(P_9, Xs_6, A_7, B_8). list:foldr(V_5, (list:[]), Acc_6, Acc_6). list:foldr(P_7, (list:[H_8 | T_9]), Acc0_10, Acc_11) :- list:foldr(P_7, T_9, Acc0_10, Acc1_12), call(P_7, H_8, Acc1_12, Acc_11). list:foldr(F_5, Xs_6, A_7) = B_8 :- P_9 = (pred(V_15::(builtin:in), V_14::(builtin:in), V_13::(builtin:out)) is det :- some [] ( V_15 = X_16, V_14 = Y_17, V_13 = Z_18, Z_18 = apply(F_5, X_16, Y_17) ) ), list:foldr(P_9, Xs_6, A_7, B_8). list:foldl2(V_7, (list:[]), FirstAcc_8, FirstAcc_8, SecAcc_9, SecAcc_9). list:foldl2(P_10, (list:[H_11 | T_12]), FirstAcc0_13, FirstAcc_14, SecAcc0_15, SecAcc_16) :- call(P_10, H_11, FirstAcc0_13, FirstAcc1_17, SecAcc0_15, SecAcc1_18), list:foldl2(P_10, T_12, FirstAcc1_17, FirstAcc_14, SecAcc1_18, SecAcc_16). list:foldl3(V_9, (list:[]), FirstAcc_10, FirstAcc_10, SecAcc_11, SecAcc_11, ThirdAcc_12, ThirdAcc_12). list:foldl3(P_13, (list:[H_14 | T_15]), FirstAcc0_16, FirstAcc_17, SecAcc0_18, SecAcc_19, ThirdAcc0_20, ThirdAcc_21) :- call(P_13, H_14, FirstAcc0_16, FirstAcc1_22, SecAcc0_18, SecAcc1_23, ThirdAcc0_20, ThirdAcc1_24), list:foldl3(P_13, T_15, FirstAcc1_22, FirstAcc_17, SecAcc1_23, SecAcc_19, ThirdAcc1_24, ThirdAcc_21). list:map_foldl(V_6, (list:[]), (list:[]), DCG_0_7, DCG_1_8) :- DCG_0_7 = DCG_1_8. list:map_foldl(P_9, (list:[H0_10 | T0_11]), (list:[H_12 | T_13]), DCG_0_14, DCG_2_16) :- call(P_9, H0_10, H_12, DCG_0_14, DCG_1_15), list:map_foldl(P_9, T0_11, T_13, DCG_1_15, DCG_2_16). list:map_foldl2(V_8, (list:[]), (list:[]), A_9, A_9, DCG_0_10, DCG_1_11) :- DCG_0_10 = DCG_1_11. list:map_foldl2(P_12, (list:[H0_13 | T0_14]), (list:[H_15 | T_16]), A0_17, A_18, DCG_0_20, DCG_2_22) :- call(P_12, H0_13, H_15, A0_17, A1_19, DCG_0_20, DCG_1_21), list:map_foldl2(P_12, T0_14, T_16, A1_19, A_18, DCG_1_21, DCG_2_22). list:filter(P_4, Xs_5, Ys_6) :- list:filter(P_4, Xs_5, Ys_6, V_7). list:filter(P_4, Xs_5) = Ys_6 :- list:filter(P_4, Xs_5, Ys_6). list:filter(V_5, (list:[]), (list:[]), (list:[])). list:filter(P_6, (list:[H_7 | T_8]), L_9, M_10) :- (if call(P_6, H_7) then L_9 = list:[H_7 | L1_11], M_10 = M1_12 else L_9 = L1_11, M_10 = list:[H_7 | M1_12] ), list:filter(P_6, T_8, L1_11, M1_12). list:filter_map(V_4, (list:[]), (list:[])). list:filter_map(P_5, (list:[H0_6 | T0_7]), L_8) :- (if call(P_5, H0_6, H_9) then L_8 = list:[H_9 | L1_10] else L_8 = L1_10 ), list:filter_map(P_5, T0_7, L1_10). list:filter_map(F_4, Xs_5) = Ys_6 :- P_7 = (pred(V_11::(builtin:in), V_10::(builtin:out)) is semidet :- some [] ( V_11 = X_12, V_10 = Y_13, Y_13 = apply(F_4, X_12) ) ), list:filter_map(P_7, Xs_5, Ys_6). list:filter_map(V_5, (list:[]), (list:[]), (list:[])). list:filter_map(P_6, (list:[H0_7 | T0_8]), L_9, M_10) :- (if call(P_6, H0_7, H_11) then L_9 = list:[H_11 | L1_12], M_10 = M1_13 else L_9 = L1_12, M_10 = list:[H0_7 | M1_13] ), list:filter_map(P_6, T0_8, L1_12, M1_13). list:takewhile(V_5, (list:[]), (list:[]), (list:[])). list:takewhile(P_6, (list:[X_7 | Xs_8]), Ins_9, Outs_10) :- (if call(P_6, X_7) then Ins_9 = list:[X_7 | Ins0_11], list:takewhile(P_6, Xs_8, Ins0_11, Outs_10) else Ins_9 = list:[], Outs_10 = list:[X_7 | Xs_8] ). list:sort(P_4, L0_5, L_6) :- list:length(L0_5, N_7), (if N_7 = 0 then L_6 = list:[] else (if V_9 = list:[], list:hosort(P_4, N_7, L0_5, L1_8, V_9) then L_6 = L1_8 else V_10 = "hosort failed", require:error(V_10) ) ). list:sort(F_4, Xs_5) = Ys_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) ) ), list:sort(P_7, Xs_5, Ys_6). list:sort_and_remove_dups(P_4, L0_5, L_6) :- list:sort(P_4, L0_5, L1_7), list:remove_adjacent_dups(P_4, L1_7, L_6). list:remove_adjacent_dups(V_4, (list:[]), (list:[])). list:remove_adjacent_dups(P_5, (list:[X_6 | Xs_7]), L_8) :- list:remove_adjacent_dups_2(P_5, Xs_7, X_6, L_8). list:merge(_P_5, (list:[]), (list:[]), (list:[])). list:merge(_P_6, (list:[]), (list:[Y_7 | Ys_8]), (list:[Y_7 | Ys_8])). list:merge(_P_9, (list:[X_10 | Xs_11]), (list:[]), (list:[X_10 | Xs_11])). list:merge(P_12, (list:[H1_13 | T1_14]), (list:[H2_15 | T2_16]), L_17) :- (if V_19 = builtin:(>), call(P_12, H1_13, H2_15, V_19) then L_17 = list:[H2_15 | T_18], V_20 = list:[H1_13 | T1_14], list:merge(P_12, V_20, T2_16, T_18) else L_17 = list:[H1_13 | T_22], V_21 = list:[H2_15 | T2_16], list:merge(P_12, T1_14, V_21, T_22) ). list:merge(F_5, Xs_6, Ys_7) = Zs_8 :- P_9 = (pred(V_15::(builtin:in), V_14::(builtin:in), V_13::(builtin:out)) is det :- some [] ( V_15 = X_16, V_14 = Y_17, V_13 = Z_18, Z_18 = apply(F_5, X_16, Y_17) ) ), list:merge(P_9, Xs_6, Ys_7, Zs_8). list:merge_and_remove_dups(_P_5, (list:[]), (list:[]), (list:[])). list:merge_and_remove_dups(_P_6, (list:[]), (list:[Y_7 | Ys_8]), (list:[Y_7 | Ys_8])). list:merge_and_remove_dups(_P_9, (list:[X_10 | Xs_11]), (list:[]), (list:[X_10 | Xs_11])). list:merge_and_remove_dups(P_12, (list:[H1_13 | T1_14]), (list:[H2_15 | T2_16]), L_17) :- call(P_12, H1_13, H2_15, C_18), ( % disjunction C_18 = builtin:(<), L_17 = list:[H1_13 | T_19], V_21 = list:[H2_15 | T2_16], list:merge_and_remove_dups(P_12, T1_14, V_21, T_19) ; C_18 = builtin:(=), L_17 = list:[H1_13 | T_22], list:merge_and_remove_dups(P_12, T1_14, T2_16, T_22) ; C_18 = builtin:(>), L_17 = list:[H2_15 | T_23], V_20 = list:[H1_13 | T1_14], list:merge_and_remove_dups(P_12, V_20, T2_16, T_23) ). list:merge_and_remove_dups(F_5, Xs_6, Ys_7) = Zs_8 :- P_9 = (pred(V_15::(builtin:in), V_14::(builtin:in), V_13::(builtin:out)) is det :- some [] ( V_15 = X_16, V_14 = Y_17, V_13 = Z_18, Z_18 = apply(F_5, X_16, Y_17) ) ), list:merge_and_remove_dups(P_9, Xs_6, Ys_7, Zs_8). list:series(I_5, OK_6, Succ_7) = HeadVar__4_4 :- (if call(OK_6, I_5) then HeadVar__4_4 = list:[I_5 | V_8], V_8 = list:series(V_9, OK_6, Succ_7), V_9 = apply(Succ_7, I_5) else HeadVar__4_4 = list:[] ). list:'..'(Lo_4, Hi_5) = HeadVar__3_3 :- HeadVar__3_3 = list:series(Lo_4, V_7, V_8), V_7 = (pred(V_9::(builtin:in)) is semidet :- some [] ( V_9 = I_11, int:(I_11 =< Hi_5) ) ), V_8 = int:plus(V_10), V_10 = 1. list:merge_sort(List_3, SortedList_4) :- V_5 = list:length(List_3), list:merge_sort_2(V_5, List_3, SortedList_4). list:all_same_2(V_3, (list:[])). list:all_same_2(H_4, (list:[H_4 | T_5])) :- list:all_same_2(H_4, T_5). list:remove_adjacent_dups_2(V_5, (list:[]), X_6, (list:[X_6 | V_7])) :- V_7 = list:[]. list:remove_adjacent_dups_2(P_8, (list:[X1_9 | Xs_10]), X0_11, L_12) :- (if V_14 = builtin:(=), call(P_8, X0_11, X1_9, V_14) then list:remove_adjacent_dups_2(P_8, Xs_10, X0_11, L_12) else L_12 = list:[X0_11 | L0_13], list:remove_adjacent_dups_2(P_8, Xs_10, X1_9, L0_13) ). list:hosort(P_6, N_7, L0_8, L_9, Rest_10) :- (if N_7 = 1 then L0_8 = list:[X_11 | Rest_10], L_9 = list:[X_11 | V_19], V_19 = list:[] else (if N_7 = 2 then L0_8 = list:[X_28 | V_20], V_20 = list:[Y_12 | Rest_10], call(P_6, X_28, Y_12, C_13), ( % disjunction C_13 = builtin:(<), L_9 = list:[X_28 | V_25], V_25 = list:[Y_12 | V_26], V_26 = list:[] ; C_13 = builtin:(=), L_9 = list:[X_28 | V_23], V_23 = list:[Y_12 | V_24], V_24 = list:[] ; C_13 = builtin:(>), L_9 = list:[Y_12 | V_21], V_21 = list:[X_28 | V_22], V_22 = list:[] ) else N1_14 = int:(N_7 // V_27), V_27 = 2, list:hosort(P_6, N1_14, L0_8, L1_15, Middle_16), N2_17 = int:(N_7 - N1_14), list:hosort(P_6, N2_17, Middle_16, L2_18, Rest_10), list:merge(P_6, L1_15, L2_18, L_9) ) ). :- promise all [A, B, C, ABC] ( \+ ( some [] ( list:append(A, B, AB), list:append(AB, C, ABC) ), \+ ( some [] ( list:append(B, C, BC), list:append(A, BC, ABC) ) ) ), \+ ( some [] ( list:append(B, C, BC), list:append(A, BC, ABC) ), \+ ( some [] ( list:append(A, B, AB), list:append(AB, C, ABC) ) ) )). :- promise all [L, H, T] ( \+ ( V_4 = list:[H | V_5], V_5 = list:[], list:append(V_4, T, L), \+ ( L = list:[H | T] ) ), \+ ( L = list:[H | T], \+ ( V_6 = list:[H | V_7], V_7 = list:[], list:append(V_6, T, L) ) )). :- pragma termination_info(list:is_empty((builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(list:is_not_empty((builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(list:append((builtin:di), (builtin:di), (builtin:uo)), finite(0, [no, yes, yes, no]), cannot_loop). :- pragma termination_info(list:append((builtin:in), (builtin:in), (builtin:out)), finite(0, [no, yes, yes, no]), cannot_loop). :- pragma termination_info(list:append((builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no]), cannot_loop). :- pragma termination_info(list:append((builtin:in), (builtin:out), (builtin:in)), finite(0, [no, no, no, yes]), cannot_loop). :- pragma termination_info(list:append((builtin:out), (builtin:out), (builtin:in)), finite(0, [no, no, no, yes]), cannot_loop). :- pragma termination_info(list:append((builtin:in), (builtin:in)) = (builtin:out), finite(0, [no, yes, yes, no]), cannot_loop). :- pragma termination_info(list:'++'((builtin:in), (builtin:in)) = (builtin:out), finite(0, [no, yes, yes, no]), cannot_loop). :- pragma termination_info(list:remove_suffix((builtin:in), (builtin:in), (builtin:out)), finite(0, [no, yes, no, no]), cannot_loop). :- pragma termination_info(list:merge((builtin:in), (builtin:in), (builtin:out)), finite(0, [no, yes, yes, no]), cannot_loop). :- pragma termination_info(list:merge((builtin:in), (builtin:in)) = (builtin:out), finite(0, [no, yes, yes, no]), cannot_loop). :- pragma termination_info(list:merge_and_remove_dups((builtin:in), (builtin:in), (builtin:out)), finite(0, [no, yes, yes, no]), cannot_loop). :- pragma termination_info(list:merge_and_remove_dups((builtin:in), (builtin:in)) = (builtin:out), finite(0, [no, yes, yes, no]), cannot_loop). :- pragma termination_info(list:remove_adjacent_dups((builtin:in), (builtin:out)), finite(0, [no, yes, no]), cannot_loop). :- pragma termination_info(list:remove_adjacent_dups((builtin:in)) = (builtin:out), finite(0, [no, yes, no]), cannot_loop). :- pragma termination_info(list:remove_dups((builtin:in), (builtin:out)), finite(0, [no, yes, no]), can_loop). :- pragma termination_info(list:remove_dups((builtin:in)) = (builtin:out), finite(0, [no, yes, no]), can_loop). :- pragma termination_info(list:member((builtin:in), (builtin:in)), finite(0, [no, no, no]), cannot_loop). :- pragma termination_info(list:member((builtin:out), (builtin:in)), finite(-2, [no, no, yes]), cannot_loop). :- pragma termination_info(list:member((builtin:out), (builtin:in), (builtin:out)), infinite, cannot_loop). :- pragma termination_info(list:length((builtin:in), (builtin:out)), finite(0, [no, no, no]), cannot_loop). :- pragma termination_info(list:length((builtin:in)) = (builtin:out), finite(0, [no, no, no]), cannot_loop). :- pragma termination_info(list:same_length((builtin:in), (list:output_list_skel)), infinite, cannot_loop). :- pragma termination_info(list:same_length((list:output_list_skel), (builtin:in)), infinite, cannot_loop). :- pragma termination_info(list:same_length((builtin:in), (builtin:in)), finite(0, [no, no, no, no]), cannot_loop). :- pragma termination_info(list:split_list((builtin:in), (builtin:in), (builtin:out), (builtin:out)), finite(0, [no, no, yes, no, no]), cannot_loop). :- pragma termination_info(list:take((builtin:in), (builtin:in), (builtin:out)), finite(0, [no, no, yes, no]), cannot_loop). :- pragma termination_info(list:take_upto((builtin:in), (builtin:in), (builtin:out)), finite(0, [no, no, yes, no]), cannot_loop). :- pragma termination_info(list:take_upto((builtin:in), (builtin:in)) = (builtin:out), finite(0, [no, no, yes, no]), cannot_loop). :- pragma termination_info(list:drop((builtin:in), (builtin:in), (builtin:out)), finite(0, [no, no, yes, no]), cannot_loop). :- pragma termination_info(list:insert((builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no]), cannot_loop). :- pragma termination_info(list:insert((builtin:in), (builtin:out), (builtin:in)), finite(-2, [no, no, no, yes]), cannot_loop). :- pragma termination_info(list:insert((builtin:out), (builtin:out), (builtin:in)), finite(-2, [no, no, no, yes]), cannot_loop). :- pragma termination_info(list:insert((builtin:in), (builtin:in), (builtin:out)), finite(2, [no, yes, yes, no]), cannot_loop). :- pragma termination_info(list:delete((builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no]), cannot_loop). :- pragma termination_info(list:delete((builtin:in), (builtin:in), (builtin:out)), finite(-2, [no, yes, no, no]), cannot_loop). :- pragma termination_info(list:delete((builtin:in), (builtin:out), (builtin:out)), finite(-2, [no, yes, no, no]), cannot_loop). :- pragma termination_info(list:delete((builtin:out), (builtin:in), (builtin:in)), finite(2, [no, no, yes, yes]), cannot_loop). :- pragma termination_info(list:delete_all((builtin:in), (builtin:in)) = (builtin:out), finite(0, [no, yes, no, no]), cannot_loop). :- pragma termination_info(list:delete_first((builtin:in), (builtin:in), (builtin:out)), finite(-2, [no, yes, no, no]), cannot_loop). :- pragma termination_info(list:delete_all((builtin:di), (builtin:in), (builtin:uo)), finite(0, [no, yes, no, no]), cannot_loop). :- pragma termination_info(list:delete_all((builtin:in), (builtin:in), (builtin:out)), finite(0, [no, yes, no, no]), cannot_loop). :- pragma termination_info(list:delete_elems((builtin:in), (builtin:in), (builtin:out)), finite(0, [no, yes, no, no]), cannot_loop). :- pragma termination_info(list:delete_elems((builtin:in), (builtin:in)) = (builtin:out), finite(0, [no, yes, no, no]), cannot_loop). :- pragma termination_info(list:replace((builtin:in), (builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no, no]), cannot_loop). :- pragma termination_info(list:replace((builtin:in), (builtin:in), (builtin:in), (builtin:out)), finite(0, [no, yes, no, yes, no]), cannot_loop). :- pragma termination_info(list:replace_first((builtin:in), (builtin:in), (builtin:in), (builtin:out)), finite(0, [no, yes, no, yes, no]), cannot_loop). :- pragma termination_info(list:replace_all((builtin:in), (builtin:in), (builtin:in), (builtin:out)), infinite, cannot_loop). :- pragma termination_info(list:replace_all((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(list:replace_nth((builtin:in), (builtin:in), (builtin:in), (builtin:out)), finite(0, [no, yes, no, yes, no]), cannot_loop). :- pragma termination_info(list:replace_nth_det((builtin:in), (builtin:in), (builtin:in), (builtin:out)), finite(0, [no, yes, no, yes, no]), can_loop). :- pragma termination_info(list:replace_nth_det((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), finite(0, [no, yes, no, yes, no]), can_loop). :- pragma termination_info(list:sort_and_remove_dups((builtin:in), (builtin:out)), finite(0, [no, yes, no]), can_loop). :- pragma termination_info(list:sort_and_remove_dups((builtin:in)) = (builtin:out), finite(0, [no, yes, no]), can_loop). :- pragma termination_info(list:sort((builtin:in), (builtin:out)), finite(0, [no, yes, no]), can_loop). :- pragma termination_info(list:sort((builtin:in)) = (builtin:out), finite(0, [no, yes, no]), can_loop). :- pragma termination_info(list:reverse((builtin:in), (builtin:out)), finite(0, [no, yes, no]), can_loop). :- pragma termination_info(list:reverse((builtin:in)) = (builtin:out), finite(0, [no, yes, no]), can_loop). :- pragma termination_info(list:perm((builtin:in), (builtin:out)), finite(0, [no, yes, no]), cannot_loop). :- pragma termination_info(list:nth_member_search((builtin:in), (builtin:in), (builtin:out)), finite(0, [no, no, no, no]), cannot_loop). :- pragma termination_info(list:index0((builtin:in), (builtin:in), (builtin:out)), finite(-2, [no, yes, no, no]), cannot_loop). :- pragma termination_info(list:index1((builtin:in), (builtin:in), (builtin:out)), finite(-2, [no, yes, no, no]), cannot_loop). :- pragma termination_info(list:index0_det((builtin:in), (builtin:in), (builtin:out)), finite(-2, [no, yes, no, no]), can_loop). :- pragma termination_info(list:index1_det((builtin:in), (builtin:in), (builtin:out)), finite(-2, [no, yes, no, no]), can_loop). :- pragma termination_info(list:index0_det((builtin:in), (builtin:in)) = (builtin:out), finite(-2, [no, yes, no, no]), can_loop). :- pragma termination_info(list:index1_det((builtin:in), (builtin:in)) = (builtin:out), finite(-2, [no, yes, no, no]), can_loop). :- pragma termination_info(list:zip((builtin:in), (builtin:in), (builtin:out)), finite(0, [no, yes, yes, no]), cannot_loop). :- pragma termination_info(list:zip((builtin:in), (builtin:in)) = (builtin:out), finite(0, [no, yes, yes, no]), cannot_loop). :- pragma termination_info(list:duplicate((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:duplicate((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(list:condense((builtin:in), (builtin:out)), finite(0, [no, yes, no]), cannot_loop). :- pragma termination_info(list:condense((builtin:in)) = (builtin:out), finite(0, [no, yes, no]), cannot_loop). :- pragma termination_info(list:chunk((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:chunk((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(list:sublist((builtin:in), (builtin:in)), finite(0, [no, no, no]), cannot_loop). :- pragma termination_info(list:all_same((builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(list:last((builtin:in), (builtin:out)), finite(-2, [no, yes, no]), cannot_loop). :- pragma termination_info(list:last_det((builtin:in), (builtin:out)), finite(-2, [no, yes, no]), can_loop). :- pragma termination_info(list:split_last((builtin:in), (builtin:out), (builtin:out)), finite(-2, [no, yes, no, no]), cannot_loop). :- pragma termination_info(list:split_last_det((builtin:in), (builtin:out), (builtin:out)), finite(-2, [no, yes, no, no]), can_loop). :- pragma termination_info(list:map((pred((builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:map((pred((builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:map((pred((builtin:in), (builtin:out)) is multi), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:map((pred((builtin:in), (builtin:out)) is nondet), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:map((pred((builtin:in), (builtin:in)) is semidet), (builtin:in), (builtin:in)), infinite, can_loop). :- pragma termination_info(list:map((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(list:map2((pred((builtin:in), (builtin:out), (builtin:out)) is det), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:map2((pred((builtin:in), (builtin:out), (builtin:out)) is semidet), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:map2((pred((builtin:in), (builtin:out), (builtin:out)) is multi), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:map2((pred((builtin:in), (builtin:out), (builtin:out)) is nondet), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:map2((pred((builtin:in), (builtin:in), (builtin:in)) is semidet), (builtin:in), (builtin:in), (builtin:in)), infinite, can_loop). :- pragma termination_info(list:map3((pred((builtin:in), (builtin:out), (builtin:out), (builtin:out)) is det), (builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:map3((pred((builtin:in), (builtin:out), (builtin:out), (builtin:out)) is semidet), (builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:map3((pred((builtin:in), (builtin:out), (builtin:out), (builtin:out)) is multi), (builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:map3((pred((builtin:in), (builtin:out), (builtin:out), (builtin:out)) is nondet), (builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:map3((pred((builtin:in), (builtin:in), (builtin:in), (builtin:in)) is semidet), (builtin:in), (builtin:in), (builtin:in), (builtin:in)), infinite, can_loop). :- pragma termination_info(list:map_corresponding((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(list:map_corresponding3((builtin:in), (builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(list:filter_map_corresponding((func((builtin:in), (builtin:in)) = (builtin:out) is semidet), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(list:filter_map_corresponding3((func((builtin:in), (builtin:in), (builtin:in)) = (builtin:out) is semidet), (builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(list:foldl((pred((builtin:in), (builtin:di), (builtin:uo)) is det), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop). :- pragma termination_info(list:foldl((pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:foldl((pred((builtin:in), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:foldl((pred((builtin:in), (builtin:in), (builtin:out)) is nondet), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:foldl((pred((builtin:in), (builtin:di), (builtin:uo)) is cc_multi), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop). :- pragma termination_info(list:foldl((pred((builtin:in), (builtin:in), (builtin:out)) is cc_multi), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:foldl((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(list:foldr((pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:foldr((pred((builtin:in), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:foldr((pred((builtin:in), (builtin:in), (builtin:out)) is nondet), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:foldr((pred((builtin:in), (builtin:di), (builtin:uo)) is cc_multi), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop). :- pragma termination_info(list:foldr((pred((builtin:in), (builtin:in), (builtin:out)) is cc_multi), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:foldr((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(list:foldl2((pred((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(list:foldl2((pred((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(list:foldl2((pred((builtin:in), (builtin:in), (builtin:out), (builtin:in), (builtin:out)) is nondet), (builtin:in), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:foldl2((pred((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(list:foldl2((pred((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(list:foldl2((pred((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(list:foldl3((pred((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(list:foldl3((pred((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(list:foldl3((pred((builtin:in), (builtin:in), (builtin:out), (builtin:in), (builtin:out), (builtin:in), (builtin:out)) is nondet), (builtin:in), (builtin:in), (builtin:out), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:foldl3((pred((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(list:map_foldl((pred((builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop). :- pragma termination_info(list:map_foldl((pred((builtin:in), (builtin:out), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:map_foldl((pred((builtin:in), (builtin:out), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:map_foldl((pred((builtin:in), (builtin:out), (builtin:in), (builtin:out)) is nondet), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:map_foldl2((pred((builtin:in), (builtin:out), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det), (builtin:in), (builtin:out), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop). :- pragma termination_info(list:map_foldl2((pred((builtin:in), (builtin:out), (builtin:in), (builtin:out), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:map_foldl2((pred((builtin:in), (builtin:out), (builtin:in), (builtin:out), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:out), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:map_foldl2((pred((builtin:in), (builtin:out), (builtin:in), (builtin:out), (builtin:in), (builtin:out)) is nondet), (builtin:in), (builtin:out), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:filter((pred((builtin:in)) is semidet), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:filter((pred((builtin:in)) is semidet), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(list:filter((pred((builtin:in)) is semidet), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:filter_map((pred((builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:filter_map((func((builtin:in)) = (builtin:out) is semidet), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(list:filter_map((pred((builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:takewhile((pred((builtin:in)) is semidet), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:sort(builtin:in((builtin:comparison_pred)), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:sort((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(list:sort_and_remove_dups(builtin:in((builtin:comparison_pred)), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:remove_adjacent_dups(builtin:in((builtin:comparison_pred)), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:merge(builtin:in((builtin:comparison_pred)), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:merge((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(list:merge_and_remove_dups(builtin:in((builtin:comparison_pred)), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(list:merge_and_remove_dups((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(list:series((builtin:in), (pred((builtin:in)) is semidet), (func((builtin:in)) = (builtin:out) is det)) = (builtin:out), infinite, can_loop). :- pragma termination_info(list:'..'((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(list:det_head((builtin:in)) = (builtin:out), finite(-2, [no, yes, no]), can_loop). :- pragma termination_info(list:det_tail((builtin:in)) = (builtin:out), finite(-2, [no, yes, no]), can_loop).