38 apply (erule CollectE) |
38 apply (erule CollectE) |
39 apply (drule eqpoll_1_iff_singleton [THEN iffD1]) |
39 apply (drule eqpoll_1_iff_singleton [THEN iffD1]) |
40 apply (fast intro!: RepFunI) |
40 apply (fast intro!: RepFunI) |
41 apply (rule subsetI) |
41 apply (rule subsetI) |
42 apply (erule RepFunE) |
42 apply (erule RepFunE) |
43 apply (rule CollectI) |
43 apply (rule CollectI, fast) |
44 apply fast |
|
45 apply (fast intro!: singleton_eqpoll_1) |
44 apply (fast intro!: singleton_eqpoll_1) |
46 done |
45 done |
47 |
46 |
48 lemma eqpoll_RepFun_sing: "X\<approx>{{x}. x \<in> X}" |
47 lemma eqpoll_RepFun_sing: "X\<approx>{{x}. x \<in> X}" |
49 apply (unfold eqpoll_def bij_def) |
48 apply (unfold eqpoll_def bij_def) |
50 apply (rule_tac x = "\<lambda>x \<in> X. {x}" in exI) |
49 apply (rule_tac x = "\<lambda>x \<in> X. {x}" in exI) |
51 apply (rule IntI) |
50 apply (rule IntI) |
52 apply (unfold inj_def surj_def) |
51 apply (unfold inj_def surj_def, simp) |
53 apply simp |
52 apply (fast intro!: lam_type RepFunI intro: singleton_eq_iff [THEN iffD1], simp) |
54 apply (fast intro!: lam_type RepFunI intro: singleton_eq_iff [THEN iffD1]) |
|
55 apply simp |
|
56 apply (fast intro!: lam_type) |
53 apply (fast intro!: lam_type) |
57 done |
54 done |
58 |
55 |
59 lemma subsets_eqpoll_1_eqpoll: "{Y \<in> Pow(X). Y\<approx>1}\<approx>X" |
56 lemma subsets_eqpoll_1_eqpoll: "{Y \<in> Pow(X). Y\<approx>1}\<approx>X" |
60 apply (rule subsets_eqpoll_1_eq [THEN ssubst]) |
57 apply (rule subsets_eqpoll_1_eq [THEN ssubst]) |
74 "[| InfCard(x); n \<in> nat |] |
71 "[| InfCard(x); n \<in> nat |] |
75 ==> {y \<in> Pow(x). y\<approx>succ(succ(n))} \<lesssim> x*{y \<in> Pow(x). y\<approx>succ(n)}" |
72 ==> {y \<in> Pow(x). y\<approx>succ(succ(n))} \<lesssim> x*{y \<in> Pow(x). y\<approx>succ(n)}" |
76 apply (unfold lepoll_def) |
73 apply (unfold lepoll_def) |
77 apply (rule_tac x = "\<lambda>y \<in> {y \<in> Pow(x) . y\<approx>succ (succ (n))}. |
74 apply (rule_tac x = "\<lambda>y \<in> {y \<in> Pow(x) . y\<approx>succ (succ (n))}. |
78 <LEAST i. i \<in> y, y-{LEAST i. i \<in> y}>" in exI) |
75 <LEAST i. i \<in> y, y-{LEAST i. i \<in> y}>" in exI) |
79 apply (rule_tac d = "%z. cons (fst(z), snd(z))" in lam_injective); |
76 apply (rule_tac d = "%z. cons (fst(z), snd(z))" in lam_injective) |
80 apply (blast intro!: Diff_sing_eqpoll intro: InfCard_Least_in); |
77 apply (blast intro!: Diff_sing_eqpoll intro: InfCard_Least_in) |
81 apply (simp, blast intro: InfCard_Least_in); |
78 apply (simp, blast intro: InfCard_Least_in) |
82 done |
79 done |
83 |
80 |
84 lemma set_of_Ord_succ_Union: "(\<forall>y \<in> z. Ord(y)) ==> z \<subseteq> succ(Union(z))" |
81 lemma set_of_Ord_succ_Union: "(\<forall>y \<in> z. Ord(y)) ==> z \<subseteq> succ(Union(z))" |
85 apply (rule subsetI) |
82 apply (rule subsetI) |
86 apply (case_tac "\<forall>y \<in> z. y \<subseteq> x", blast ); |
83 apply (case_tac "\<forall>y \<in> z. y \<subseteq> x", blast ) |
87 apply (simp, erule bexE); |
84 apply (simp, erule bexE) |
88 apply (rule_tac i=xa and j=x in Ord_linear_le) |
85 apply (rule_tac i=xa and j=x in Ord_linear_le) |
89 apply (blast dest: le_imp_subset elim: leE ltE)+ |
86 apply (blast dest: le_imp_subset elim: leE ltE)+ |
90 done |
87 done |
91 |
88 |
92 lemma subset_not_mem: "j \<subseteq> i ==> i \<notin> j" |
89 lemma subset_not_mem: "j \<subseteq> i ==> i \<notin> j" |
93 by (fast elim!: mem_irrefl) |
90 by (fast elim!: mem_irrefl) |
94 |
91 |
95 lemma succ_Union_not_mem: |
92 lemma succ_Union_not_mem: |
96 "(!!y. y \<in> z ==> Ord(y)) ==> succ(Union(z)) \<notin> z" |
93 "(!!y. y \<in> z ==> Ord(y)) ==> succ(Union(z)) \<notin> z" |
97 apply (rule set_of_Ord_succ_Union [THEN subset_not_mem]); |
94 apply (rule set_of_Ord_succ_Union [THEN subset_not_mem], blast) |
98 apply blast |
|
99 done |
95 done |
100 |
96 |
101 lemma Union_cons_eq_succ_Union: |
97 lemma Union_cons_eq_succ_Union: |
102 "Union(cons(succ(Union(z)),z)) = succ(Union(z))" |
98 "Union(cons(succ(Union(z)),z)) = succ(Union(z))" |
103 by fast |
99 by fast |
113 apply (induct_tac "n") |
109 apply (induct_tac "n") |
114 apply (fast dest!: eqpoll_imp_lepoll [THEN lepoll_0_is_0]) |
110 apply (fast dest!: eqpoll_imp_lepoll [THEN lepoll_0_is_0]) |
115 apply (intro allI impI) |
111 apply (intro allI impI) |
116 apply (erule natE) |
112 apply (erule natE) |
117 apply (fast dest!: eqpoll_1_iff_singleton [THEN iffD1] |
113 apply (fast dest!: eqpoll_1_iff_singleton [THEN iffD1] |
118 intro!: Union_singleton) |
114 intro!: Union_singleton, clarify) |
119 apply (clarify ); |
|
120 apply (elim not_emptyE) |
115 apply (elim not_emptyE) |
121 apply (erule_tac x = "z-{xb}" in allE) |
116 apply (erule_tac x = "z-{xb}" in allE) |
122 apply (erule impE) |
117 apply (erule impE) |
123 apply (fast elim!: Diff_sing_eqpoll |
118 apply (fast elim!: Diff_sing_eqpoll |
124 Diff_sing_eqpoll [THEN eqpoll_succ_imp_not_empty]) |
119 Diff_sing_eqpoll [THEN eqpoll_succ_imp_not_empty]) |
125 apply (subgoal_tac "xb \<union> \<Union>(z - {xb}) \<in> z"); |
120 apply (subgoal_tac "xb \<union> \<Union>(z - {xb}) \<in> z") |
126 apply (simp add: Union_eq_Un [symmetric]); |
121 apply (simp add: Union_eq_Un [symmetric]) |
127 apply (frule bspec, assumption) |
122 apply (frule bspec, assumption) |
128 apply (drule bspec); |
123 apply (drule bspec) |
129 apply (erule Diff_subset [THEN subsetD]); |
124 apply (erule Diff_subset [THEN subsetD]) |
130 apply (drule Un_Ord_disj, assumption) |
125 apply (drule Un_Ord_disj, assumption, auto) |
131 apply (auto ); |
|
132 done |
126 done |
133 |
127 |
134 lemma Union_in: "[| \<forall>x \<in> z. Ord(x); z\<approx>n; z\<noteq>0; n \<in> nat |] ==> Union(z) \<in> z" |
128 lemma Union_in: "[| \<forall>x \<in> z. Ord(x); z\<approx>n; z\<noteq>0; n \<in> nat |] ==> Union(z) \<in> z" |
135 apply (blast intro: Union_in_lemma); |
129 by (blast intro: Union_in_lemma) |
136 done |
|
137 |
130 |
138 lemma succ_Union_in_x: |
131 lemma succ_Union_in_x: |
139 "[| InfCard(x); z \<in> Pow(x); z\<approx>n; n \<in> nat |] ==> succ(Union(z)) \<in> x" |
132 "[| InfCard(x); z \<in> Pow(x); z\<approx>n; n \<in> nat |] ==> succ(Union(z)) \<in> x" |
140 apply (rule Limit_has_succ [THEN ltE]); |
133 apply (rule Limit_has_succ [THEN ltE]) |
141 prefer 3 apply assumption |
134 prefer 3 apply assumption |
142 apply (erule InfCard_is_Limit) |
135 apply (erule InfCard_is_Limit) |
143 apply (case_tac "z=0"); |
136 apply (case_tac "z=0") |
144 apply (simp, fast intro!: InfCard_is_Limit [THEN Limit_has_0]); |
137 apply (simp, fast intro!: InfCard_is_Limit [THEN Limit_has_0]) |
145 apply (rule ltI [OF PowD [THEN subsetD] InfCard_is_Card [THEN Card_is_Ord]]); |
138 apply (rule ltI [OF PowD [THEN subsetD] InfCard_is_Card [THEN Card_is_Ord]], assumption) |
146 apply assumption; |
|
147 apply (blast intro: Union_in |
139 apply (blast intro: Union_in |
148 InfCard_is_Card [THEN Card_is_Ord, THEN Ord_in_Ord])+ |
140 InfCard_is_Card [THEN Card_is_Ord, THEN Ord_in_Ord])+ |
149 done |
141 done |
150 |
142 |
151 lemma succ_lepoll_succ_succ: |
143 lemma succ_lepoll_succ_succ: |
152 "[| InfCard(x); n \<in> nat |] |
144 "[| InfCard(x); n \<in> nat |] |
153 ==> {y \<in> Pow(x). y\<approx>succ(n)} \<lesssim> {y \<in> Pow(x). y\<approx>succ(succ(n))}" |
145 ==> {y \<in> Pow(x). y\<approx>succ(n)} \<lesssim> {y \<in> Pow(x). y\<approx>succ(succ(n))}" |
154 apply (unfold lepoll_def); |
146 apply (unfold lepoll_def) |
155 apply (rule_tac x = "\<lambda>z \<in> {y\<in>Pow(x). y\<approx>succ(n)}. cons(succ(Union(z)), z)" |
147 apply (rule_tac x = "\<lambda>z \<in> {y\<in>Pow(x). y\<approx>succ(n)}. cons(succ(Union(z)), z)" |
156 in exI) |
148 in exI) |
157 apply (rule_tac d = "%z. z-{Union (z) }" in lam_injective) |
149 apply (rule_tac d = "%z. z-{Union (z) }" in lam_injective) |
158 apply (blast intro!: succ_Union_in_x succ_Union_not_mem |
150 apply (blast intro!: succ_Union_in_x succ_Union_not_mem |
159 intro: cons_eqpoll_succ Ord_in_Ord |
151 intro: cons_eqpoll_succ Ord_in_Ord |
160 dest!: InfCard_is_Card [THEN Card_is_Ord]) |
152 dest!: InfCard_is_Card [THEN Card_is_Ord]) |
161 apply (simp only: Union_cons_eq_succ_Union); |
153 apply (simp only: Union_cons_eq_succ_Union) |
162 apply (rule cons_Diff_eq); |
154 apply (rule cons_Diff_eq) |
163 apply (fast dest!: InfCard_is_Card [THEN Card_is_Ord] |
155 apply (fast dest!: InfCard_is_Card [THEN Card_is_Ord] |
164 elim: Ord_in_Ord |
156 elim: Ord_in_Ord |
165 intro!: succ_Union_not_mem); |
157 intro!: succ_Union_not_mem) |
166 done |
158 done |
167 |
159 |
168 lemma subsets_eqpoll_X: |
160 lemma subsets_eqpoll_X: |
169 "[| InfCard(X); n \<in> nat |] ==> {Y \<in> Pow(X). Y\<approx>succ(n)} \<approx> X" |
161 "[| InfCard(X); n \<in> nat |] ==> {Y \<in> Pow(X). Y\<approx>succ(n)} \<approx> X" |
170 apply (induct_tac "n") |
162 apply (induct_tac "n") |
171 apply (rule subsets_eqpoll_1_eqpoll) |
163 apply (rule subsets_eqpoll_1_eqpoll) |
172 apply (rule eqpollI) |
164 apply (rule eqpollI) |
173 apply (rule subsets_lepoll_lemma1 [THEN lepoll_trans], assumption+); |
165 apply (rule subsets_lepoll_lemma1 [THEN lepoll_trans], assumption+) |
174 apply (rule eqpoll_trans [THEN eqpoll_imp_lepoll]); |
166 apply (rule eqpoll_trans [THEN eqpoll_imp_lepoll]) |
175 apply (erule eqpoll_refl [THEN prod_eqpoll_cong]); |
167 apply (erule eqpoll_refl [THEN prod_eqpoll_cong]) |
176 apply (erule InfCard_square_eqpoll) |
168 apply (erule InfCard_square_eqpoll) |
177 apply (fast elim: eqpoll_sym [THEN eqpoll_imp_lepoll, THEN lepoll_trans] |
169 apply (fast elim: eqpoll_sym [THEN eqpoll_imp_lepoll, THEN lepoll_trans] |
178 intro!: succ_lepoll_succ_succ) |
170 intro!: succ_lepoll_succ_succ) |
179 done |
171 done |
180 |
172 |
220 done |
211 done |
221 |
212 |
222 lemma WO2_infinite_subsets_eqpoll_X: "[| WO2; n \<in> nat; ~Finite(X) |] |
213 lemma WO2_infinite_subsets_eqpoll_X: "[| WO2; n \<in> nat; ~Finite(X) |] |
223 ==> {Y \<in> Pow(X). Y\<approx>succ(n)}\<approx>X" |
214 ==> {Y \<in> Pow(X). Y\<approx>succ(n)}\<approx>X" |
224 apply (drule WO2_imp_ex_Card) |
215 apply (drule WO2_imp_ex_Card) |
225 apply (elim allE exE conjE); |
216 apply (elim allE exE conjE) |
226 apply (frule eqpoll_imp_lepoll [THEN lepoll_infinite], assumption) |
217 apply (frule eqpoll_imp_lepoll [THEN lepoll_infinite], assumption) |
227 apply (drule infinite_Card_is_InfCard, assumption) |
218 apply (drule infinite_Card_is_InfCard, assumption) |
228 apply (blast intro: subsets_eqpoll subsets_eqpoll_X eqpoll_sym eqpoll_trans); |
219 apply (blast intro: subsets_eqpoll subsets_eqpoll_X eqpoll_sym eqpoll_trans) |
229 done |
220 done |
230 |
221 |
231 lemma well_ord_imp_ex_Card: "well_ord(X,R) ==> \<exists>a. Card(a) & X\<approx>a" |
222 lemma well_ord_imp_ex_Card: "well_ord(X,R) ==> \<exists>a. Card(a) & X\<approx>a" |
232 by (fast elim!: well_ord_cardinal_eqpoll [THEN eqpoll_sym] |
223 by (fast elim!: well_ord_cardinal_eqpoll [THEN eqpoll_sym] |
233 intro!: Card_cardinal) |
224 intro!: Card_cardinal) |