diff -r 05072ae0d435 -r 36a59e5d0039 src/HOL/Library/ExecutableSet.thy --- a/src/HOL/Library/ExecutableSet.thy Wed Sep 13 00:38:38 2006 +0200 +++ b/src/HOL/Library/ExecutableSet.thy Wed Sep 13 12:05:50 2006 +0200 @@ -84,51 +84,55 @@ subsection {* Derived definitions *} -consts - unionl :: "'a list \ 'a list \ 'a list" - intersect :: "'a list \ 'a list \ 'a list" - subtract :: "'a list \ 'a list \ 'a list" - map_distinct :: "('a \ 'b) \ 'a list \ 'b list" - unions :: "'a list list \ 'a list" - intersects :: "'a list list \ 'a list" -function +function unionl :: "'a list \ 'a list \ 'a list" +where "unionl [] ys = ys" - "unionl xs ys = foldr insertl xs ys" - by pat_completeness auto +| "unionl xs ys = foldr insertl xs ys" +by pat_completeness auto termination unionl by (auto_term "{}") lemmas unionl_def = unionl.simps(2) +declare unionl.simps[code] -function +function intersect :: "'a list \ 'a list \ 'a list" +where "intersect [] ys = []" - "intersect xs [] = []" - "intersect xs ys = filter (member xs) ys" - by pat_completeness simp_all +| "intersect xs [] = []" +| "intersect xs ys = filter (member xs) ys" + by pat_completeness auto termination intersect by (auto_term "{}") lemmas intersect_def = intersect.simps(3) +declare intersect.simps[code] -function +function subtract :: "'a list \ 'a list \ 'a list" +where "subtract [] ys = ys" - "subtract xs [] = []" - "subtract xs ys = foldr remove1 xs ys" - by pat_completeness simp_all +| "subtract xs [] = []" +| "subtract xs ys = foldr remove1 xs ys" + by pat_completeness auto termination subtract by (auto_term "{}") lemmas subtract_def = subtract.simps(3) +declare subtract.simps[code] -function +function map_distinct :: "('a \ 'b) \ 'a list \ 'b list" +where "map_distinct f [] = []" - "map_distinct f xs = foldr (insertl o f) xs []" - by pat_completeness simp_all +| "map_distinct f xs = foldr (insertl o f) xs []" + by pat_completeness auto termination map_distinct by (auto_term "{}") lemmas map_distinct_def = map_distinct.simps(2) +declare map_distinct.simps[code] -function +function unions :: "'a list list \ 'a list" +where "unions [] = []" "unions xs = foldr unionl xs []" - by pat_completeness simp_all + by pat_completeness auto termination unions by (auto_term "{}") lemmas unions_def = unions.simps(2) +declare unions.simps[code] +consts intersects :: "'a list list \ 'a list" primrec "intersects (x#xs) = foldr intersect xs x" @@ -156,7 +160,8 @@ lemma iso_union: "set (unionl xs ys) = set xs \ set ys" - unfolding unionl_def by (induct xs arbitrary: ys) (simp_all add: iso_insert) + unfolding unionl_def + by (induct xs arbitrary: ys) (simp_all add: iso_insert) lemma iso_intersect: "set (intersect xs ys) = set xs \ set ys"