src/HOL/Library/Multiset.thy
changeset 47177 2fa00264392a
parent 47143 212f7a975d49
child 47179 54b38de0620e
equal deleted inserted replaced
47172:9fc17f9ccd6c 47177:2fa00264392a
  1190   "{#} = Bag (DAList.empty)"
  1190   "{#} = Bag (DAList.empty)"
  1191   by (simp add: multiset_eq_iff alist.Alist_inverse DAList.empty_def)
  1191   by (simp add: multiset_eq_iff alist.Alist_inverse DAList.empty_def)
  1192 
  1192 
  1193 lemma single_Bag [code]:
  1193 lemma single_Bag [code]:
  1194   "{#x#} = Bag (DAList.update x 1 DAList.empty)"
  1194   "{#x#} = Bag (DAList.update x 1 DAList.empty)"
  1195   by (simp add: multiset_eq_iff alist.Alist_inverse impl_of_update impl_of_empty)
  1195   by (simp add: multiset_eq_iff alist.Alist_inverse update_code_eqn empty_code_eqn)
  1196 
  1196 
  1197 lemma union_Bag [code]:
  1197 lemma union_Bag [code]:
  1198   "Bag xs + Bag ys = Bag (join (\<lambda>x (n1, n2). n1 + n2) xs ys)"
  1198   "Bag xs + Bag ys = Bag (join (\<lambda>x (n1, n2). n1 + n2) xs ys)"
  1199 by (rule multiset_eqI) (simp add: count_of_join_raw alist.Alist_inverse distinct_join_raw join_def)
  1199 by (rule multiset_eqI) (simp add: count_of_join_raw alist.Alist_inverse distinct_join_raw join_def)
  1200 
  1200 
  1203 by (rule multiset_eqI)
  1203 by (rule multiset_eqI)
  1204   (simp add: count_of_subtract_entries_raw alist.Alist_inverse distinct_subtract_entries_raw subtract_entries_def)
  1204   (simp add: count_of_subtract_entries_raw alist.Alist_inverse distinct_subtract_entries_raw subtract_entries_def)
  1205 
  1205 
  1206 lemma filter_Bag [code]:
  1206 lemma filter_Bag [code]:
  1207   "Multiset.filter P (Bag xs) = Bag (DAList.filter (P \<circ> fst) xs)"
  1207   "Multiset.filter P (Bag xs) = Bag (DAList.filter (P \<circ> fst) xs)"
  1208 by (rule multiset_eqI) (simp add: count_of_filter impl_of_filter)
  1208 by (rule multiset_eqI) (simp add: count_of_filter filter_code_eqn)
  1209 
  1209 
  1210 lemma mset_less_eq_Bag [code]:
  1210 lemma mset_less_eq_Bag [code]:
  1211   "Bag xs \<le> A \<longleftrightarrow> (\<forall>(x, n) \<in> set (DAList.impl_of xs). count_of (DAList.impl_of xs) x \<le> count A x)"
  1211   "Bag xs \<le> A \<longleftrightarrow> (\<forall>(x, n) \<in> set (DAList.impl_of xs). count_of (DAList.impl_of xs) x \<le> count A x)"
  1212     (is "?lhs \<longleftrightarrow> ?rhs")
  1212     (is "?lhs \<longleftrightarrow> ?rhs")
  1213 proof
  1213 proof