:- module set_unordlist. :- use_module bool, builtin, list, private_builtin, std_util. :- type (set_unordlist:set_unordlist(T)) == (list:list(T)). :- pred set_unordlist:power_union_2((list:list((list:list(T_1)))), (list:list(T_1)), (list:list(T_1))). :- mode set_unordlist:power_union_2((builtin:in), (builtin:in), (builtin:out)) is det. :- pred set_unordlist:intersect_2((list:list(T_1)), (list:list(T_1)), (list:list(T_1)), (list:list(T_1))). :- mode set_unordlist:intersect_2((builtin:in), (builtin:in), (builtin:in), (builtin:out)) is det. :- pred set_unordlist:difference_2((list:list(T_1)), (list:list(T_1)), (list:list(T_1))). :- mode set_unordlist:difference_2((builtin:in), (builtin:in), (builtin:out)) is det. :- pred set_unordlist:divide_2((pred T1_1), (list:list(T1_1)), (list:list(T1_1)), (list:list(T1_1)), (list:list(T1_1)), (list:list(T1_1))). :- mode set_unordlist:divide_2((pred((builtin:in)) is semidet), (builtin:in), (builtin:in), (builtin:out), (builtin:in), (builtin:out)) is det. set_unordlist:list_to_set(List_3, List_3). set_unordlist:list_to_set(Xs_3) = S_4 :- set_unordlist:list_to_set(Xs_3, S_4). set_unordlist:sorted_list_to_set(List_3, List_3). set_unordlist:sorted_list_to_set(Xs_3) = S_4 :- set_unordlist:sorted_list_to_set(Xs_3, S_4). set_unordlist:to_sorted_list(Set_3, List_4) :- list:sort_and_remove_dups(Set_3, List_4). set_unordlist:to_sorted_list(S_3) = Xs_4 :- set_unordlist:to_sorted_list(S_3, Xs_4). set_unordlist:init((list:[])). set_unordlist:init = S_2 :- set_unordlist:init(S_2). set_unordlist:singleton_set((list:[X_3 | V_4]), X_3) :- V_4 = list:[]. set_unordlist:make_singleton_set(T_3) = S_4 :- set_unordlist:singleton_set(S_4, T_3). set_unordlist:equal(SetA_3, SetB_4) :- set_unordlist:subset(SetA_3, SetB_4), set_unordlist:subset(SetB_4, SetA_3). set_unordlist:empty((list:[])). set_unordlist:superset(S0_3, S1_4) :- set_unordlist:subset(S1_4, S0_3). set_unordlist:member(E_3, S_4) :- list:member(E_3, S_4). set_unordlist:is_member(E_4, S_5, R_6) :- (if set_unordlist:member(E_4, S_5) then R_6 = bool:yes else R_6 = bool:no ). set_unordlist:contains(S_3, E_4) :- set_unordlist:member(E_4, S_3). set_unordlist:insert(S0_4, E_5, (list:[E_5 | S0_4])). set_unordlist:insert(S1_4, T_5) = S2_6 :- set_unordlist:insert(S1_4, T_5, S2_6). set_unordlist:insert_list(Set0_4, List_5, Set_6) :- list:append(List_5, Set0_4, Set_6). set_unordlist:insert_list(S1_4, Xs_5) = S2_6 :- set_unordlist:insert_list(S1_4, Xs_5, S2_6). set_unordlist:delete(S0_4, E_5, S_6) :- list:delete_all(S0_4, E_5, S_6). set_unordlist:delete(S1_4, T_5) = S2_6 :- set_unordlist:delete(S1_4, T_5, S2_6). set_unordlist:delete_list(S1_4, Xs_5) = S2_6 :- set_unordlist:delete_list(S1_4, Xs_5, S2_6). set_unordlist:remove(S0_4, E_5, S_6) :- list:member(E_5, S0_4), set_unordlist:delete(S0_4, E_5, S_6). set_unordlist:remove_least(Set0_4, E_5, Set_6) :- Set0_4 = list:[V_7 | V_8], V_9 = list:[E_5 | Set_6], set_unordlist:to_sorted_list(Set0_4, V_9). set_unordlist:union(Set0_4, Set1_5, Set_6) :- list:append(Set1_5, Set0_4, Set_6). set_unordlist:union(S1_4, S2_5) = S3_6 :- set_unordlist:union(S1_4, S2_5, S3_6). set_unordlist:union_list(LS_3) = S_4 :- set_unordlist:power_union(LS_3, S_4). set_unordlist:power_union(PS_3, S_4) :- set_unordlist:init(S0_5), set_unordlist:power_union_2(PS_3, S0_5, S1_6), list:sort_and_remove_dups(S1_6, S_4). set_unordlist:power_union(SS_3) = S_4 :- set_unordlist:power_union(SS_3, S_4). set_unordlist:intersect(S0_4, S1_5, S_6) :- V_7 = list:[], set_unordlist:intersect_2(S0_4, S1_5, V_7, S_6). set_unordlist:intersect(S1_4, S2_5) = S3_6 :- set_unordlist:intersect(S1_4, S2_5, S3_6). set_unordlist:power_intersect(SS_3) = S_4 :- set_unordlist:power_intersect(SS_3, S_4). set_unordlist:intersect_list(Sets_3) = HeadVar__2_2 :- HeadVar__2_2 = set_unordlist:power_intersect(Sets_3). set_unordlist:difference(A_4, B_5, C_6) :- set_unordlist:difference_2(B_5, A_4, C_6). set_unordlist:difference(S1_4, S2_5) = S3_6 :- set_unordlist:difference(S1_4, S2_5, S3_6). set_unordlist:map(F_4, S1_5) = S2_6 :- S2_6 = set_unordlist:list_to_set(V_7), V_7 = list:map(F_4, V_8), V_8 = set_unordlist:to_sorted_list(S1_5). set_unordlist:filter_map(PF_4, S1_5) = S2_6 :- S2_6 = set_unordlist:list_to_set(V_7), V_7 = list:filter_map(PF_4, V_8), V_8 = set_unordlist:to_sorted_list(S1_5). set_unordlist:fold(F_5, S_6, A_7) = B_8 :- B_8 = list:foldl(F_5, V_9, A_7), V_9 = set_unordlist:to_sorted_list(S_6). set_unordlist:divide(Pred_5, Set_6, RevTruePart_7, RevFalsePart_8) :- V_9 = list:[], V_10 = list:[], set_unordlist:divide_2(Pred_5, Set_6, V_9, RevTruePart_7, V_10, RevFalsePart_8). set_unordlist:divide_2(_Pred_7, (list:[]), RevTrue_8, RevTrue_8, RevFalse_9, RevFalse_9). set_unordlist:divide_2(Pred_10, (list:[H_11 | T_12]), RevTrue0_13, RevTrue_14, RevFalse0_15, RevFalse_16) :- (if call(Pred_10, H_11) then RevTrue1_17 = list:[H_11 | RevTrue0_13], RevFalse1_18 = RevFalse0_15 else RevTrue1_17 = RevTrue0_13, RevFalse1_18 = list:[H_11 | RevFalse0_15] ), set_unordlist:divide_2(Pred_10, T_12, RevTrue1_17, RevTrue_14, RevFalse1_18, RevFalse_16). :- pragma termination_info(set_unordlist:list_to_set((builtin:in), (builtin:out)), finite(0, [no, yes, no]), cannot_loop). :- pragma termination_info(set_unordlist:list_to_set((builtin:in)) = (builtin:out), finite(0, [no, yes, no]), cannot_loop). :- pragma termination_info(set_unordlist:sorted_list_to_set((builtin:in), (builtin:out)), finite(0, [no, yes, no]), cannot_loop). :- pragma termination_info(set_unordlist:sorted_list_to_set((builtin:in)) = (builtin:out), finite(0, [no, yes, no]), cannot_loop). :- pragma termination_info(set_unordlist:to_sorted_list((builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(set_unordlist:to_sorted_list((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(set_unordlist:init((builtin:uo)), finite(0, [no, no]), cannot_loop). :- pragma termination_info((set_unordlist:init) = (builtin:out), finite(0, [no, no]), cannot_loop). :- pragma termination_info(set_unordlist:singleton_set((builtin:in), (builtin:out)), finite(-2, [no, yes, no]), cannot_loop). :- pragma termination_info(set_unordlist:singleton_set((builtin:out), (builtin:in)), finite(2, [no, no, yes]), cannot_loop). :- pragma termination_info(set_unordlist:make_singleton_set((builtin:in)) = (builtin:out), finite(2, [no, yes, no]), cannot_loop). :- pragma termination_info(set_unordlist:equal((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop). :- pragma termination_info(set_unordlist:empty((builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(set_unordlist:subset((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop). :- pragma termination_info(set_unordlist:superset((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop). :- pragma termination_info(set_unordlist:member((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop). :- pragma termination_info(set_unordlist:member((builtin:out), (builtin:in)), infinite, can_loop). :- pragma termination_info(set_unordlist:is_member((builtin:in), (builtin:in), (builtin:out)), finite(0, [no, no, no, no]), can_loop). :- pragma termination_info(set_unordlist:contains((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop). :- pragma termination_info(set_unordlist:insert((builtin:di), (builtin:di), (builtin:uo)), finite(2, [no, yes, yes, no]), cannot_loop). :- pragma termination_info(set_unordlist:insert((builtin:in), (builtin:in), (builtin:out)), finite(2, [no, yes, yes, no]), cannot_loop). :- pragma termination_info(set_unordlist:insert((builtin:in), (builtin:in)) = (builtin:out), finite(2, [no, yes, yes, no]), cannot_loop). :- pragma termination_info(set_unordlist:insert_list((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(set_unordlist:insert_list((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(set_unordlist:delete((builtin:di), (builtin:in), (builtin:uo)), infinite, can_loop). :- pragma termination_info(set_unordlist:delete((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(set_unordlist:delete((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(set_unordlist:delete_list((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(set_unordlist:delete_list((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(set_unordlist:remove((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(set_unordlist:remove_list((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(set_unordlist:remove_least((builtin:in), (builtin:out), (builtin:out)), infinite, can_loop). :- pragma termination_info(set_unordlist:union((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(set_unordlist:union((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(set_unordlist:union_list((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(set_unordlist:power_union((builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(set_unordlist:power_union((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(set_unordlist:intersect((builtin:in), (builtin:in), (builtin:out)), finite(0, [no, yes, no, no]), can_loop). :- pragma termination_info(set_unordlist:intersect((builtin:in), (builtin:in)) = (builtin:out), finite(0, [no, yes, no, no]), can_loop). :- pragma termination_info(set_unordlist:power_intersect((builtin:in), (builtin:out)), finite(0, [no, yes, no]), can_loop). :- pragma termination_info(set_unordlist:power_intersect((builtin:in)) = (builtin:out), finite(0, [no, yes, no]), can_loop). :- pragma termination_info(set_unordlist:intersect_list((builtin:in)) = (builtin:out), finite(0, [no, yes, no]), can_loop). :- pragma termination_info(set_unordlist:difference((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(set_unordlist:difference((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(set_unordlist:map((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(set_unordlist:filter_map((func((builtin:in)) = (builtin:out) is semidet), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(set_unordlist:fold((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(set_unordlist:divide((pred((builtin:in)) is semidet), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop).