equal
deleted
inserted
replaced
115 |
115 |
116 lemma finite_insert [simp]: "finite (insert a A) = finite A" |
116 lemma finite_insert [simp]: "finite (insert a A) = finite A" |
117 apply (subst insert_is_Un) |
117 apply (subst insert_is_Un) |
118 apply (simp only: finite_Un) |
118 apply (simp only: finite_Un) |
119 apply blast |
119 apply blast |
120 done |
|
121 |
|
122 lemma finite_imageI[simp]: "finite F ==> finite (h ` F)" |
|
123 -- {* The image of a finite set is finite. *} |
|
124 by (induct set: Finites) simp_all |
|
125 |
|
126 lemma finite_range_imageI: |
|
127 "finite (range g) ==> finite (range (%x. f (g x)))" |
|
128 apply (drule finite_imageI) |
|
129 apply simp |
|
130 done |
120 done |
131 |
121 |
132 lemma finite_empty_induct: |
122 lemma finite_empty_induct: |
133 "finite A ==> |
123 "finite A ==> |
134 P A ==> (!!a A. finite A ==> a:A ==> P A ==> P (A - {a})) ==> P {}" |
124 P A ==> (!!a A. finite A ==> a:A ==> P A ==> P (A - {a})) ==> P {}" |
171 apply (subst insert_Diff) |
161 apply (subst insert_Diff) |
172 apply simp_all |
162 apply simp_all |
173 done |
163 done |
174 |
164 |
175 |
165 |
|
166 subsubsection {* Image and Inverse Image over Finite Sets *} |
|
167 |
|
168 lemma finite_imageI[simp]: "finite F ==> finite (h ` F)" |
|
169 -- {* The image of a finite set is finite. *} |
|
170 by (induct set: Finites) simp_all |
|
171 |
|
172 lemma finite_range_imageI: |
|
173 "finite (range g) ==> finite (range (%x. f (g x)))" |
|
174 apply (drule finite_imageI) |
|
175 apply simp |
|
176 done |
|
177 |
176 lemma finite_imageD: "finite (f`A) ==> inj_on f A ==> finite A" |
178 lemma finite_imageD: "finite (f`A) ==> inj_on f A ==> finite A" |
177 proof - |
179 proof - |
178 have aux: "!!A. finite (A - {}) = finite A" by simp |
180 have aux: "!!A. finite (A - {}) = finite A" by simp |
179 fix B :: "'a set" |
181 fix B :: "'a set" |
180 assume "finite B" |
182 assume "finite B" |
191 apply clarify |
193 apply clarify |
192 apply (rule_tac x = xa in bexI) |
194 apply (rule_tac x = xa in bexI) |
193 apply (simp_all add: inj_on_image_set_diff) |
195 apply (simp_all add: inj_on_image_set_diff) |
194 done |
196 done |
195 qed (rule refl) |
197 qed (rule refl) |
|
198 |
|
199 |
|
200 lemma inj_vimage_singleton: "inj f ==> f-`{a} \<subseteq> {THE x. f x = a}" |
|
201 -- {* The inverse image of a singleton under an injective function |
|
202 is included in a singleton. *} |
|
203 apply (auto simp add: inj_on_def) |
|
204 apply (blast intro: the_equality [symmetric]) |
|
205 done |
|
206 |
|
207 lemma finite_vimageI: "[|finite F; inj h|] ==> finite (h -` F)" |
|
208 -- {* The inverse image of a finite set under an injective function |
|
209 is finite. *} |
|
210 apply (induct set: Finites, simp_all) |
|
211 apply (subst vimage_insert) |
|
212 apply (simp add: finite_Un finite_subset [OF inj_vimage_singleton]) |
|
213 done |
196 |
214 |
197 |
215 |
198 subsubsection {* The finite UNION of finite sets *} |
216 subsubsection {* The finite UNION of finite sets *} |
199 |
217 |
200 lemma finite_UN_I: "finite A ==> (!!a. a:A ==> finite (B a)) ==> finite (UN a:A. B a)" |
218 lemma finite_UN_I: "finite A ==> (!!a. a:A ==> finite (B a)) ==> finite (UN a:A. B a)" |