equal
deleted
inserted
replaced
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: |