src/HOL/Library/Multiset.thy
changeset 63560 3e3097ac37d1
parent 63547 00521f181510
child 63660 76302202a92d
equal deleted inserted replaced
63559:113cee845044 63560:3e3097ac37d1
   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