:- module set.
:- use_module bool, builtin, list, private_builtin, require, set_ordlist, set_unordlist, term.
:- type (set:set(T)) == (set_ordlist:set_ordlist(T)).
set:list_to_set(List_3, Set_4) :-
		set_ordlist:list_to_set(List_3, Set_4).
set:list_to_set(Xs_3) = S_4 :-
		set:list_to_set(Xs_3, S_4).
set:sorted_list_to_set(List_3, Set_4) :-
		set_ordlist:sorted_list_to_set(List_3, Set_4).
set:sorted_list_to_set(Xs_3) = S_4 :-
		set:sorted_list_to_set(Xs_3, S_4).
set:to_sorted_list(Set_3, List_4) :-
		set_ordlist:to_sorted_list(Set_3, List_4).
set:to_sorted_list(S_3) = Xs_4 :-
		set:to_sorted_list(S_3, Xs_4).
set:init(Set_2) :-
		set_ordlist:init(Set_2).
set:init = S_2 :-
		set:init(S_2).
set:singleton_set(Set_3, X_4) :-
		set_ordlist:singleton_set(Set_3, X_4).
set:make_singleton_set(T_3) = S_4 :-
		set:singleton_set(S_4, T_3).
set:equal(SetA_3, SetB_4) :-
		set_ordlist:equal(SetA_3, SetB_4).
set:empty(Set_2) :-
		set_ordlist:empty(Set_2).
set:non_empty(Set_2) :-
		\+ (
			set_ordlist:empty(Set_2)
		).
set:subset(SetA_3, SetB_4) :-
		set_ordlist:subset(SetA_3, SetB_4).
set:superset(SetA_3, SetB_4) :-
		set_ordlist:superset(SetA_3, SetB_4).
set:member(X_3, Set_4) :-
		set_ordlist:member(X_3, Set_4).
set:is_member(X_4, Set_5, Result_6) :-
		set_ordlist:is_member(X_4, Set_5, Result_6).
set:contains(Set_3, X_4) :-
		set_ordlist:contains(Set_3, X_4).
set:insert(Set0_4, X_5, Set_6) :-
		set_ordlist:insert(Set0_4, X_5, Set_6).
set:insert(S1_4, T_5) = S2_6 :-
		set:insert(S1_4, T_5, S2_6).
set:insert_list(Set0_4, List_5, Set_6) :-
		set_ordlist:insert_list(Set0_4, List_5, Set_6).
set:insert_list(S1_4, Xs_5) = S2_6 :-
		set:insert_list(S1_4, Xs_5, S2_6).
set:delete(Set0_4, X_5, Set_6) :-
		set_ordlist:delete(Set0_4, X_5, Set_6).
set:delete(S1_4, T_5) = S2_6 :-
		set:delete(S1_4, T_5, S2_6).
set:delete_list(Set0_4, List_5, Set_6) :-
		set_ordlist:delete_list(Set0_4, List_5, Set_6).
set:delete_list(S1_4, Xs_5) = S2_6 :-
		set:delete_list(S1_4, Xs_5, S2_6).
set:remove(Set0_4, X_5, Set_6) :-
		set_ordlist:remove(Set0_4, X_5, Set_6).
set:remove_list(Set0_4, List_5, Set_6) :-
		set_ordlist:remove_list(Set0_4, List_5, Set_6).
set:remove_least(Set0_4, X_5, Set_6) :-
		set_ordlist:remove_least(Set0_4, X_5, Set_6).
set:union(SetA_4, SetB_5, Set_6) :-
		set_ordlist:union(SetA_4, SetB_5, Set_6).
set:union(S1_4, S2_5) = S3_6 :-
		set:union(S1_4, S2_5, S3_6).
set:union_list(Sets_3) = HeadVar__2_2 :-
		HeadVar__2_2 = set_ordlist:union_list(Sets_3).
set:power_union(Sets_3, Set_4) :-
		set_ordlist:power_union(Sets_3, Set_4).
set:power_union(SS_3) = S_4 :-
		set:power_union(SS_3, S_4).
set:intersect(SetA_4, SetB_5, Set_6) :-
		set_ordlist:intersect(SetA_4, SetB_5, Set_6).
set:intersect(S1_4, S2_5) = S3_6 :-
		set:intersect(S1_4, S2_5, S3_6).
set:power_intersect(Sets_3, Set_4) :-
		set_ordlist:power_intersect(Sets_3, Set_4).
set:power_intersect(SS_3) = S_4 :-
		set:power_intersect(SS_3, S_4).
set:intersect_list(Sets_3) = HeadVar__2_2 :-
		HeadVar__2_2 = set_ordlist:intersect_list(Sets_3).
set:difference(SetA_4, SetB_5, Set_6) :-
		set_ordlist:difference(SetA_4, SetB_5, Set_6).
set:difference(S1_4, S2_5) = S3_6 :-
		set:difference(S1_4, S2_5, S3_6).
set:count(Set_3, Count_4) :-
		set_ordlist:count(Set_3, Count_4).
set:count(S_3) = N_4 :-
		set:count(S_3, N_4).
set:map(F_4, S1_5) = S2_6 :-
		S2_6 = set:list_to_set(V_7),
		V_7 = list:map(F_4, V_8),
		V_8 = set:to_sorted_list(S1_5).
set:filter(P_4, S1_5) = S2_6 :-
		S2_6 = set:sorted_list_to_set(V_7),
		V_7 = list:filter(P_4, V_8),
		V_8 = set:to_sorted_list(S1_5).
set:filter_map(PF_4, S1_5) = S2_6 :-
		S2_6 = set:list_to_set(V_7),
		V_7 = list:filter_map(PF_4, V_8),
		V_8 = set:to_sorted_list(S1_5).
set:fold(F_5, S_6, A_7) = B_8 :-
		B_8 = list:foldl(F_5, V_9, A_7),
		V_9 = set:to_sorted_list(S_6).
set:fold(F_5, S_6, DCG_0_7, DCG_1_8) :-
		V_9 = set:to_sorted_list(S_6),
		list:foldl(F_5, V_9, DCG_0_7, DCG_1_8).
set:divide(P_5, Set_6, TruePart_7, FalsePart_8) :-
		set_ordlist:divide(P_5, Set_6, TruePart_7, FalsePart_8).
:- pragma termination_info(set:list_to_set((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:list_to_set((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:sorted_list_to_set((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:sorted_list_to_set((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:to_sorted_list((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:to_sorted_list((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:init((builtin:uo)), infinite, can_loop).
:- pragma termination_info((set:init) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:singleton_set((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:singleton_set((builtin:out), (builtin:in)), infinite, can_loop).
:- pragma termination_info(set:make_singleton_set((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:equal((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop).
:- pragma termination_info(set:empty((builtin:in)), finite(0, [no, no]), can_loop).
:- pragma termination_info(set:non_empty((builtin:in)), finite(0, [no, no]), can_loop).
:- pragma termination_info(set:subset((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop).
:- pragma termination_info(set:superset((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop).
:- pragma termination_info(set:member((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop).
:- pragma termination_info(set:member((builtin:out), (builtin:in)), infinite, can_loop).
:- pragma termination_info(set:is_member((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:contains((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop).
:- pragma termination_info(set:insert((builtin:di), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(set:insert((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:insert((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:insert_list((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:insert_list((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:delete((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:delete((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:delete_list((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:delete_list((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:remove((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:remove_list((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:remove_least((builtin:in), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:union((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:union((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:union_list((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:power_union((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:power_union((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:intersect((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:intersect((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:power_intersect((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:power_intersect((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:intersect_list((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:difference((builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:difference((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:count((builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:count((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:map((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:filter((pred((builtin:in)) is semidet), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:filter_map((func((builtin:in)) = (builtin:out) is semidet), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:fold((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(set:fold((pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:fold((pred((builtin:in), (builtin:di), (builtin:uo)) is det), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(set:fold((pred((builtin:in), (builtin:in), (builtin:out)) is semidet), (builtin:in), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(set:divide((pred((builtin:in)) is semidet), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop).
