src/Pure/library.ML
changeset 33079 06a48bbeb22a
parent 33078 3aea60ca3900
child 33081 fe29679cabc2
equal deleted inserted replaced
33078:3aea60ca3900 33079:06a48bbeb22a
   172   val has_duplicates: ('a * 'a -> bool) -> 'a list -> bool
   172   val has_duplicates: ('a * 'a -> bool) -> 'a list -> bool
   173 
   173 
   174   (*lists as multisets*)
   174   (*lists as multisets*)
   175   val remove1: ('b * 'a -> bool) -> 'b -> 'a list -> 'a list
   175   val remove1: ('b * 'a -> bool) -> 'b -> 'a list -> 'a list
   176   val combine: ('a * 'a -> bool) -> 'a list -> 'a list -> 'a list
   176   val combine: ('a * 'a -> bool) -> 'a list -> 'a list -> 'a list
       
   177   val submultiset: ('a * 'b -> bool) -> 'a list * 'b list -> bool
   177 
   178 
   178   (*orders*)
   179   (*orders*)
   179   val is_equal: order -> bool
   180   val is_equal: order -> bool
   180   val rev_order: order -> order
   181   val rev_order: order -> order
   181   val make_ord: ('a * 'a -> bool) -> 'a * 'a -> order
   182   val make_ord: ('a * 'a -> bool) -> 'a * 'a -> order
   861 fun remove1 eq x [] = []
   862 fun remove1 eq x [] = []
   862   | remove1 eq x (y :: ys) = if eq (x, y) then ys else y :: remove1 eq x ys;
   863   | remove1 eq x (y :: ys) = if eq (x, y) then ys else y :: remove1 eq x ys;
   863 
   864 
   864 fun combine eq xs ys = fold (remove1 eq) ys xs @ ys;
   865 fun combine eq xs ys = fold (remove1 eq) ys xs @ ys;
   865 
   866 
       
   867 fun submultiset _ ([], _)  = true
       
   868   | submultiset eq (x :: xs, ys) = member eq ys x andalso submultiset eq (xs, remove1 eq x ys);
       
   869 
   866 
   870 
   867 
   871 
   868 (** orders **)
   872 (** orders **)
   869 
   873 
   870 fun is_equal EQUAL = true
   874 fun is_equal EQUAL = true