diff -r 89347c0cc6a3 -r 5d0d35680311 src/HOL/Library/Multiset.thy --- a/src/HOL/Library/Multiset.thy Thu Jun 19 17:15:40 2025 +0200 +++ b/src/HOL/Library/Multiset.thy Wed Jun 25 14:16:30 2025 +0200 @@ -2175,6 +2175,27 @@ \mset (removeAll x xs) = filter_mset ((\) x) (mset xs)\ by (induction xs) auto +lemma singleton_set_mset_subset: fixes X Y :: "'a list set" + assumes "\xs \ X. set xs \ {a}" "mset ` X \ mset ` Y" + shows "X \ Y" +proof + fix xs assume "xs \ X" + obtain ys where ys: "ys \ Y" "mset xs = mset ys" + using \xs \ X\ assms(2) by auto + then show "xs \ Y" using \xs \ X\ assms(1) ys + by (metis singleton_iff mset_eq_setD replicate_eqI set_empty subset_singletonD size_mset) +qed + +lemma singleton_set_mset_eq: fixes X Y :: "'a list set" + assumes "\xs \ X. set xs \ {a}" "mset ` X = mset ` Y" + shows "X = Y" +proof - + have "\ys \ Y. set ys \ {a}" + by (metis (mono_tags, lifting) assms image_iff mset_eq_setD) + thus ?thesis + by (metis antisym assms(1,2) singleton_set_mset_subset subset_refl) +qed + global_interpretation mset_set: folding add_mset "{#}" defines mset_set = "folding_on.F add_mset {#}" by standard (simp add: fun_eq_iff)