467 apply (rule iffI) |
467 apply (rule iffI) |
468 apply (rule exI [where x = "B - A"]) |
468 apply (rule exI [where x = "B - A"]) |
469 apply (auto intro: multiset_eq_iff [THEN iffD2]) |
469 apply (auto intro: multiset_eq_iff [THEN iffD2]) |
470 done |
470 done |
471 |
471 |
472 interpretation subset_mset: ordered_cancel_comm_monoid_diff "op +" 0 "op \<le>#" "op <#" "op -" |
472 interpretation subset_mset: ordered_cancel_comm_monoid_diff "op +" 0 "op \<le>#" "op <#" "op -" |
473 by standard (simp, fact mset_subset_eq_exists_conv) |
473 by standard (simp, fact mset_subset_eq_exists_conv) |
|
474 |
|
475 interpretation subset_mset: ordered_ab_semigroup_monoid_add_imp_le "op +" 0 "op -" "op \<le>#" "op <#" |
|
476 by standard |
474 |
477 |
475 lemma mset_subset_eq_mono_add_right_cancel [simp]: "(A::'a multiset) + C \<subseteq># B + C \<longleftrightarrow> A \<subseteq># B" |
478 lemma mset_subset_eq_mono_add_right_cancel [simp]: "(A::'a multiset) + C \<subseteq># B + C \<longleftrightarrow> A \<subseteq># B" |
476 by (fact subset_mset.add_le_cancel_right) |
479 by (fact subset_mset.add_le_cancel_right) |
477 |
480 |
478 lemma mset_subset_eq_mono_add_left_cancel [simp]: "C + (A::'a multiset) \<subseteq># C + B \<longleftrightarrow> A \<subseteq># B" |
481 lemma mset_subset_eq_mono_add_left_cancel [simp]: "C + (A::'a multiset) \<subseteq># C + B \<longleftrightarrow> A \<subseteq># B" |
479 by (fact subset_mset.add_le_cancel_left) |
482 by (fact subset_mset.add_le_cancel_left) |
480 |
483 |
481 lemma mset_subset_eq_mono_add: "(A::'a multiset) \<subseteq># B \<Longrightarrow> C \<subseteq># D \<Longrightarrow> A + C \<subseteq># B + D" |
484 lemma mset_subset_eq_mono_add: "(A::'a multiset) \<subseteq># B \<Longrightarrow> C \<subseteq># D \<Longrightarrow> A + C \<subseteq># B + D" |
482 by (fact subset_mset.add_mono) |
485 by (fact subset_mset.add_mono) |
483 |
486 |
484 lemma mset_subset_eq_add_left [simp]: "(A::'a multiset) \<subseteq># A + B" |
487 lemma mset_subset_eq_add_left: "(A::'a multiset) \<subseteq># A + B" |
485 unfolding subseteq_mset_def by auto |
488 by simp |
486 |
489 |
487 lemma mset_subset_eq_add_right [simp]: "B \<subseteq># (A::'a multiset) + B" |
490 lemma mset_subset_eq_add_right: "B \<subseteq># (A::'a multiset) + B" |
488 unfolding subseteq_mset_def by auto |
491 by simp |
489 |
492 |
490 lemma single_subset_iff [simp]: |
493 lemma single_subset_iff [simp]: |
491 "{#a#} \<subseteq># M \<longleftrightarrow> a \<in># M" |
494 "{#a#} \<subseteq># M \<longleftrightarrow> a \<in># M" |
492 by (auto simp add: subseteq_mset_def Suc_le_eq) |
495 by (auto simp add: subseteq_mset_def Suc_le_eq) |
493 |
496 |