:- module fat_sparse_bitset.
:- interface.
:- import_module enum.
:- import_module list.
:- import_module term.
:- use_module set.
:- type fat_sparse_bitset(T).
:- pragma type_spec((fat_sparse_bitset.contains)/2, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__contains__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.contains)/2, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__contains__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.delete)/2, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__delete__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.delete)/3, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__delete__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.delete)/2, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__delete__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.delete)/3, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__delete__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.delete_list)/2, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__delete_list__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.delete_list)/3, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__delete_list__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.delete_list)/2, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__delete_list__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.delete_list)/3, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__delete_list__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.foldl)/3, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__foldl__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.foldl)/4, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__foldl__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.foldl)/3, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__foldl__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.foldl)/4, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__foldl__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.foldr)/3, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__foldr__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.foldr)/4, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__foldr__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.foldr)/3, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__foldr__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.foldr)/4, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__foldr__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.from_set)/1, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__from_set__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.from_set)/1, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__from_set__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.insert)/2, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__insert__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.insert)/3, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__insert__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.insert)/2, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__insert__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.insert)/3, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__insert__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.insert_list)/2, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__insert_list__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.insert_list)/3, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__insert_list__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.insert_list)/2, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__insert_list__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.insert_list)/3, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__insert_list__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.list_to_set)/1, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__list_to_set__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.list_to_set)/2, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__list_to_set__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.list_to_set)/1, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__list_to_set__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.list_to_set)/2, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__list_to_set__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.make_singleton_set)/1, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__make_singleton_set__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.make_singleton_set)/1, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__make_singleton_set__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.singleton_set)/2, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__singleton_set__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.singleton_set)/2, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__singleton_set__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.sorted_list_to_set)/1, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__sorted_list_to_set__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.sorted_list_to_set)/2, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__sorted_list_to_set__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.sorted_list_to_set)/1, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__sorted_list_to_set__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.sorted_list_to_set)/2, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__sorted_list_to_set__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.to_set)/1, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__to_set__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.to_set)/1, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__to_set__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.to_sorted_list)/1, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__to_sorted_list__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.to_sorted_list)/2, (T = int), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__to_sorted_list__[T = int]')).
:- pragma type_spec((fat_sparse_bitset.to_sorted_list)/1, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__to_sorted_list__[T = var(V_2)]')).
:- pragma type_spec((fat_sparse_bitset.to_sorted_list)/2, (T = term.var(V_2)), (fat_sparse_bitset.'TypeSpecOf__pred_or_func__to_sorted_list__[T = var(V_2)]')).
:- pred all_true((pred T), fat_sparse_bitset.fat_sparse_bitset(T)) <= (enum.enum(T)).
:- mode all_true(builtin.in((pred((builtin.in)) is semidet)), (builtin.in)) is semidet.
:- pred contains(fat_sparse_bitset.fat_sparse_bitset(T), T) <= (enum.enum(T)).
:- mode contains((builtin.in), (builtin.in)) is semidet.
:- func count(fat_sparse_bitset.fat_sparse_bitset(T)) = int <= (enum.enum(T)).
:- func delete(fat_sparse_bitset.fat_sparse_bitset(T), T) = fat_sparse_bitset.fat_sparse_bitset(T) <= (enum.enum(T)).
:- pred delete(T, fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)) <= (enum.enum(T)).
:- mode delete((builtin.in), (builtin.in), (builtin.out)) is det.
:- func delete_list(fat_sparse_bitset.fat_sparse_bitset(T), list.list(T)) = fat_sparse_bitset.fat_sparse_bitset(T) <= (enum.enum(T)).
:- pred delete_list(list.list(T), fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)) <= (enum.enum(T)).
:- mode delete_list((builtin.in), (builtin.in), (builtin.out)) is det.
:- func difference(fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)) = fat_sparse_bitset.fat_sparse_bitset(T).
:- pred difference(fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)).
:- mode difference((builtin.in), (builtin.in), (builtin.out)) is det.
:- pred divide((pred T), fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)) <= (enum.enum(T)).
:- mode divide(builtin.in((pred((builtin.in)) is semidet)), (builtin.in), (builtin.out), (builtin.out)) is det.
:- pred divide_by_set(fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)) <= (enum.enum(T)).
:- mode divide_by_set((builtin.in), (builtin.in), (builtin.out), (builtin.out)) is det.
:- pred empty(fat_sparse_bitset.fat_sparse_bitset(T)).
:- mode empty((builtin.in)) is semidet.
:- mode empty((builtin.out)) is det.
:- pred equal(fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)).
:- mode equal((builtin.in), (builtin.in)) is semidet.
:- func filter((pred T), fat_sparse_bitset.fat_sparse_bitset(T)) = fat_sparse_bitset.fat_sparse_bitset(T) <= (enum.enum(T)).
:- mode filter((pred((builtin.in)) is semidet), (builtin.in)) = (builtin.out) is det.
:- pred filter((pred T), fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)) <= (enum.enum(T)).
:- mode filter((pred((builtin.in)) is semidet), (builtin.in), (builtin.out), (builtin.out)) is det.
:- func foldl((func(T, U) = U), fat_sparse_bitset.fat_sparse_bitset(T), U) = U <= (enum.enum(T)).
:- pred foldl(pred(T, U, U), fat_sparse_bitset.fat_sparse_bitset(T), U, U) <= (enum.enum(T)).
:- mode foldl((pred((builtin.in), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.di), (builtin.uo)) is det.
:- mode foldl((pred((builtin.in), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out)) is det.
:- mode foldl((pred((builtin.in), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out)) is semidet.
:- mode foldl((pred((builtin.in), (builtin.in), (builtin.out)) is nondet), (builtin.in), (builtin.in), (builtin.out)) is nondet.
:- mode foldl((pred((builtin.in), (builtin.di), (builtin.uo)) is cc_multi), (builtin.in), (builtin.di), (builtin.uo)) is cc_multi.
:- mode foldl((pred((builtin.in), (builtin.in), (builtin.out)) is cc_multi), (builtin.in), (builtin.in), (builtin.out)) is cc_multi.
:- pred foldl2(pred(T, U, U, V, V), fat_sparse_bitset.fat_sparse_bitset(T), U, U, V, V) <= (enum.enum(T)).
:- mode foldl2((pred((builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det.
:- mode foldl2((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 foldl2((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 foldl2((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 foldl2((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is nondet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is nondet.
:- mode foldl2((pred((builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is cc_multi), (builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is cc_multi.
:- mode foldl2((pred((builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is cc_multi), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is cc_multi.
:- mode foldl2((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is cc_multi), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is cc_multi.
:- func foldr((func(T, U) = U), fat_sparse_bitset.fat_sparse_bitset(T), U) = U <= (enum.enum(T)).
:- pred foldr(pred(T, U, U), fat_sparse_bitset.fat_sparse_bitset(T), U, U) <= (enum.enum(T)).
:- mode foldr((pred((builtin.in), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.di), (builtin.uo)) is det.
:- mode foldr((pred((builtin.in), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out)) is det.
:- mode foldr((pred((builtin.in), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out)) is semidet.
:- mode foldr((pred((builtin.in), (builtin.in), (builtin.out)) is nondet), (builtin.in), (builtin.in), (builtin.out)) is nondet.
:- mode foldr((pred((builtin.in), (builtin.di), (builtin.uo)) is cc_multi), (builtin.in), (builtin.di), (builtin.uo)) is cc_multi.
:- mode foldr((pred((builtin.in), (builtin.in), (builtin.out)) is cc_multi), (builtin.in), (builtin.in), (builtin.out)) is cc_multi.
:- pred foldr2(pred(T, U, U, V, V), fat_sparse_bitset.fat_sparse_bitset(T), U, U, V, V) <= (enum.enum(T)).
:- mode foldr2((pred((builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is det.
:- mode foldr2((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 foldr2((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 foldr2((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 foldr2((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is nondet), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is nondet.
:- mode foldr2((pred((builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is cc_multi), (builtin.in), (builtin.di), (builtin.uo), (builtin.di), (builtin.uo)) is cc_multi.
:- mode foldr2((pred((builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is cc_multi), (builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is cc_multi.
:- mode foldr2((pred((builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is cc_multi), (builtin.in), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is cc_multi.
:- func from_set(set.set(T)) = fat_sparse_bitset.fat_sparse_bitset(T) <= (enum.enum(T)).
:- func init = fat_sparse_bitset.fat_sparse_bitset(T).
:- pred init(fat_sparse_bitset.fat_sparse_bitset(T)).
:- mode init((builtin.out)) is det.
:- func insert(fat_sparse_bitset.fat_sparse_bitset(T), T) = fat_sparse_bitset.fat_sparse_bitset(T) <= (enum.enum(T)).
:- pred insert(T, fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)) <= (enum.enum(T)).
:- mode insert((builtin.in), (builtin.in), (builtin.out)) is det.
:- func insert_list(fat_sparse_bitset.fat_sparse_bitset(T), list.list(T)) = fat_sparse_bitset.fat_sparse_bitset(T) <= (enum.enum(T)).
:- pred insert_list(list.list(T), fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)) <= (enum.enum(T)).
:- mode insert_list((builtin.in), (builtin.in), (builtin.out)) is det.
:- pred insert_new(T, fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)) <= (enum.enum(T)).
:- mode insert_new((builtin.in), (builtin.in), (builtin.out)) is semidet.
:- func intersect(fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)) = fat_sparse_bitset.fat_sparse_bitset(T).
:- pred intersect(fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)).
:- mode intersect((builtin.in), (builtin.in), (builtin.out)) is det.
:- func intersect_list(list.list(fat_sparse_bitset.fat_sparse_bitset(T))) = fat_sparse_bitset.fat_sparse_bitset(T).
:- pred intersect_list(list.list(fat_sparse_bitset.fat_sparse_bitset(T)), fat_sparse_bitset.fat_sparse_bitset(T)).
:- mode intersect_list((builtin.in), (builtin.out)) is det.
:- pred is_empty(fat_sparse_bitset.fat_sparse_bitset(T)).
:- mode is_empty((builtin.in)) is semidet.
:- pred is_non_empty(fat_sparse_bitset.fat_sparse_bitset(T)).
:- mode is_non_empty((builtin.in)) is semidet.
:- pred is_singleton(fat_sparse_bitset.fat_sparse_bitset(T), T) <= (enum.enum(T)).
:- mode is_singleton((builtin.in), (builtin.out)) is semidet.
:- func list_to_set(list.list(T)) = fat_sparse_bitset.fat_sparse_bitset(T) <= (enum.enum(T)).
:- pred list_to_set(list.list(T), fat_sparse_bitset.fat_sparse_bitset(T)) <= (enum.enum(T)).
:- mode list_to_set((builtin.in), (builtin.out)) is det.
:- func make_singleton_set(T) = fat_sparse_bitset.fat_sparse_bitset(T) <= (enum.enum(T)).
:- pred member(T, fat_sparse_bitset.fat_sparse_bitset(T)) <= (enum.enum(T)).
:- mode member((builtin.in), (builtin.in)) is semidet.
:- mode member((builtin.out), (builtin.in)) is nondet.
:- pred remove(T, fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)) <= (enum.enum(T)).
:- mode remove((builtin.in), (builtin.in), (builtin.out)) is semidet.
:- func remove_gt(fat_sparse_bitset.fat_sparse_bitset(T), T) = fat_sparse_bitset.fat_sparse_bitset(T) <= (enum.enum(T)).
:- pred remove_gt(T, fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)) <= (enum.enum(T)).
:- mode remove_gt((builtin.in), (builtin.in), (builtin.out)) is det.
:- pred remove_least(T, fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)) <= (enum.enum(T)).
:- mode remove_least((builtin.out), (builtin.in), (builtin.out)) is semidet.
:- func remove_leq(fat_sparse_bitset.fat_sparse_bitset(T), T) = fat_sparse_bitset.fat_sparse_bitset(T) <= (enum.enum(T)).
:- pred remove_leq(T, fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)) <= (enum.enum(T)).
:- mode remove_leq((builtin.in), (builtin.in), (builtin.out)) is det.
:- pred remove_list(list.list(T), fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)) <= (enum.enum(T)).
:- mode remove_list((builtin.in), (builtin.in), (builtin.out)) is semidet.
:- pred singleton_set(fat_sparse_bitset.fat_sparse_bitset(T), T) <= (enum.enum(T)).
:- mode singleton_set((builtin.out), (builtin.in)) is det.
:- func sorted_list_to_set(list.list(T)) = fat_sparse_bitset.fat_sparse_bitset(T) <= (enum.enum(T)).
:- pred sorted_list_to_set(list.list(T), fat_sparse_bitset.fat_sparse_bitset(T)) <= (enum.enum(T)).
:- mode sorted_list_to_set((builtin.in), (builtin.out)) is det.
:- pred subset(fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)).
:- mode subset((builtin.in), (builtin.in)) is semidet.
:- pred superset(fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)).
:- mode superset((builtin.in), (builtin.in)) is semidet.
:- func to_set(fat_sparse_bitset.fat_sparse_bitset(T)) = set.set(T) <= (enum.enum(T)).
:- func to_sorted_list(fat_sparse_bitset.fat_sparse_bitset(T)) = list.list(T) <= (enum.enum(T)).
:- pred to_sorted_list(fat_sparse_bitset.fat_sparse_bitset(T), list.list(T)) <= (enum.enum(T)).
:- mode to_sorted_list((builtin.in), (builtin.out)) is det.
:- func union(fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)) = fat_sparse_bitset.fat_sparse_bitset(T).
:- pred union(fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T), fat_sparse_bitset.fat_sparse_bitset(T)).
:- mode union((builtin.in), (builtin.in), (builtin.out)) is det.
:- func union_list(list.list(fat_sparse_bitset.fat_sparse_bitset(T))) = fat_sparse_bitset.fat_sparse_bitset(T).
:- pred union_list(list.list(fat_sparse_bitset.fat_sparse_bitset(T)), fat_sparse_bitset.fat_sparse_bitset(T)).
:- mode union_list((builtin.in), (builtin.out)) is det.
