:- module bintree_set. :- use_module assoc_list, bintree, builtin, list, private_builtin, std_util. :- type (bintree_set:bintree_set(T)) == (bintree:bintree(T, (std_util:unit))). :- pred bintree_set:assoc_unit((list:list(T_1)), (list:list((std_util:pair(T_1, (std_util:unit)))))). :- mode bintree_set:assoc_unit((builtin:in), (builtin:out)) is det. :- pred bintree_set:contains_list((list:list(T_1)), (bintree:bintree(T_1, (std_util:unit)))). :- mode bintree_set:contains_list((builtin:in), (builtin:in)) is semidet. bintree_set:list_to_set(List_3, Set_4) :- list:sort_and_remove_dups(List_3, SortedList_5), bintree_set:sorted_list_to_set(SortedList_5, Set_4). bintree_set:list_to_set(Xs_3) = BT_4 :- bintree_set:list_to_set(Xs_3, BT_4). bintree_set:sorted_list_to_set(List_3, Set_4) :- bintree_set:assoc_unit(List_3, AssocList_5), bintree:from_sorted_list(AssocList_5, Set_4). bintree_set:sorted_list_to_set(Xs_3) = BT_4 :- bintree_set:sorted_list_to_set(Xs_3, BT_4). bintree_set:to_sorted_list(Set_3, List_4) :- bintree:keys(Set_3, List_4). bintree_set:to_sorted_list(BT_3) = Xs_4 :- bintree_set:to_sorted_list(BT_3, Xs_4). bintree_set:init(Set_2) :- bintree:init(Set_2). bintree_set:singleton_set(Set_3, Elem_4) :- bintree:init(Set0_5), V_6 = std_util:unit, bintree:set(Set0_5, Elem_4, V_6, Set_3). bintree_set:equal(SetA_3, SetB_4) :- bintree:keys(SetA_3, SortedElements_5), bintree:keys(SetB_4, SortedElements_5). bintree_set:subset(S0_3, S1_4) :- bintree:keys(S0_3, SortedElements0_5), bintree_set:contains_list(SortedElements0_5, S1_4). bintree_set:superset(S0_3, S1_4) :- bintree_set:subset(S1_4, S0_3). bintree_set:member(E_3, S_4) :- bintree:keys(S_4, Elements_5), list:member(E_3, Elements_5). bintree_set:is_member(E_3, S_4) :- bintree:search(S_4, E_3, V_5). bintree_set:contains(S_3, E_4) :- bintree_set:is_member(E_4, S_3). bintree_set:insert(S0_4, E_5, S_6) :- V_7 = std_util:unit, bintree:set(S0_4, E_5, V_7, S_6). bintree_set:insert(BT1_4, X_5) = BT2_6 :- bintree_set:insert(BT1_4, X_5, BT2_6). bintree_set:insert_list(BT1_4, Xs_5) = BT2_6 :- bintree_set:insert_list(BT1_4, Xs_5, BT2_6). bintree_set:remove(S0_4, E_5, S_6) :- bintree:remove(S0_4, E_5, V_7, S_6). bintree_set:delete(S0_4, E_5, S_6) :- bintree:delete(S0_4, E_5, S_6). bintree_set:delete(BT1_4, X_5) = BT2_6 :- bintree_set:delete(BT1_4, X_5, BT2_6). bintree_set:delete_list(BT1_4, Xs_5) = BT2_6 :- bintree_set:delete_list(BT1_4, Xs_5, BT2_6). bintree_set:union(S0_4, S1_5, S_6) :- bintree:to_list(S0_4, L0_7), bintree:to_list(S1_5, L1_8), list:merge(L0_7, L1_8, L_9), bintree:from_sorted_list(L_9, S_6). bintree_set:union(BT1_4, BT2_5) = BT3_6 :- bintree_set:union(BT1_4, BT2_5, BT3_6). bintree_set:intersect(S0_4, S1_5, S_6) :- bintree:keys(S1_5, L1_7), bintree_set:delete_list(S0_4, L1_7, S_6). bintree_set:intersect(BT1_4, BT2_5) = BT3_6 :- bintree_set:intersect(BT1_4, BT2_5, BT3_6). bintree_set:contains_list((list:[E_3 | Es_4]), S_5) :- bintree:search(S_5, E_3, V_6), bintree_set:contains_list(Es_4, S_5). :- pragma termination_info(bintree_set:list_to_set((builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bintree_set:list_to_set((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(bintree_set:sorted_list_to_set((builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bintree_set:sorted_list_to_set((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(bintree_set:to_sorted_list((builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bintree_set:to_sorted_list((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(bintree_set:init((builtin:uo)), infinite, can_loop). :- pragma termination_info(bintree_set:singleton_set((builtin:out), (builtin:in)), infinite, can_loop). :- pragma termination_info(bintree_set:equal((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop). :- pragma termination_info(bintree_set:subset((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop). :- pragma termination_info(bintree_set:superset((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop). :- pragma termination_info(bintree_set:member((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop). :- pragma termination_info(bintree_set:member((builtin:out), (builtin:in)), infinite, can_loop). :- pragma termination_info(bintree_set:is_member((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop). :- pragma termination_info(bintree_set:contains((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop). :- pragma termination_info(bintree_set:insert((builtin:di), (builtin:di), (builtin:uo)), infinite, can_loop). :- pragma termination_info(bintree_set:insert((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bintree_set:insert((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(bintree_set:insert_list((builtin:di), (builtin:di), (builtin:uo)), infinite, can_loop). :- pragma termination_info(bintree_set:insert_list((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bintree_set:insert_list((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(bintree_set:remove((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bintree_set:remove_list((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bintree_set:delete((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bintree_set:delete((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(bintree_set:delete_list((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bintree_set:delete_list((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(bintree_set:union((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bintree_set:union((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(bintree_set:intersect((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(bintree_set:intersect((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).