diff -r 3e972fc58373 -r eee83daed0d7 src/HOL/Library/Multiset.thy --- a/src/HOL/Library/Multiset.thy Tue Mar 04 10:15:29 2025 +0100 +++ b/src/HOL/Library/Multiset.thy Tue Mar 04 13:10:31 2025 +0100 @@ -1299,10 +1299,16 @@ lemma multiset_filter_subset[simp]: "filter_mset f M \# M" by (simp add: mset_subset_eqI) +lemma filter_mset_mono_strong: + assumes "A \# B" "\x. x \# A \ P x \ Q x" + shows "filter_mset P A \# filter_mset Q B" + by (rule mset_subset_eqI) (insert assms, auto simp: mset_subset_eq_count count_eq_zero_iff) + +(* TODO: rename to filter_mset_mono_strong *) lemma multiset_filter_mono: assumes "A \# B" shows "filter_mset f A \# filter_mset f B" - by (metis assms filter_sup_mset subset_mset.order_iff) + using filter_mset_mono_strong[OF \A \# B\] . lemma filter_mset_eq_conv: "filter_mset P M = N \ N \# M \ (\b\#N. P b) \ (\a\#M - N. \ P a)" (is "?P \ ?Q") @@ -2817,6 +2823,12 @@ lemma mset_concat: "mset (concat xss) = (\xs\xss. mset xs)" by (induction xss) auto +lemma set_mset_sum_list [simp]: "set_mset (sum_list xs) = (\x\set xs. set_mset x)" + by (induction xs) auto + +lemma filter_mset_sum_list: "filter_mset P (sum_list xs) = sum_list (map (filter_mset P) xs)" + by (induction xs) simp_all + lemma sum_mset_singleton_mset [simp]: "(\x\#A. {#f x#}) = image_mset f A" by (induction A) auto