Next: , Previous: set_ctree234, Up: Top


61 set_ordlist

     %--------------------------------------------------%
     % vim: ft=mercury ts=4 sw=4 et
     %--------------------------------------------------%
     % Copyright (C) 1996-1997,1999-2002, 2004-2006, 2008-2012 The University of Melbourne.
     % This file may only be copied under the terms of the GNU Library General
     % Public License - see the file COPYING.LIB in the Mercury distribution.
     %--------------------------------------------------%
     %
     % File: set_ordlist.m.
     % Main authors: conway, fjh.
     % Stability: medium.
     %
     % This file contains a `set' ADT.
     % Sets are implemented here as sorted lists without duplicates.
     %
     %--------------------------------------------------%
     %--------------------------------------------------%
     
     :- module set_ordlist.
     :- interface.
     
     :- import_module bool.
     :- import_module list.
     
     %--------------------------------------------------%
     
     :- type set_ordlist(_T).
     
         % `set_ordlist.init(Set)' is true iff `Set' is an empty set.
         %
     :- pred set_ordlist.init(set_ordlist(_T)::uo) is det.
     :- func set_ordlist.init = set_ordlist(T).
     
         % `set_ordlist.list_to_set(List, Set)' is true iff `Set' is the set
         % containing only the members of `List'.
         %
     :- pred set_ordlist.list_to_set(list(T)::in, set_ordlist(T)::out) is det.
     :- func set_ordlist.list_to_set(list(T)) = set_ordlist(T).
     
         % A synonym for set_ordlist.list_to_set/1.
         %
     :- func set_ordlist.from_list(list(T)) = set_ordlist(T).
     
         % `set_ordlist.sorted_list_to_set(List, Set)' is true iff `Set' is
         % the set containing only the members of `List'.  `List' must be sorted.
         %
     :- pred set_ordlist.sorted_list_to_set(list(T)::in, set_ordlist(T)::out)
         is det.
     :- func set_ordlist.sorted_list_to_set(list(T)) = set_ordlist(T).
     
         % A synonym for set_ordlist.sorted_list_to_set/1.
         %
     :- func set_ordlist.from_sorted_list(list(T)) = set_ordlist(T).
     
         % `set_ordlist.to_sorted_list(Set, List)' is true iff `List' is the
         % list of all the members of `Set', in sorted order.
         %
     :- pred set_ordlist.to_sorted_list(set_ordlist(T)::in, list(T)::out) is det.
     :- func set_ordlist.to_sorted_list(set_ordlist(T)) = list(T).
     
         % `set_ordlist.singleton_set(Elem, Set)' is true iff `Set' is the set
         % containing just the single element `Elem'.
         %
     :- pred set_ordlist.singleton_set(T, set_ordlist(T)).
     :- mode set_ordlist.singleton_set(in, out) is det.
     :- mode set_ordlist.singleton_set(out, in) is semidet.
     
     :- func set_ordlist.make_singleton_set(T) = set_ordlist(T).
     :- pred set_ordlist.is_singleton(set_ordlist(T)::in, T::out) is semidet.
     
         % `set_ordlist.equal(SetA, SetB)' is true iff
         % `SetA' and `SetB' contain the same elements.
         %
     :- pred set_ordlist.equal(set_ordlist(T)::in, set_ordlist(T)::in) is semidet.
     
         % `set_ordlist.empty(Set)' is true iff `Set' is an empty set.
         %
     :- pred set_ordlist.empty(set_ordlist(_T)::in) is semidet.
     :- pred set_ordlist.is_empty(set_ordlist(T)::in) is semidet.
     
     :- pred set_ordlist.non_empty(set_ordlist(T)::in) is semidet.
     :- pred set_ordlist.is_non_empty(set_ordlist(T)::in) is semidet.
     
         % `set_ordlist.subset(SetA, SetB)' is true iff `SetA' is a subset of
         % `SetB'.
         %
     :- pred set_ordlist.subset(set_ordlist(T)::in, set_ordlist(T)::in) is semidet.
     
         % `set_ordlist.superset(SetA, SetB)' is true iff `SetA' is a
         % superset of `SetB'.
         %
     :- pred set_ordlist.superset(set_ordlist(T)::in, set_ordlist(T)::in)
         is semidet.
     
         % `set_ordlist.member(X, Set)' is true iff `X' is a member of `Set'.
         %
     :- pred set_ordlist.member(T, set_ordlist(T)).
     :- mode set_ordlist.member(in, in) is semidet.
     :- mode set_ordlist.member(out, in) is nondet.
     
         % `set_ordlist.is_member(X, Set, Result)' returns
         % `Result = yes' iff `X' is a member of `Set'.
         %
     :- pred set_ordlist.is_member(T::in, set_ordlist(T)::in, bool::out) is det.
     
         % `set_ordlist.contains(Set, X)' is true iff `X' is a member of `Set'.
         %
     :- pred set_ordlist.contains(set_ordlist(T)::in, T::in) is semidet.
     
         % `set_ordlist.insert(X, Set0, Set)' is true iff `Set' is the union
         % of `Set0' and the set containing only `X'.
         %
     :- pred set_ordlist.insert(T::in, set_ordlist(T)::in, set_ordlist(T)::out)
         is det.
     :- func set_ordlist.insert(set_ordlist(T), T) = set_ordlist(T).
     
         % `set_ordlist.insert_new(X, Set0, Set)' is true iff
         % `Set0' does not contain `X', while `Set' is the union of `Set0'
         % and the set containing only `X'.
         %
     :- pred set_ordlist.insert_new(T::in,
         set_ordlist(T)::in, set_ordlist(T)::out) is semidet.
     
         % `set_ordlist.insert_list(Xs, Set0, Set)' is true iff `Set' is the
         % union of `Set0' and the set containing only the members of `Xs'.
         %
     :- pred set_ordlist.insert_list(list(T)::in,
         set_ordlist(T)::in, set_ordlist(T)::out) is det.
     :- func set_ordlist.insert_list(set_ordlist(T), list(T)) = set_ordlist(T).
     
         % `set_ordlist.delete(Set0, X, Set)' is true iff `Set' is the
         % relative complement of `Set0' and the set containing only `X', i.e.
         % if `Set' is the set which contains all the elements of `Set0'
         % except `X'.
         %
     :- pred set_ordlist.delete(T::in, set_ordlist(T)::in, set_ordlist(T)::out)
         is det.
     :- func set_ordlist.delete(set_ordlist(T), T) = set_ordlist(T).
     
         % `set_ordlist.delete_list(Xs, Set0, Set)' is true iff `Set' is the
         % relative complement of `Set0' and the set containing only the members
         % of `Xs'.
         %
     :- pred set_ordlist.delete_list(list(T)::in,
         set_ordlist(T)::in, set_ordlist(T)::out) is det.
     :- func set_ordlist.delete_list(set_ordlist(T), list(T)) = set_ordlist(T).
     
         % `set_ordlist.remove(X, Set0, Set)' is true iff `Set0' contains `X',
         % and `Set' is the relative complement of `Set0' and the set
         % containing only `X', i.e.  if `Set' is the set which contains
         % all the elements of `Set0' except `X'.
         %
     :- pred set_ordlist.remove(T::in, set_ordlist(T)::in, set_ordlist(T)::out)
         is semidet.
     
         % `set_ordlist.remove_list(Xs, Set0, Set)' is true iff Xs does not
         % contain any duplicates, `Set0' contains every member of `Xs',
         % and `Set' is the relative complement of `Set0' and the set
         % containing only the members of `Xs'.
         %
     :- pred set_ordlist.remove_list(list(T)::in,
         set_ordlist(T)::in, set_ordlist(T)::out) is semidet.
     
         % `set_ordlist.remove_least(X, Set0, Set)' is true iff `X' is the
         % least element in `Set0', and `Set' is the set which contains all the
         % elements of `Set0' except `X'.
     
     :- pred set_ordlist.remove_least(T::out,
         set_ordlist(T)::in, set_ordlist(T)::out) is semidet.
     
         % `set_ordlist.union(SetA, SetB, Set)' is true iff `Set' is the union
         % of `SetA' and `SetB'. The efficiency of the union operation is
         % O(card(SetA)+card(SetB)) and is not sensitive to the argument
         % ordering.
         %
     :- pred set_ordlist.union(set_ordlist(T)::in, set_ordlist(T)::in,
         set_ordlist(T)::out) is det.
     :- func set_ordlist.union(set_ordlist(T), set_ordlist(T)) = set_ordlist(T).
     
         % `set_ordlist.union_list(A, B)' is true iff `B' is the union of
         % all the sets in `A'
         %
     :- pred set_ordlist.union_list(list(set_ordlist(T))::in, set_ordlist(T)::out)
         is det.
     :- func set_ordlist.union_list(list(set_ordlist(T))) = set_ordlist(T).
     
         % `set_ordlist.power_union(A, B)' is true iff `B' is the union of
         % all the sets in `A'
         %
     :- pred set_ordlist.power_union(set_ordlist(set_ordlist(T))::in,
         set_ordlist(T)::out) is det.
     :- func set_ordlist.power_union(set_ordlist(set_ordlist(T))) = set_ordlist(T).
     
         % `set_ordlist.intersect(SetA, SetB, Set)' is true iff `Set' is the
         % intersection of `SetA' and `SetB'. The efficiency of the intersection
         % operation is not influenced by the argument order.
         %
     :- pred set_ordlist.intersect(set_ordlist(T), set_ordlist(T), set_ordlist(T)).
     :- mode set_ordlist.intersect(in, in, out) is det.
     :- mode set_ordlist.intersect(in, in, in) is semidet.
     :- func set_ordlist.intersect(set_ordlist(T), set_ordlist(T))
         = set_ordlist(T).
     
         % `set_ordlist.power_intersect(A, B)' is true iff `B' is the
         % intersection of all the sets in `A'.
         %
     :- pred set_ordlist.power_intersect(set_ordlist(set_ordlist(T))::in,
         set_ordlist(T)::out) is det.
     :- func set_ordlist.power_intersect(set_ordlist(set_ordlist(T)))
         = set_ordlist(T).
     
         % `set_ordlist.intersect_list(A) = B' is true iff `B' is the
         % intersection of all the sets in `A'.
         %
     :- func set_ordlist.intersect_list(list(set_ordlist(T))) = set_ordlist(T).
     :- pred set_ordlist.intersect_list(list(set_ordlist(T))::in,
         set_ordlist(T)::out) is det.
     
         % `set_ordlist.difference(SetA, SetB, Set)' is true iff `Set' is the
         % set containing all the elements of `SetA' except those that
         % occur in `SetB'.
         %
     :- pred set_ordlist.difference(set_ordlist(T)::in, set_ordlist(T)::in,
         set_ordlist(T)::out) is det.
     :- func set_ordlist.difference(set_ordlist(T), set_ordlist(T))
         = set_ordlist(T).
     
         % `set_ordlist.count(Set, Count)' is true iff `Set' has
         % `Count' elements.
         %
     :- pred set_ordlist.count(set_ordlist(T)::in, int::out) is det.
     :- func set_ordlist.count(set_ordlist(T)) = int.
     
         % Return the set of items for which the given predicate succeeds.
         %
     :- func set_ordlist.filter(pred(T1), set_ordlist(T1)) = set_ordlist(T1).
     :- mode set_ordlist.filter(pred(in) is semidet, in) = out is det.
     :- pred set_ordlist.filter(pred(T1), set_ordlist(T1), set_ordlist(T1)).
     :- mode set_ordlist.filter(pred(in) is semidet, in, out) is det.
     
         % Return the set of items for which the given predicate succeeds,
         % and the set of items for which it fails.
         %
     :- pred set_ordlist.filter(pred(T1), set_ordlist(T1),
         set_ordlist(T1), set_ordlist(T1)).
     :- mode set_ordlist.filter(pred(in) is semidet, in, out, out) is det.
     
     :- func set_ordlist.map(func(T1) = T2, set_ordlist(T1)) = set_ordlist(T2).
     
     :- func set_ordlist.filter_map(func(T1) = T2, set_ordlist(T1))
         = set_ordlist(T2).
     :- mode set_ordlist.filter_map(func(in) = out is semidet, in) = out is det.
     
     :- pred set_ordlist.filter_map(pred(T1, T2), set_ordlist(T1),
         set_ordlist(T2)).
     :- mode set_ordlist.filter_map(pred(in, out) is semidet, in, out) is det.
     
     :- func set_ordlist.fold(func(T1, T2) = T2, set_ordlist(T1), T2) = T2.
     :- pred set_ordlist.fold(pred(T1, T2, T2), set_ordlist(T1), T2, T2).
     :- mode set_ordlist.fold(pred(in, in, out) is det, in, in, out) is det.
     :- mode set_ordlist.fold(pred(in, mdi, muo) is det, in, mdi, muo) is det.
     :- mode set_ordlist.fold(pred(in, di, uo) is det, in, di, uo) is det.
     :- mode set_ordlist.fold(pred(in, in, out) is semidet, in, in, out)
         is semidet.
     :- mode set_ordlist.fold(pred(in, mdi, muo) is semidet, in, mdi, muo)
         is semidet.
     :- mode set_ordlist.fold(pred(in, di, uo) is semidet, in, di, uo)
         is semidet.
     
     :- func set_ordlist.foldl(func(T1, T2) = T2, set_ordlist(T1), T2) = T2.
     :- pred set_ordlist.foldl(pred(T1, T2, T2), set_ordlist(T1), T2, T2).
     :- mode set_ordlist.foldl(pred(in, in, out) is det, in, in, out) is det.
     :- mode set_ordlist.foldl(pred(in, mdi, muo) is det, in, mdi, muo) is det.
     :- mode set_ordlist.foldl(pred(in, di, uo) is det, in, di, uo) is det.
     :- mode set_ordlist.foldl(pred(in, in, out) is semidet, in, in, out)
         is semidet.
     :- mode set_ordlist.foldl(pred(in, mdi, muo) is semidet, in, mdi, muo)
         is semidet.
     :- mode set_ordlist.foldl(pred(in, di, uo) is semidet, in, di, uo)
         is semidet.
     
     :- pred set_ordlist.fold2(pred(T1, T2, T2, T3, T3), set_ordlist(T1),
         T2, T2, T3, T3).
     :- mode set_ordlist.fold2(pred(in, in, out, in, out) is det, in,
         in, out, in, out) is det.
     :- mode set_ordlist.fold2(pred(in, in, out, mdi, muo) is det, in,
         in, out, mdi, muo) is det.
     :- mode set_ordlist.fold2(pred(in, in, out, di, uo) is det, in,
         in, out, di, uo) is det.
     :- mode set_ordlist.fold2(pred(in, in, out, in, out) is semidet, in,
         in, out, in, out) is semidet.
     :- mode set_ordlist.fold2(pred(in, in, out, mdi, muo) is semidet, in,
         in, out, mdi, muo) is semidet.
     :- mode set_ordlist.fold2(pred(in, in, out, di, uo) is semidet, in,
         in, out, di, uo) is semidet.
     
     :- pred set_ordlist.foldl2(pred(T1, T2, T2, T3, T3), set_ordlist(T1),
         T2, T2, T3, T3).
     :- mode set_ordlist.foldl2(pred(in, in, out, in, out) is det, in,
         in, out, in, out) is det.
     :- mode set_ordlist.foldl2(pred(in, in, out, mdi, muo) is det, in,
         in, out, mdi, muo) is det.
     :- mode set_ordlist.foldl2(pred(in, in, out, di, uo) is det, in,
         in, out, di, uo) is det.
     :- mode set_ordlist.foldl2(pred(in, in, out, in, out) is semidet, in,
         in, out, in, out) is semidet.
     :- mode set_ordlist.foldl2(pred(in, in, out, mdi, muo) is semidet, in,
         in, out, mdi, muo) is semidet.
     :- mode set_ordlist.foldl2(pred(in, in, out, di, uo) is semidet, in,
         in, out, di, uo) is semidet.
     
     :- pred set_ordlist.fold3(pred(T1, T2, T2, T3, T3, T4, T4),
         set_ordlist(T1), T2, T2, T3, T3, T4, T4).
     :- mode set_ordlist.fold3(pred(in, in, out, in, out, in, out) is det, in,
         in, out, in, out, in, out) is det.
     :- mode set_ordlist.fold3(pred(in, in, out, in, out, mdi, muo) is det, in,
         in, out, in, out, mdi, muo) is det.
     :- mode set_ordlist.fold3(pred(in, in, out, in, out, di, uo) is det, in,
         in, out, in, out, di, uo) is det.
     :- mode set_ordlist.fold3(pred(in, in, out, in, out, in, out) is semidet, in,
         in, out, in, out, in, out) is semidet.
     :- mode set_ordlist.fold3(pred(in, in, out, in, out, mdi, muo) is semidet, in,
         in, out, in, out, mdi, muo) is semidet.
     :- mode set_ordlist.fold3(pred(in, in, out, in, out, di, uo) is semidet, in,
         in, out, in, out, di, uo) is semidet.
     
     :- pred set_ordlist.foldl3(pred(T1, T2, T2, T3, T3, T4, T4),
         set_ordlist(T1), T2, T2, T3, T3, T4, T4).
     :- mode set_ordlist.foldl3(pred(in, in, out, in, out, in, out) is det, in,
         in, out, in, out, in, out) is det.
     :- mode set_ordlist.foldl3(pred(in, in, out, in, out, mdi, muo) is det, in,
         in, out, in, out, mdi, muo) is det.
     :- mode set_ordlist.foldl3(pred(in, in, out, in, out, di, uo) is det, in,
         in, out, in, out, di, uo) is det.
     :- mode set_ordlist.foldl3(pred(in, in, out, in, out, in, out) is semidet, in,
         in, out, in, out, in, out) is semidet.
     :- mode set_ordlist.foldl3(pred(in, in, out, in, out, mdi, muo) is semidet, in,
         in, out, in, out, mdi, muo) is semidet.
     :- mode set_ordlist.foldl3(pred(in, in, out, in, out, di, uo) is semidet, in,
         in, out, in, out, di, uo) is semidet.
     
     :- pred set_ordlist.fold4(pred(T1, T2, T2, T3, T3, T4, T4, T5, T5),
         set_ordlist(T1), T2, T2, T3, T3, T4, T4, T5, T5).
     :- mode set_ordlist.fold4(
         pred(in, in, out, in, out, in, out, in, out) is det, in,
         in, out, in, out, in, out, in, out) is det.
     :- mode set_ordlist.fold4(
         pred(in, in, out, in, out, in, out, mdi, muo) is det, in,
         in, out, in, out, in, out, mdi, muo) is det.
     :- mode set_ordlist.fold4(
         pred(in, in, out, in, out, in, out, di, uo) is det, in,
         in, out, in, out, in, out, di, uo) is det.
     :- mode set_ordlist.fold4(
         pred(in, in, out, in, out, in, out, in, out) is semidet, in,
         in, out, in, out, in, out, in, out) is semidet.
     :- mode set_ordlist.fold4(
         pred(in, in, out, in, out, in, out, mdi, muo) is semidet, in,
         in, out, in, out, in, out, mdi, muo) is semidet.
     :- mode set_ordlist.fold4(
         pred(in, in, out, in, out, in, out, di, uo) is semidet, in,
         in, out, in, out, in, out, di, uo) is semidet.
     
     :- pred set_ordlist.foldl4(pred(T1, T2, T2, T3, T3, T4, T4, T5, T5),
         set_ordlist(T1), T2, T2, T3, T3, T4, T4, T5, T5).
     :- mode set_ordlist.foldl4(
         pred(in, in, out, in, out, in, out, in, out) is det, in,
         in, out, in, out, in, out, in, out) is det.
     :- mode set_ordlist.foldl4(
         pred(in, in, out, in, out, in, out, mdi, muo) is det, in,
         in, out, in, out, in, out, mdi, muo) is det.
     :- mode set_ordlist.foldl4(
         pred(in, in, out, in, out, in, out, di, uo) is det, in,
         in, out, in, out, in, out, di, uo) is det.
     :- mode set_ordlist.foldl4(
         pred(in, in, out, in, out, in, out, in, out) is semidet, in,
         in, out, in, out, in, out, in, out) is semidet.
     :- mode set_ordlist.foldl4(
         pred(in, in, out, in, out, in, out, mdi, muo) is semidet, in,
         in, out, in, out, in, out, mdi, muo) is semidet.
     :- mode set_ordlist.foldl4(
         pred(in, in, out, in, out, in, out, di, uo) is semidet, in,
         in, out, in, out, in, out, di, uo) is semidet.
     
     :- pred set_ordlist.fold5(
         pred(T1, T2, T2, T3, T3, T4, T4, T5, T5, T6, T6),
         set_ordlist(T1), T2, T2, T3, T3, T4, T4, T5, T5, T6, T6).
     :- mode set_ordlist.fold5(
         pred(in, in, out, in, out, in, out, in, out, in, out) is det, in,
         in, out, in, out, in, out, in, out, in, out) is det.
     :- mode set_ordlist.fold5(
         pred(in, in, out, in, out, in, out, in, out, mdi, muo) is det, in,
         in, out, in, out, in, out, in, out, mdi, muo) is det.
     :- mode set_ordlist.fold5(
         pred(in, in, out, in, out, in, out, in, out, di, uo) is det, in,
         in, out, in, out, in, out, in, out, di, uo) is det.
     :- mode set_ordlist.fold5(
         pred(in, in, out, in, out, in, out, in, out, in, out) is semidet, in,
         in, out, in, out, in, out, in, out, in, out) is semidet.
     :- mode set_ordlist.fold5(
         pred(in, in, out, in, out, in, out, in, out, mdi, muo) is semidet, in,
         in, out, in, out, in, out, in, out, mdi, muo) is semidet.
     :- mode set_ordlist.fold5(
         pred(in, in, out, in, out, in, out, in, out, di, uo) is semidet, in,
         in, out, in, out, in, out, in, out, di, uo) is semidet.
     
     :- pred set_ordlist.foldl5(
         pred(T1, T2, T2, T3, T3, T4, T4, T5, T5, T6, T6),
         set_ordlist(T1), T2, T2, T3, T3, T4, T4, T5, T5, T6, T6).
     :- mode set_ordlist.foldl5(
         pred(in, in, out, in, out, in, out, in, out, in, out) is det, in,
         in, out, in, out, in, out, in, out, in, out) is det.
     :- mode set_ordlist.foldl5(
         pred(in, in, out, in, out, in, out, in, out, mdi, muo) is det, in,
         in, out, in, out, in, out, in, out, mdi, muo) is det.
     :- mode set_ordlist.foldl5(
         pred(in, in, out, in, out, in, out, in, out, di, uo) is det, in,
         in, out, in, out, in, out, in, out, di, uo) is det.
     :- mode set_ordlist.foldl5(
         pred(in, in, out, in, out, in, out, in, out, in, out) is semidet, in,
         in, out, in, out, in, out, in, out, in, out) is semidet.
     :- mode set_ordlist.foldl5(
         pred(in, in, out, in, out, in, out, in, out, mdi, muo) is semidet, in,
         in, out, in, out, in, out, in, out, mdi, muo) is semidet.
     :- mode set_ordlist.foldl5(
         pred(in, in, out, in, out, in, out, in, out, di, uo) is semidet, in,
         in, out, in, out, in, out, in, out, di, uo) is semidet.
     
     :- pred set_ordlist.fold6(pred(T, A, A, B, B, C, C, D, D, E, E, F, F),
         set_ordlist(T), A, A, B, B, C, C, D, D, E, E, F, F).
     :- mode set_ordlist.fold6(
         pred(in, in, out, in, out, in, out, in, out, in, out, in, out) is det,
         in, in, out, in, out, in, out, in, out, in, out, in, out) is det.
     :- mode set_ordlist.fold6(
         pred(in, in, out, in, out, in, out, in, out, in, out, mdi, muo) is det,
         in, in, out, in, out, in, out, in, out, in, out, mdi, muo) is det.
     :- mode set_ordlist.fold6(
         pred(in, in, out, in, out, in, out, in, out, in, out, di, uo) is det,
         in, in, out, in, out, in, out, in, out, in, out, di, uo) is det.
     :- mode set_ordlist.fold6(
         pred(in, in, out, in, out, in, out, in, out, in, out, in, out) is semidet,
         in, in, out, in, out, in, out, in, out, in, out, in, out) is semidet.
     :- mode set_ordlist.fold6(
         pred(in, in, out, in, out, in, out, in, out, in, out, mdi, muo) is semidet,
         in, in, out, in, out, in, out, in, out, in, out, mdi, muo) is semidet.
     :- mode set_ordlist.fold6(
         pred(in, in, out, in, out, in, out, in, out, in, out, di, uo) is semidet,
         in, in, out, in, out, in, out, in, out, in, out, di, uo) is semidet.
     
     :- pred set_ordlist.foldl6(pred(T, A, A, B, B, C, C, D, D, E, E, F, F),
         set_ordlist(T), A, A, B, B, C, C, D, D, E, E, F, F).
     :- mode set_ordlist.foldl6(
         pred(in, in, out, in, out, in, out, in, out, in, out, in, out) is det,
         in, in, out, in, out, in, out, in, out, in, out, in, out) is det.
     :- mode set_ordlist.foldl6(
         pred(in, in, out, in, out, in, out, in, out, in, out, mdi, muo) is det,
         in, in, out, in, out, in, out, in, out, in, out, mdi, muo) is det.
     :- mode set_ordlist.foldl6(
         pred(in, in, out, in, out, in, out, in, out, in, out, di, uo) is det,
         in, in, out, in, out, in, out, in, out, in, out, di, uo) is det.
     :- mode set_ordlist.foldl6(
         pred(in, in, out, in, out, in, out, in, out, in, out, in, out) is semidet,
         in, in, out, in, out, in, out, in, out, in, out, in, out) is semidet.
     :- mode set_ordlist.foldl6(
         pred(in, in, out, in, out, in, out, in, out, in, out, mdi, muo) is semidet,
         in, in, out, in, out, in, out, in, out, in, out, mdi, muo) is semidet.
     :- mode set_ordlist.foldl6(
         pred(in, in, out, in, out, in, out, in, out, in, out, di, uo) is semidet,
         in, in, out, in, out, in, out, in, out, in, out, di, uo) is semidet.
     
         % all_true(Pred, Set) succeeds iff Pred(Element) succeeds
         % for all the elements of Set.
         %
     :- pred all_true(pred(T)::in(pred(in) is semidet), set_ordlist(T)::in)
         is semidet.
     
         % set_ordlist.divide(Pred, Set, TruePart, FalsePart):
         % TruePart consists of those elements of Set for which Pred succeeds;
         % FalsePart consists of those elements of Set for which Pred fails.
         %
     :- pred set_ordlist.divide(pred(T)::in(pred(in) is semidet),
         set_ordlist(T)::in, set_ordlist(T)::out, set_ordlist(T)::out) is det.
     
         % set_ordlist.divide_by_set(DivideBySet, Set, InPart, OutPart):
         % InPart consists of those elements of Set which are also in DivideBySet;
         % OutPart consists of those elements of Set which are not in DivideBySet.
         %
     :- pred set_ordlist.divide_by_set(set_ordlist(T)::in, set_ordlist(T)::in,
         set_ordlist(T)::out, set_ordlist(T)::out) is det.
     
     %--------------------------------------------------%
     %--------------------------------------------------%