diff -r d654c73e4b12 -r 07bcf80391d0 src/HOL/List.thy --- a/src/HOL/List.thy Fri Apr 06 18:17:16 2012 +0200 +++ b/src/HOL/List.thy Fri Apr 06 19:18:00 2012 +0200 @@ -5619,8 +5619,6 @@ subsubsection {* Implementation of sets by lists *} -text {* Basic operations *} - lemma is_empty_set [code]: "Set.is_empty (set xs) \ List.null xs" by (simp add: Set.is_empty_def null_def) @@ -5664,6 +5662,17 @@ "image f (set xs) = set (map f xs)" by simp +lemma subset_code [code]: + "set xs \ B \ (\x\set xs. x \ B)" + "A \ List.coset ys \ (\y\set ys. y \ A)" + "List.coset [] \ set [] \ False" + by auto + +text {* A frequent case – avoid intermediate sets *} +lemma [code_unfold]: + "set xs \ set ys \ list_all (\x. x \ set ys) xs" + by (auto simp: list_all_iff) + lemma Ball_set [code]: "Ball (set xs) P \ list_all P xs" by (simp add: list_all_iff) @@ -5689,20 +5698,6 @@ "Pow (set (x # xs)) = (let A = Pow (set xs) in A \ insert x ` A)" by (simp_all add: Pow_insert Let_def) -text {* Further operations on sets *} - -(* Minimal refinement of equality on sets *) -declare subset_eq[code del] -lemma subset_code [code]: - "set xs <= B \ (ALL x : set xs. x : B)" - "List.coset xs <= List.coset ys \ set ys <= set xs" - "List.coset [] <= set [] \ False" -by auto - -text{* Optimising a frequent case: *} -lemma [code_unfold]: "set xs \ set ys \ list_all (\x. x \ set ys) xs" -by (auto simp: list_all_iff) - lemma setsum_code [code]: "setsum f (set xs) = listsum (map f (remdups xs))" by (simp add: listsum_distinct_conv_setsum_set) @@ -5712,8 +5707,7 @@ lemma [code]: "map_project f (set xs) = set (List.map_filter f xs)" -unfolding map_project_def map_filter_def -by auto (metis (lifting, mono_tags) CollectI image_eqI o_apply the.simps) + by (auto simp add: map_project_def map_filter_def image_def) hide_const (open) map_project