src/HOL/Library/Multiset.thy
changeset 64587 8355a6e2df79
parent 64586 1d25ca718790
child 64591 240a39af9ec4
equal deleted inserted replaced
64586:1d25ca718790 64587:8355a6e2df79
   526 
   526 
   527 interpretation subset_mset: ordered_ab_semigroup_add_imp_le "op +" "op -" "op \<subseteq>#" "op \<subset>#"
   527 interpretation subset_mset: ordered_ab_semigroup_add_imp_le "op +" "op -" "op \<subseteq>#" "op \<subset>#"
   528   by standard (auto simp add: subset_mset_def subseteq_mset_def multiset_eq_iff intro: order_trans antisym)
   528   by standard (auto simp add: subset_mset_def subseteq_mset_def multiset_eq_iff intro: order_trans antisym)
   529     \<comment> \<open>FIXME: avoid junk stemming from type class interpretation\<close>
   529     \<comment> \<open>FIXME: avoid junk stemming from type class interpretation\<close>
   530 
   530 
   531 interpretation subset_mset: ordered_ab_semigroup_monoid_add_imp_le "op +" 0 "op -" "op \<le>#" "op <#"
   531 interpretation subset_mset: ordered_ab_semigroup_monoid_add_imp_le "op +" 0 "op -" "op \<subseteq>#" "op \<subset>#"
   532   by standard
   532   by standard
   533     \<comment> \<open>FIXME: avoid junk stemming from type class interpretation\<close>
   533     \<comment> \<open>FIXME: avoid junk stemming from type class interpretation\<close>
   534 
   534 
   535 lemma mset_subset_eqI:
   535 lemma mset_subset_eqI:
   536   "(\<And>a. count A a \<le> count B a) \<Longrightarrow> A \<subseteq># B"
   536   "(\<And>a. count A a \<le> count B a) \<Longrightarrow> A \<subseteq># B"
   545   apply (rule iffI)
   545   apply (rule iffI)
   546    apply (rule exI [where x = "B - A"])
   546    apply (rule exI [where x = "B - A"])
   547    apply (auto intro: multiset_eq_iff [THEN iffD2])
   547    apply (auto intro: multiset_eq_iff [THEN iffD2])
   548   done
   548   done
   549 
   549 
   550 interpretation subset_mset: ordered_cancel_comm_monoid_diff "op +" 0 "op \<le>#" "op <#" "op -"
   550 interpretation subset_mset: ordered_cancel_comm_monoid_diff "op +" 0 "op \<subseteq>#" "op \<subset>#" "op -"
   551   by standard (simp, fact mset_subset_eq_exists_conv)
   551   by standard (simp, fact mset_subset_eq_exists_conv)
   552     \<comment> \<open>FIXME: avoid junk stemming from type class interpretation\<close>
   552     \<comment> \<open>FIXME: avoid junk stemming from type class interpretation\<close>
   553 
   553 
   554 declare subset_mset.add_diff_assoc[simp] subset_mset.add_diff_assoc2[simp]
   554 declare subset_mset.add_diff_assoc[simp] subset_mset.add_diff_assoc2[simp]
   555 
   555 
   626   by (rule mset_subset_eq_insertD) simp
   626   by (rule mset_subset_eq_insertD) simp
   627 
   627 
   628 lemma mset_subset_of_empty[simp]: "A \<subset># {#} \<longleftrightarrow> False"
   628 lemma mset_subset_of_empty[simp]: "A \<subset># {#} \<longleftrightarrow> False"
   629   by (simp only: subset_mset.not_less_zero)
   629   by (simp only: subset_mset.not_less_zero)
   630 
   630 
   631 lemma empty_subset_add_mset[simp]: "{#} <# add_mset x M"
   631 lemma empty_subset_add_mset[simp]: "{#} \<subset># add_mset x M"
   632 by(auto intro: subset_mset.gr_zeroI)
   632   by (auto intro: subset_mset.gr_zeroI)
   633 
   633 
   634 lemma empty_le: "{#} \<subseteq># A"
   634 lemma empty_le: "{#} \<subseteq># A"
   635   by (fact subset_mset.zero_le)
   635   by (fact subset_mset.zero_le)
   636 
   636 
   637 lemma insert_subset_eq_iff:
   637 lemma insert_subset_eq_iff: