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