src/HOL/Library/Multiset.thy
changeset 12338 de0f4a63baa5
parent 11868 56db9f3a6b3e
child 12399 2ba27248af7f
equal deleted inserted replaced
12337:7c6a970f0808 12338:de0f4a63baa5
    45 
    45 
    46 constdefs
    46 constdefs
    47   set_of :: "'a multiset => 'a set"
    47   set_of :: "'a multiset => 'a set"
    48   "set_of M == {x. x :# M}"
    48   "set_of M == {x. x :# M}"
    49 
    49 
    50 instance multiset :: ("term") plus ..
    50 instance multiset :: (type) plus ..
    51 instance multiset :: ("term") minus ..
    51 instance multiset :: (type) minus ..
    52 instance multiset :: ("term") zero ..
    52 instance multiset :: (type) zero ..
    53 
    53 
    54 defs (overloaded)
    54 defs (overloaded)
    55   union_def: "M + N == Abs_multiset (\<lambda>a. Rep_multiset M a + Rep_multiset N a)"
    55   union_def: "M + N == Abs_multiset (\<lambda>a. Rep_multiset M a + Rep_multiset N a)"
    56   diff_def: "M - N == Abs_multiset (\<lambda>a. Rep_multiset M a - Rep_multiset N a)"
    56   diff_def: "M - N == Abs_multiset (\<lambda>a. Rep_multiset M a - Rep_multiset N a)"
    57   Zero_multiset_def [simp]: "0 == {#}"
    57   Zero_multiset_def [simp]: "0 == {#}"
   112   apply (rule union_commute [THEN arg_cong])
   112   apply (rule union_commute [THEN arg_cong])
   113   done
   113   done
   114 
   114 
   115 theorems union_ac = union_assoc union_commute union_lcomm
   115 theorems union_ac = union_assoc union_commute union_lcomm
   116 
   116 
   117 instance multiset :: ("term") plus_ac0
   117 instance multiset :: (type) plus_ac0
   118   apply intro_classes
   118   apply intro_classes
   119     apply (rule union_commute)
   119     apply (rule union_commute)
   120    apply (rule union_assoc)
   120    apply (rule union_assoc)
   121   apply simp
   121   apply simp
   122   done
   122   done
   658   done
   658   done
   659 
   659 
   660 
   660 
   661 subsubsection {* Partial-order properties *}
   661 subsubsection {* Partial-order properties *}
   662 
   662 
   663 instance multiset :: ("term") ord ..
   663 instance multiset :: (type) ord ..
   664 
   664 
   665 defs (overloaded)
   665 defs (overloaded)
   666   less_multiset_def: "M' < M == (M', M) \<in> mult {(x', x). x' < x}"
   666   less_multiset_def: "M' < M == (M', M) \<in> mult {(x', x). x' < x}"
   667   le_multiset_def: "M' <= M == M' = M \<or> M' < (M::'a multiset)"
   667   le_multiset_def: "M' <= M == M' = M \<or> M' < (M::'a multiset)"
   668 
   668