# HG changeset patch # User nipkow # Date 1380024443 -7200 # Node ID 9bae89bb032ce816b0a417e51fa0f1f79e227f18 # Parent e55d641d0a706d1c6a3330a9291d1ec43452c702# Parent 9c7e97d67b456167c6b48547f796b262425a88dc merged diff -r e55d641d0a70 -r 9bae89bb032c src/HOL/Finite_Set.thy --- a/src/HOL/Finite_Set.thy Tue Sep 24 12:11:53 2013 +0200 +++ b/src/HOL/Finite_Set.thy Tue Sep 24 14:07:23 2013 +0200 @@ -440,6 +440,16 @@ lemma finite_UnionD: "finite(\A) \ finite A" by (blast intro: finite_subset [OF subset_Pow_Union]) +lemma finite_set_of_finite_funs: assumes "finite A" "finite B" +shows "finite{f. \x. (x \ A \ f x \ B) \ (x \ A \ f x = d)}" (is "finite ?S") +proof- + let ?F = "\f. {(a,b). a \ A \ b = f a}" + have "?F ` ?S \ Pow(A \ B)" by auto + from finite_subset[OF this] assms have 1: "finite (?F ` ?S)" by simp + have 2: "inj_on ?F ?S" + by(fastforce simp add: inj_on_def set_eq_iff fun_eq_iff) + show ?thesis by(rule finite_imageD[OF 1 2]) +qed subsubsection {* Further induction rules on finite sets *} diff -r e55d641d0a70 -r 9bae89bb032c src/HOL/Map.thy --- a/src/HOL/Map.thy Tue Sep 24 12:11:53 2013 +0200 +++ b/src/HOL/Map.thy Tue Sep 24 14:07:23 2013 +0200 @@ -589,6 +589,24 @@ then show ?thesis by (simp add: dom_map_of_conv_image_fst) qed +lemma finite_set_of_finite_maps: +assumes "finite A" "finite B" +shows "finite {m. dom m = A \ ran m \ B}" (is "finite ?S") +proof - + let ?S' = "{m. \x. (x \ A \ m x \ Some ` B) \ (x \ A \ m x = None)}" + have "?S = ?S'" + proof + show "?S \ ?S'" by(auto simp: dom_def ran_def image_def) + show "?S' \ ?S" + proof + fix m assume "m \ ?S'" + hence 1: "dom m = A" by force + hence 2: "ran m \ B" using `m \ ?S'` by(auto simp: dom_def ran_def) + from 1 2 show "m \ ?S" by blast + qed + qed + with assms show ?thesis by(simp add: finite_set_of_finite_funs) +qed subsection {* @{term [source] ran} *}