src/HOL/Finite_Set.thy
changeset 32989 c28279b29ff1
parent 32962 69916a850301
parent 32988 d1d4d7a08a66
child 33057 764547b68538
     1.1 --- a/src/HOL/Finite_Set.thy	Sun Oct 18 00:10:20 2009 +0200
     1.2 +++ b/src/HOL/Finite_Set.thy	Sun Oct 18 12:07:56 2009 +0200
     1.3 @@ -155,6 +155,19 @@
     1.4    "finite A = (\<exists> (n::nat) f. A = f ` {i::nat. i<n})"
     1.5  by(blast intro: nat_seg_image_imp_finite dest: finite_imp_nat_seg_image_inj_on)
     1.6  
     1.7 +lemma finite_imp_inj_to_nat_seg:
     1.8 +assumes "finite A"
     1.9 +shows "EX f n::nat. f`A = {i. i<n} & inj_on f A"
    1.10 +proof -
    1.11 +  from finite_imp_nat_seg_image_inj_on[OF `finite A`]
    1.12 +  obtain f and n::nat where bij: "bij_betw f {i. i<n} A"
    1.13 +    by (auto simp:bij_betw_def)
    1.14 +  let ?f = "the_inv_onto {i. i<n} f"
    1.15 +  have "inj_on ?f A & ?f ` A = {i. i<n}"
    1.16 +    by (fold bij_betw_def) (rule bij_betw_the_inv_onto[OF bij])
    1.17 +  thus ?thesis by blast
    1.18 +qed
    1.19 +
    1.20  lemma finite_Collect_less_nat[iff]: "finite{n::nat. n<k}"
    1.21  by(fastsimp simp: finite_conv_nat_seg_image)
    1.22