src/HOL/Library/Multiset.thy
changeset 49388 1ffd5a055acf
parent 48040 4caf6cd063be
child 49394 52e636ace94e
equal deleted inserted replaced
49387:167708456269 49388:1ffd5a055acf
   120   by (simp add: plus_multiset.rep_eq)
   120   by (simp add: plus_multiset.rep_eq)
   121 
   121 
   122 
   122 
   123 subsubsection {* Difference *}
   123 subsubsection {* Difference *}
   124 
   124 
   125 instantiation multiset :: (type) minus
   125 instantiation multiset :: (type) comm_monoid_diff
   126 begin
   126 begin
   127 
   127 
   128 lift_definition minus_multiset :: "'a multiset => 'a multiset => 'a multiset" is "\<lambda> M N. \<lambda>a. M a - N a"
   128 lift_definition minus_multiset :: "'a multiset => 'a multiset => 'a multiset" is "\<lambda> M N. \<lambda>a. M a - N a"
   129 by (rule diff_preserves_multiset)
   129 by (rule diff_preserves_multiset)
   130  
   130  
   131 instance ..
   131 instance
       
   132 by default (transfer, simp add: fun_eq_iff)+
   132 
   133 
   133 end
   134 end
   134 
   135 
   135 lemma count_diff [simp]: "count (M - N) a = count M a - count N a"
   136 lemma count_diff [simp]: "count (M - N) a = count M a - count N a"
   136   by (simp add: minus_multiset.rep_eq)
   137   by (simp add: minus_multiset.rep_eq)
   159   "(M::'a multiset) - N - Q = M - Q - N"
   160   "(M::'a multiset) - N - Q = M - Q - N"
   160   by (auto simp add: multiset_eq_iff)
   161   by (auto simp add: multiset_eq_iff)
   161 
   162 
   162 lemma diff_add:
   163 lemma diff_add:
   163   "(M::'a multiset) - (N + Q) = M - N - Q"
   164   "(M::'a multiset) - (N + Q) = M - N - Q"
       
   165   find_theorems solves
   164 by (simp add: multiset_eq_iff)
   166 by (simp add: multiset_eq_iff)
   165 
   167 
   166 lemma diff_union_swap:
   168 lemma diff_union_swap:
   167   "a \<noteq> b \<Longrightarrow> M - {#a#} + {#b#} = M + {#b#} - {#a#}"
   169   "a \<noteq> b \<Longrightarrow> M - {#a#} + {#b#} = M + {#b#} - {#a#}"
   168   by (auto simp add: multiset_eq_iff)
   170   by (auto simp add: multiset_eq_iff)
  1911 Nitpick_Model.register_term_postprocessor @{typ "'a multiset"}
  1913 Nitpick_Model.register_term_postprocessor @{typ "'a multiset"}
  1912     multiset_postproc
  1914     multiset_postproc
  1913 *}
  1915 *}
  1914 
  1916 
  1915 end
  1917 end
       
  1918