:- module set_ctree234.
:- interface.
:- import_module bool.
:- import_module list.
:- type set_ctree234(_T).
:- pred all_true((pred T), set_ctree234.set_ctree234(T)).
:- mode all_true(builtin.in((pred((builtin.in)) is semidet)), (builtin.in)) is semidet.
:- pred contains(set_ctree234.set_ctree234(T), T).
:- mode contains((builtin.in), (builtin.in)) is semidet.
:- func count(set_ctree234.set_ctree234(T)) = int.
:- func delete(T, set_ctree234.set_ctree234(T)) = set_ctree234.set_ctree234(T).
:- pred delete(T, set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)).
:- mode delete((builtin.in), (builtin.in), (builtin.out)) is det.
:- func delete_list(list.list(T), set_ctree234.set_ctree234(T)) = set_ctree234.set_ctree234(T).
:- pred delete_list(list.list(T), set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)).
:- mode delete_list((builtin.in), (builtin.in), (builtin.out)) is det.
:- func difference(set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)) = set_ctree234.set_ctree234(T).
:- pred difference(set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)).
:- mode difference((builtin.in), (builtin.in), (builtin.out)) is det.
:- pred divide((pred T), set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)).
:- mode divide(builtin.in((pred((builtin.in)) is semidet)), (builtin.in), (builtin.out), (builtin.out)) is det.
:- pred divide_by_set(set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)).
:- mode divide_by_set((builtin.in), (builtin.in), (builtin.out), (builtin.out)) is det.
:- pred empty(set_ctree234.set_ctree234(_T)).
:- mode empty((builtin.in)) is semidet.
:- pred equal(set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)).
:- mode equal((builtin.in), (builtin.in)) is semidet.
:- pred filter((pred T), set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)).
:- mode filter(builtin.in((pred((builtin.in)) is semidet)), (builtin.in), (builtin.out)) is det.
:- pred filter((pred T), set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)).
:- mode filter(builtin.in((pred((builtin.in)) is semidet)), (builtin.in), (builtin.out), (builtin.out)) is det.
:- pred filter_map(pred(T1, T2), set_ctree234.set_ctree234(T1), set_ctree234.set_ctree234(T2)).
:- mode filter_map(builtin.in((pred((builtin.in), (builtin.out)) is semidet)), (builtin.in), (builtin.out)) is det.
:- func filter_map(((func T1) = T2), set_ctree234.set_ctree234(T1)) = set_ctree234.set_ctree234(T2).
:- mode filter_map((func((builtin.in)) = (builtin.out) is semidet), (builtin.in)) = (builtin.out) is det.
:- func fold((func(T1, T2) = T2), set_ctree234.set_ctree234(T1), T2) = T2.
:- pred fold(pred(T1, T2, T2), set_ctree234.set_ctree234(T1), T2, T2).
:- mode fold((pred((builtin.in), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out)) is det.
:- mode fold((pred((builtin.in), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.mdi), (builtin.muo)) is det.
:- mode fold((pred((builtin.in), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.di), (builtin.uo)) is det.
:- mode fold((pred((builtin.in), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out)) is semidet.
:- mode fold((pred((builtin.in), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.mdi), (builtin.muo)) is semidet.
:- mode fold((pred((builtin.in), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.di), (builtin.uo)) is semidet.
:- pred fold2(pred(T1, T2, T2, T3, T3), set_ctree234.set_ctree234(T1), T2, T2, T3, T3) is det.
:- mode fold2((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det.
:- mode fold2((pred((builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det.
:- mode fold2((pred((builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- mode fold2((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- mode fold2((pred((builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet.
:- mode fold2((pred((builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet.
:- pred fold3(pred(T1, T2, T2, T3, T3, T4, T4), set_ctree234.set_ctree234(T1), T2, T2, T3, T3, T4, T4).
:- mode fold3((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)) is det.
:- mode fold3((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det.
:- mode fold3((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)) is det.
:- mode fold3((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)) is semidet.
:- mode fold3((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet.
:- mode fold3((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet.
:- pred fold4(pred(T1, T2, T2, T3, T3, T4, T4, T5, T5), set_ctree234.set_ctree234(T1), T2, T2, T3, T3, T4, T4, T5, T5).
:- mode fold4((pred((builtin.in), (builtin.in), (builtin.out), (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), (builtin.in), (builtin.out)) is det.
:- mode fold4((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det.
:- mode fold4((pred((builtin.in), (builtin.in), (builtin.out), (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.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- mode fold4((pred((builtin.in), (builtin.in), (builtin.out), (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), (builtin.in), (builtin.out)) is semidet.
:- mode fold4((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet.
:- mode fold4((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet.
:- pred fold5(pred(T1, T2, T2, T3, T3, T4, T4, T5, T5, T6, T6), set_ctree234.set_ctree234(T1), T2, T2, T3, T3, T4, T4, T5, T5, T6, T6).
:- mode fold5((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (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), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det.
:- mode fold5((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det.
:- mode fold5((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (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.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- mode fold5((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (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), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- mode fold5((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet.
:- mode fold5((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet.
:- pred fold6(pred(T1, T2, T2, T3, T3, T4, T4, T5, T5, T6, T6, T7, T7), set_ctree234.set_ctree234(T1), T2, T2, T3, T3, T4, T4, T5, T5, T6, T6, T7, T7).
:- mode fold6((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (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), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det.
:- mode fold6((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det.
:- mode fold6((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (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.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- mode fold6((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (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), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- mode fold6((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet.
:- mode fold6((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet.
:- func from_list(list.list(T)) = set_ctree234.set_ctree234(T).
:- func init = set_ctree234.set_ctree234(T).
:- func insert(T, set_ctree234.set_ctree234(T)) = set_ctree234.set_ctree234(T).
:- pred insert(T, set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)).
:- mode insert((builtin.in), (builtin.in), (builtin.out)) is det.
:- func insert_list(list.list(T), set_ctree234.set_ctree234(T)) = set_ctree234.set_ctree234(T).
:- pred insert_list(list.list(T), set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)).
:- mode insert_list((builtin.in), (builtin.in), (builtin.out)) is det.
:- pred insert_new(T, set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)).
:- mode insert_new((builtin.in), (builtin.in), (builtin.out)) is semidet.
:- func intersect(set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)) = set_ctree234.set_ctree234(T).
:- pred intersect(set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)).
:- mode intersect((builtin.in), (builtin.in), (builtin.out)) is det.
:- func intersect_list(list.list(set_ctree234.set_ctree234(T))) = set_ctree234.set_ctree234(T).
:- pred is_empty(set_ctree234.set_ctree234(_T)).
:- mode is_empty((builtin.in)) is semidet.
:- func is_member(set_ctree234.set_ctree234(T), T) = bool.bool.
:- pred is_member(set_ctree234.set_ctree234(T), T, bool.bool).
:- mode is_member((builtin.in), (builtin.in), (builtin.out)) is det.
:- pred is_singleton(set_ctree234.set_ctree234(T), T).
:- mode is_singleton((builtin.in), (builtin.out)) is semidet.
:- func list_to_set(list.list(T)) = set_ctree234.set_ctree234(T).
:- func make_singleton_set(T) = set_ctree234.set_ctree234(T).
:- func map(((func T1) = T2), set_ctree234.set_ctree234(T1)) = set_ctree234.set_ctree234(T2).
:- pred map(pred(T1, T2), set_ctree234.set_ctree234(T1), set_ctree234.set_ctree234(T2)).
:- mode map(builtin.in((pred((builtin.in), (builtin.out)) is det)), (builtin.in), (builtin.out)) is det.
:- pred member(T, set_ctree234.set_ctree234(T)).
:- mode member((builtin.in), (builtin.in)) is semidet.
:- mode member((builtin.out), (builtin.in)) is nondet.
:- pred non_empty(set_ctree234.set_ctree234(T)).
:- mode non_empty((builtin.in)) is semidet.
:- pred one_member(set_ctree234.set_ctree234(T), T).
:- mode one_member((builtin.in), (builtin.out)) is nondet.
:- func power_intersect(set_ctree234.set_ctree234(set_ctree234.set_ctree234(T))) = set_ctree234.set_ctree234(T).
:- func power_union(set_ctree234.set_ctree234(set_ctree234.set_ctree234(T))) = set_ctree234.set_ctree234(T).
:- pred power_union(set_ctree234.set_ctree234(set_ctree234.set_ctree234(T)), set_ctree234.set_ctree234(T)).
:- mode power_union((builtin.in), (builtin.out)) is det.
:- pred remove(T, set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)).
:- mode remove((builtin.in), (builtin.in), (builtin.out)) is semidet.
:- pred remove_least(T, set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)).
:- mode remove_least((builtin.out), (builtin.in), (builtin.out)) is semidet.
:- pred remove_list(list.list(T), set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)).
:- mode remove_list((builtin.in), (builtin.in), (builtin.out)) is semidet.
:- pred singleton_set(T, set_ctree234.set_ctree234(T)).
:- mode singleton_set((builtin.in), (builtin.out)) is det.
:- mode singleton_set((builtin.out), (builtin.in)) is semidet.
:- func sorted_list_to_set(list.list(T)) = set_ctree234.set_ctree234(T).
:- pred subset(set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)).
:- mode subset((builtin.in), (builtin.in)) is semidet.
:- pred superset(set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)).
:- mode superset((builtin.in), (builtin.in)) is semidet.
:- func to_sorted_list(set_ctree234.set_ctree234(T)) = list.list(T).
:- func union(set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)) = set_ctree234.set_ctree234(T).
:- pred union(set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T), set_ctree234.set_ctree234(T)).
:- mode union((builtin.in), (builtin.in), (builtin.out)) is det.
:- func union_list(list.list(set_ctree234.set_ctree234(T))) = set_ctree234.set_ctree234(T).
:- pred union_list(list.list(set_ctree234.set_ctree234(T)), set_ctree234.set_ctree234(T)).
:- mode union_list((builtin.in), (builtin.out)) is det.
:- pred verify_depths(set_ctree234.set_ctree234(T), list.list(int)).
:- mode verify_depths((builtin.in), (builtin.out)) is det.
