| author | wenzelm | 
| Thu, 06 Mar 2008 20:17:50 +0100 | |
| changeset 26220 | d34b68c21f9a | 
| parent 16417 | 9bc16273c2d4 | 
| child 27678 | 85ea2be46c71 | 
| permissions | -rw-r--r-- | 
| 12776 | 1 | (* Title: ZF/AC/AC16_lemmas.thy | 
| 2 | ID: $Id$ | |
| 3 | Author: Krzysztof Grabczewski | |
| 4 | ||
| 5 | Lemmas used in the proofs concerning AC16 | |
| 6 | *) | |
| 7 | ||
| 16417 | 8 | theory AC16_lemmas imports AC_Equiv Hartog Cardinal_aux begin | 
| 12776 | 9 | |
| 10 | lemma cons_Diff_eq: "a\<notin>A ==> cons(a,A)-{a}=A"
 | |
| 11 | by fast | |
| 12 | ||
| 13 | lemma nat_1_lepoll_iff: "1\<lesssim>X <-> (\<exists>x. x \<in> X)" | |
| 14 | apply (unfold lepoll_def) | |
| 15 | apply (rule iffI) | |
| 16 | apply (fast intro: inj_is_fun [THEN apply_type]) | |
| 17 | apply (erule exE) | |
| 18 | apply (rule_tac x = "\<lambda>a \<in> 1. x" in exI) | |
| 19 | apply (fast intro!: lam_injective) | |
| 20 | done | |
| 21 | ||
| 22 | lemma eqpoll_1_iff_singleton: "X\<approx>1 <-> (\<exists>x. X={x})"
 | |
| 23 | apply (rule iffI) | |
| 24 | apply (erule eqpollE) | |
| 25 | apply (drule nat_1_lepoll_iff [THEN iffD1]) | |
| 26 | apply (fast intro!: lepoll_1_is_sing) | |
| 27 | apply (fast intro!: singleton_eqpoll_1) | |
| 28 | done | |
| 29 | ||
| 30 | lemma cons_eqpoll_succ: "[| x\<approx>n; y\<notin>x |] ==> cons(y,x)\<approx>succ(n)" | |
| 31 | apply (unfold succ_def) | |
| 32 | apply (fast elim!: cons_eqpoll_cong mem_irrefl) | |
| 33 | done | |
| 34 | ||
| 35 | lemma subsets_eqpoll_1_eq: "{Y \<in> Pow(X). Y\<approx>1} = {{x}. x \<in> X}"
 | |
| 36 | apply (rule equalityI) | |
| 37 | apply (rule subsetI) | |
| 38 | apply (erule CollectE) | |
| 39 | apply (drule eqpoll_1_iff_singleton [THEN iffD1]) | |
| 40 | apply (fast intro!: RepFunI) | |
| 41 | apply (rule subsetI) | |
| 42 | apply (erule RepFunE) | |
| 12820 | 43 | apply (rule CollectI, fast) | 
| 12776 | 44 | apply (fast intro!: singleton_eqpoll_1) | 
| 45 | done | |
| 46 | ||
| 47 | lemma eqpoll_RepFun_sing: "X\<approx>{{x}. x \<in> X}"
 | |
| 48 | apply (unfold eqpoll_def bij_def) | |
| 49 | apply (rule_tac x = "\<lambda>x \<in> X. {x}" in exI)
 | |
| 50 | apply (rule IntI) | |
| 12820 | 51 | apply (unfold inj_def surj_def, simp) | 
| 52 | apply (fast intro!: lam_type RepFunI intro: singleton_eq_iff [THEN iffD1], simp) | |
| 12776 | 53 | apply (fast intro!: lam_type) | 
| 54 | done | |
| 55 | ||
| 56 | lemma subsets_eqpoll_1_eqpoll: "{Y \<in> Pow(X). Y\<approx>1}\<approx>X"
 | |
| 57 | apply (rule subsets_eqpoll_1_eq [THEN ssubst]) | |
| 58 | apply (rule eqpoll_RepFun_sing [THEN eqpoll_sym]) | |
| 59 | done | |
| 60 | ||
| 61 | lemma InfCard_Least_in: | |
| 62 | "[| InfCard(x); y \<subseteq> x; y \<approx> succ(z) |] ==> (LEAST i. i \<in> y) \<in> y" | |
| 63 | apply (erule eqpoll_sym [THEN eqpoll_imp_lepoll, | |
| 64 | THEN succ_lepoll_imp_not_empty, THEN not_emptyE]) | |
| 65 | apply (fast intro: LeastI | |
| 66 | dest!: InfCard_is_Card [THEN Card_is_Ord] | |
| 67 | elim: Ord_in_Ord) | |
| 68 | done | |
| 69 | ||
| 70 | lemma subsets_lepoll_lemma1: | |
| 71 | "[| InfCard(x); n \<in> nat |] | |
| 72 |       ==> {y \<in> Pow(x). y\<approx>succ(succ(n))} \<lesssim> x*{y \<in> Pow(x). y\<approx>succ(n)}"
 | |
| 73 | apply (unfold lepoll_def) | |
| 74 | apply (rule_tac x = "\<lambda>y \<in> {y \<in> Pow(x) . y\<approx>succ (succ (n))}. 
 | |
| 75 |                       <LEAST i. i \<in> y, y-{LEAST i. i \<in> y}>" in exI)
 | |
| 12820 | 76 | apply (rule_tac d = "%z. cons (fst(z), snd(z))" in lam_injective) | 
| 77 | apply (blast intro!: Diff_sing_eqpoll intro: InfCard_Least_in) | |
| 78 | apply (simp, blast intro: InfCard_Least_in) | |
| 12776 | 79 | done | 
| 80 | ||
| 81 | lemma set_of_Ord_succ_Union: "(\<forall>y \<in> z. Ord(y)) ==> z \<subseteq> succ(Union(z))" | |
| 82 | apply (rule subsetI) | |
| 12820 | 83 | apply (case_tac "\<forall>y \<in> z. y \<subseteq> x", blast ) | 
| 84 | apply (simp, erule bexE) | |
| 13339 
0f89104dd377
Fixed quantified variable name preservation for ball and bex (bounded quants)
 paulson parents: 
12820diff
changeset | 85 | apply (rule_tac i=y and j=x in Ord_linear_le) | 
| 12776 | 86 | apply (blast dest: le_imp_subset elim: leE ltE)+ | 
| 87 | done | |
| 88 | ||
| 89 | lemma subset_not_mem: "j \<subseteq> i ==> i \<notin> j" | |
| 90 | by (fast elim!: mem_irrefl) | |
| 91 | ||
| 92 | lemma succ_Union_not_mem: | |
| 93 | "(!!y. y \<in> z ==> Ord(y)) ==> succ(Union(z)) \<notin> z" | |
| 12820 | 94 | apply (rule set_of_Ord_succ_Union [THEN subset_not_mem], blast) | 
| 12776 | 95 | done | 
| 96 | ||
| 97 | lemma Union_cons_eq_succ_Union: | |
| 98 | "Union(cons(succ(Union(z)),z)) = succ(Union(z))" | |
| 99 | by fast | |
| 100 | ||
| 101 | lemma Un_Ord_disj: "[| Ord(i); Ord(j) |] ==> i Un j = i | i Un j = j" | |
| 102 | by (fast dest!: le_imp_subset elim: Ord_linear_le) | |
| 103 | ||
| 104 | lemma Union_eq_Un: "x \<in> X ==> Union(X) = x Un Union(X-{x})"
 | |
| 105 | by fast | |
| 1196 | 106 | |
| 12776 | 107 | lemma Union_in_lemma [rule_format]: | 
| 108 | "n \<in> nat ==> \<forall>z. (\<forall>y \<in> z. Ord(y)) & z\<approx>n & z\<noteq>0 --> Union(z) \<in> z" | |
| 109 | apply (induct_tac "n") | |
| 110 | apply (fast dest!: eqpoll_imp_lepoll [THEN lepoll_0_is_0]) | |
| 111 | apply (intro allI impI) | |
| 112 | apply (erule natE) | |
| 113 | apply (fast dest!: eqpoll_1_iff_singleton [THEN iffD1] | |
| 12820 | 114 | intro!: Union_singleton, clarify) | 
| 12776 | 115 | apply (elim not_emptyE) | 
| 116 | apply (erule_tac x = "z-{xb}" in allE)
 | |
| 117 | apply (erule impE) | |
| 118 | apply (fast elim!: Diff_sing_eqpoll | |
| 119 | Diff_sing_eqpoll [THEN eqpoll_succ_imp_not_empty]) | |
| 12820 | 120 | apply (subgoal_tac "xb \<union> \<Union>(z - {xb}) \<in> z")
 | 
| 121 | apply (simp add: Union_eq_Un [symmetric]) | |
| 12776 | 122 | apply (frule bspec, assumption) | 
| 12820 | 123 | apply (drule bspec) | 
| 124 | apply (erule Diff_subset [THEN subsetD]) | |
| 125 | apply (drule Un_Ord_disj, assumption, auto) | |
| 12776 | 126 | done | 
| 127 | ||
| 128 | lemma Union_in: "[| \<forall>x \<in> z. Ord(x); z\<approx>n; z\<noteq>0; n \<in> nat |] ==> Union(z) \<in> z" | |
| 12820 | 129 | by (blast intro: Union_in_lemma) | 
| 12776 | 130 | |
| 131 | lemma succ_Union_in_x: | |
| 132 | "[| InfCard(x); z \<in> Pow(x); z\<approx>n; n \<in> nat |] ==> succ(Union(z)) \<in> x" | |
| 12820 | 133 | apply (rule Limit_has_succ [THEN ltE]) | 
| 12776 | 134 | prefer 3 apply assumption | 
| 135 | apply (erule InfCard_is_Limit) | |
| 12820 | 136 | apply (case_tac "z=0") | 
| 137 | apply (simp, fast intro!: InfCard_is_Limit [THEN Limit_has_0]) | |
| 138 | apply (rule ltI [OF PowD [THEN subsetD] InfCard_is_Card [THEN Card_is_Ord]], assumption) | |
| 12776 | 139 | apply (blast intro: Union_in | 
| 140 | InfCard_is_Card [THEN Card_is_Ord, THEN Ord_in_Ord])+ | |
| 141 | done | |
| 142 | ||
| 143 | lemma succ_lepoll_succ_succ: | |
| 144 | "[| InfCard(x); n \<in> nat |] | |
| 145 |       ==> {y \<in> Pow(x). y\<approx>succ(n)} \<lesssim> {y \<in> Pow(x). y\<approx>succ(succ(n))}"
 | |
| 12820 | 146 | apply (unfold lepoll_def) | 
| 12776 | 147 | apply (rule_tac x = "\<lambda>z \<in> {y\<in>Pow(x). y\<approx>succ(n)}. cons(succ(Union(z)), z)" 
 | 
| 148 | in exI) | |
| 149 | apply (rule_tac d = "%z. z-{Union (z) }" in lam_injective)
 | |
| 150 | apply (blast intro!: succ_Union_in_x succ_Union_not_mem | |
| 151 | intro: cons_eqpoll_succ Ord_in_Ord | |
| 152 | dest!: InfCard_is_Card [THEN Card_is_Ord]) | |
| 12820 | 153 | apply (simp only: Union_cons_eq_succ_Union) | 
| 154 | apply (rule cons_Diff_eq) | |
| 12776 | 155 | apply (fast dest!: InfCard_is_Card [THEN Card_is_Ord] | 
| 156 | elim: Ord_in_Ord | |
| 12820 | 157 | intro!: succ_Union_not_mem) | 
| 12776 | 158 | done | 
| 159 | ||
| 160 | lemma subsets_eqpoll_X: | |
| 161 |      "[| InfCard(X); n \<in> nat |] ==> {Y \<in> Pow(X). Y\<approx>succ(n)} \<approx> X"
 | |
| 162 | apply (induct_tac "n") | |
| 163 | apply (rule subsets_eqpoll_1_eqpoll) | |
| 164 | apply (rule eqpollI) | |
| 12820 | 165 | apply (rule subsets_lepoll_lemma1 [THEN lepoll_trans], assumption+) | 
| 166 | apply (rule eqpoll_trans [THEN eqpoll_imp_lepoll]) | |
| 167 | apply (erule eqpoll_refl [THEN prod_eqpoll_cong]) | |
| 12776 | 168 | apply (erule InfCard_square_eqpoll) | 
| 169 | apply (fast elim: eqpoll_sym [THEN eqpoll_imp_lepoll, THEN lepoll_trans] | |
| 170 | intro!: succ_lepoll_succ_succ) | |
| 171 | done | |
| 172 | ||
| 173 | lemma image_vimage_eq: | |
| 174 | "[| f \<in> surj(A,B); y \<subseteq> B |] ==> f``(converse(f)``y) = y" | |
| 175 | apply (unfold surj_def) | |
| 176 | apply (fast dest: apply_equality2 elim: apply_iff [THEN iffD2]) | |
| 177 | done | |
| 178 | ||
| 179 | lemma vimage_image_eq: "[| f \<in> inj(A,B); y \<subseteq> A |] ==> converse(f)``(f``y) = y" | |
| 12820 | 180 | by (fast elim!: inj_is_fun [THEN apply_Pair] dest: inj_equality) | 
| 12776 | 181 | |
| 182 | lemma subsets_eqpoll: | |
| 183 |      "A\<approx>B ==> {Y \<in> Pow(A). Y\<approx>n}\<approx>{Y \<in> Pow(B). Y\<approx>n}"
 | |
| 184 | apply (unfold eqpoll_def) | |
| 185 | apply (erule exE) | |
| 186 | apply (rule_tac x = "\<lambda>X \<in> {Y \<in> Pow (A) . \<exists>f. f \<in> bij (Y, n) }. f``X" in exI)
 | |
| 187 | apply (rule_tac d = "%Z. converse (f) ``Z" in lam_bijective) | |
| 188 | apply (fast intro!: bij_is_inj [THEN restrict_bij, THEN bij_converse_bij, | |
| 189 | THEN comp_bij] | |
| 190 | elim!: bij_is_fun [THEN fun_is_rel, THEN image_subset]) | |
| 191 | apply (blast intro!: bij_is_inj [THEN restrict_bij] | |
| 192 | comp_bij bij_converse_bij | |
| 193 | bij_is_fun [THEN fun_is_rel, THEN image_subset]) | |
| 194 | apply (fast elim!: bij_is_inj [THEN vimage_image_eq]) | |
| 195 | apply (fast elim!: bij_is_surj [THEN image_vimage_eq]) | |
| 196 | done | |
| 197 | ||
| 198 | lemma WO2_imp_ex_Card: "WO2 ==> \<exists>a. Card(a) & X\<approx>a" | |
| 199 | apply (unfold WO2_def) | |
| 200 | apply (drule spec [of _ X]) | |
| 201 | apply (blast intro: Card_cardinal eqpoll_trans | |
| 202 | well_ord_Memrel [THEN well_ord_cardinal_eqpoll, THEN eqpoll_sym]) | |
| 203 | done | |
| 204 | ||
| 205 | lemma lepoll_infinite: "[| X\<lesssim>Y; ~Finite(X) |] ==> ~Finite(Y)" | |
| 206 | by (blast intro: lepoll_Finite) | |
| 207 | ||
| 208 | lemma infinite_Card_is_InfCard: "[| ~Finite(X); Card(X) |] ==> InfCard(X)" | |
| 209 | apply (unfold InfCard_def) | |
| 210 | apply (fast elim!: Card_is_Ord [THEN nat_le_infinite_Ord]) | |
| 211 | done | |
| 212 | ||
| 213 | lemma WO2_infinite_subsets_eqpoll_X: "[| WO2; n \<in> nat; ~Finite(X) |] | |
| 214 |         ==> {Y \<in> Pow(X). Y\<approx>succ(n)}\<approx>X"
 | |
| 215 | apply (drule WO2_imp_ex_Card) | |
| 12820 | 216 | apply (elim allE exE conjE) | 
| 12776 | 217 | apply (frule eqpoll_imp_lepoll [THEN lepoll_infinite], assumption) | 
| 218 | apply (drule infinite_Card_is_InfCard, assumption) | |
| 12820 | 219 | apply (blast intro: subsets_eqpoll subsets_eqpoll_X eqpoll_sym eqpoll_trans) | 
| 12776 | 220 | done | 
| 221 | ||
| 222 | lemma well_ord_imp_ex_Card: "well_ord(X,R) ==> \<exists>a. Card(a) & X\<approx>a" | |
| 223 | by (fast elim!: well_ord_cardinal_eqpoll [THEN eqpoll_sym] | |
| 224 | intro!: Card_cardinal) | |
| 225 | ||
| 226 | lemma well_ord_infinite_subsets_eqpoll_X: | |
| 227 |      "[| well_ord(X,R); n \<in> nat; ~Finite(X) |] ==> {Y \<in> Pow(X). Y\<approx>succ(n)}\<approx>X"
 | |
| 228 | apply (drule well_ord_imp_ex_Card) | |
| 229 | apply (elim allE exE conjE) | |
| 230 | apply (frule eqpoll_imp_lepoll [THEN lepoll_infinite], assumption) | |
| 231 | apply (drule infinite_Card_is_InfCard, assumption) | |
| 12820 | 232 | apply (blast intro: subsets_eqpoll subsets_eqpoll_X eqpoll_sym eqpoll_trans) | 
| 12776 | 233 | done | 
| 234 | ||
| 235 | end |