author | haftmann |
Fri, 17 Jun 2005 16:12:49 +0200 | |
changeset 16417 | 9bc16273c2d4 |
parent 15481 | fc075ae929e4 |
child 24893 | b8ef7afe3a6b |
permissions | -rw-r--r-- |
12776 | 1 |
(* Title: ZF/AC/WO2_AC16.thy |
2 |
ID: $Id$ |
|
3 |
Author: Krzysztof Grabczewski |
|
4 |
||
5 |
The proof of WO2 ==> AC16(k #+ m, k) |
|
6 |
||
7 |
The main part of the proof is the inductive reasoning concerning |
|
8 |
properties of constructed family T_gamma. |
|
9 |
The proof deals with three cases for ordinals: 0, succ and limit ordinal. |
|
10 |
The first instance is trivial, the third not difficult, but the second |
|
11 |
is very complicated requiring many lemmas. |
|
12 |
We also need to prove that at any stage gamma the set |
|
13 |
(s - Union(...) - k_gamma) (Rubin & Rubin page 15) |
|
14 |
contains m distinct elements (in fact is equipollent to s) |
|
15 |
*) |
|
16 |
||
16417 | 17 |
theory WO2_AC16 imports AC_Equiv AC16_lemmas Cardinal_aux begin |
12776 | 18 |
|
19 |
(**** A recursive definition used in the proof of WO2 ==> AC16 ****) |
|
20 |
||
21 |
constdefs |
|
22 |
recfunAC16 :: "[i,i,i,i] => i" |
|
23 |
"recfunAC16(f,h,i,a) == |
|
24 |
transrec2(i, 0, |
|
25 |
%g r. if (\<exists>y \<in> r. h`g \<subseteq> y) then r |
|
26 |
else r Un {f`(LEAST i. h`g \<subseteq> f`i & |
|
27 |
(\<forall>b<a. (h`b \<subseteq> f`i --> (\<forall>t \<in> r. ~ h`b \<subseteq> t))))})" |
|
28 |
||
29 |
(* ********************************************************************** *) |
|
30 |
(* Basic properties of recfunAC16 *) |
|
31 |
(* ********************************************************************** *) |
|
32 |
||
33 |
lemma recfunAC16_0: "recfunAC16(f,h,0,a) = 0" |
|
12820 | 34 |
by (simp add: recfunAC16_def) |
12776 | 35 |
|
36 |
lemma recfunAC16_succ: |
|
37 |
"recfunAC16(f,h,succ(i),a) = |
|
38 |
(if (\<exists>y \<in> recfunAC16(f,h,i,a). h ` i \<subseteq> y) then recfunAC16(f,h,i,a) |
|
39 |
else recfunAC16(f,h,i,a) Un |
|
40 |
{f ` (LEAST j. h ` i \<subseteq> f ` j & |
|
41 |
(\<forall>b<a. (h`b \<subseteq> f`j |
|
42 |
--> (\<forall>t \<in> recfunAC16(f,h,i,a). ~ h`b \<subseteq> t))))})" |
|
12820 | 43 |
apply (simp add: recfunAC16_def) |
12776 | 44 |
done |
45 |
||
46 |
lemma recfunAC16_Limit: "Limit(i) |
|
47 |
==> recfunAC16(f,h,i,a) = (\<Union>j<i. recfunAC16(f,h,j,a))" |
|
13339
0f89104dd377
Fixed quantified variable name preservation for ball and bex (bounded quants)
paulson
parents:
12820
diff
changeset
|
48 |
by (simp add: recfunAC16_def transrec2_Limit) |
12776 | 49 |
|
50 |
(* ********************************************************************** *) |
|
51 |
(* Monotonicity of transrec2 *) |
|
52 |
(* ********************************************************************** *) |
|
53 |
||
54 |
lemma transrec2_mono_lemma [rule_format]: |
|
55 |
"[| !!g r. r \<subseteq> B(g,r); Ord(i) |] |
|
56 |
==> j<i --> transrec2(j, 0, B) \<subseteq> transrec2(i, 0, B)" |
|
12820 | 57 |
apply (erule trans_induct) |
58 |
apply (rule Ord_cases, assumption+, fast) |
|
12776 | 59 |
apply (simp (no_asm_simp)) |
12820 | 60 |
apply (blast elim!: leE) |
61 |
apply (simp add: transrec2_Limit) |
|
12776 | 62 |
apply (blast intro: OUN_I ltI Ord_in_Ord [THEN le_refl] |
63 |
elim!: Limit_has_succ [THEN ltE]) |
|
64 |
done |
|
65 |
||
66 |
lemma transrec2_mono: |
|
67 |
"[| !!g r. r \<subseteq> B(g,r); j\<le>i |] |
|
68 |
==> transrec2(j, 0, B) \<subseteq> transrec2(i, 0, B)" |
|
12820 | 69 |
apply (erule leE) |
12776 | 70 |
apply (rule transrec2_mono_lemma) |
12820 | 71 |
apply (auto intro: lt_Ord2 ) |
12776 | 72 |
done |
73 |
||
74 |
(* ********************************************************************** *) |
|
75 |
(* Monotonicity of recfunAC16 *) |
|
76 |
(* ********************************************************************** *) |
|
77 |
||
78 |
lemma recfunAC16_mono: |
|
79 |
"i\<le>j ==> recfunAC16(f, g, i, a) \<subseteq> recfunAC16(f, g, j, a)" |
|
80 |
apply (unfold recfunAC16_def) |
|
12820 | 81 |
apply (rule transrec2_mono, auto) |
12776 | 82 |
done |
83 |
||
84 |
(* ********************************************************************** *) |
|
85 |
(* case of limit ordinal *) |
|
86 |
(* ********************************************************************** *) |
|
87 |
||
88 |
||
89 |
lemma lemma3_1: |
|
90 |
"[| \<forall>y<x. \<forall>z<a. z<y | (\<exists>Y \<in> F(y). f(z)<=Y) --> (\<exists>! Y. Y \<in> F(y) & f(z)<=Y); |
|
91 |
\<forall>i j. i\<le>j --> F(i) \<subseteq> F(j); j\<le>i; i<x; z<a; |
|
92 |
V \<in> F(i); f(z)<=V; W \<in> F(j); f(z)<=W |] |
|
93 |
==> V = W" |
|
94 |
apply (erule asm_rl allE impE)+ |
|
12820 | 95 |
apply (drule subsetD, assumption, blast) |
12776 | 96 |
done |
97 |
||
98 |
||
99 |
lemma lemma3: |
|
100 |
"[| \<forall>y<x. \<forall>z<a. z<y | (\<exists>Y \<in> F(y). f(z)<=Y) --> (\<exists>! Y. Y \<in> F(y) & f(z)<=Y); |
|
101 |
\<forall>i j. i\<le>j --> F(i) \<subseteq> F(j); i<x; j<x; z<a; |
|
102 |
V \<in> F(i); f(z)<=V; W \<in> F(j); f(z)<=W |] |
|
103 |
==> V = W" |
|
104 |
apply (rule_tac j=j in Ord_linear_le [OF lt_Ord lt_Ord], assumption+) |
|
105 |
apply (erule lemma3_1 [symmetric], assumption+) |
|
106 |
apply (erule lemma3_1, assumption+) |
|
107 |
done |
|
108 |
||
109 |
lemma lemma4: |
|
110 |
"[| \<forall>y<x. F(y) \<subseteq> X & |
|
111 |
(\<forall>x<a. x < y | (\<exists>Y \<in> F(y). h(x) \<subseteq> Y) --> |
|
112 |
(\<exists>! Y. Y \<in> F(y) & h(x) \<subseteq> Y)); |
|
113 |
x < a |] |
|
114 |
==> \<forall>y<x. \<forall>z<a. z < y | (\<exists>Y \<in> F(y). h(z) \<subseteq> Y) --> |
|
115 |
(\<exists>! Y. Y \<in> F(y) & h(z) \<subseteq> Y)" |
|
116 |
apply (intro oallI impI) |
|
12820 | 117 |
apply (drule ospec, assumption, clarify) |
12776 | 118 |
apply (blast elim!: oallE ) |
119 |
done |
|
120 |
||
121 |
lemma lemma5: |
|
122 |
"[| \<forall>y<x. F(y) \<subseteq> X & |
|
123 |
(\<forall>x<a. x < y | (\<exists>Y \<in> F(y). h(x) \<subseteq> Y) --> |
|
124 |
(\<exists>! Y. Y \<in> F(y) & h(x) \<subseteq> Y)); |
|
125 |
x < a; Limit(x); \<forall>i j. i\<le>j --> F(i) \<subseteq> F(j) |] |
|
126 |
==> (\<Union>x<x. F(x)) \<subseteq> X & |
|
127 |
(\<forall>xa<a. xa < x | (\<exists>x \<in> \<Union>x<x. F(x). h(xa) \<subseteq> x) |
|
128 |
--> (\<exists>! Y. Y \<in> (\<Union>x<x. F(x)) & h(xa) \<subseteq> Y))" |
|
129 |
apply (rule conjI) |
|
130 |
apply (rule subsetI) |
|
131 |
apply (erule OUN_E) |
|
12820 | 132 |
apply (drule ospec, assumption, fast) |
12776 | 133 |
apply (drule lemma4, assumption) |
134 |
apply (rule oallI) |
|
135 |
apply (rule impI) |
|
136 |
apply (erule disjE) |
|
137 |
apply (frule ospec, erule Limit_has_succ, assumption) |
|
13339
0f89104dd377
Fixed quantified variable name preservation for ball and bex (bounded quants)
paulson
parents:
12820
diff
changeset
|
138 |
apply (drule_tac A = a and x = xa in ospec, assumption) |
12776 | 139 |
apply (erule impE, rule le_refl [THEN disjI1], erule lt_Ord) |
140 |
apply (blast intro: lemma3 Limit_has_succ) |
|
141 |
apply (blast intro: lemma3) |
|
142 |
done |
|
143 |
||
144 |
(* ********************************************************************** *) |
|
145 |
(* case of successor ordinal *) |
|
146 |
(* ********************************************************************** *) |
|
147 |
||
148 |
(* |
|
149 |
First quite complicated proof of the fact used in the recursive construction |
|
150 |
of the family T_gamma (WO2 ==> AC16(k #+ m, k)) - the fact that at any stage |
|
151 |
gamma the set (s - Union(...) - k_gamma) is equipollent to s |
|
152 |
(Rubin & Rubin page 15). |
|
153 |
*) |
|
154 |
||
155 |
(* ********************************************************************** *) |
|
156 |
(* dbl_Diff_eqpoll_Card *) |
|
157 |
(* ********************************************************************** *) |
|
158 |
||
159 |
||
160 |
lemma dbl_Diff_eqpoll_Card: |
|
161 |
"[| A\<approx>a; Card(a); ~Finite(a); B\<prec>a; C\<prec>a |] ==> A - B - C\<approx>a" |
|
162 |
by (blast intro: Diff_lesspoll_eqpoll_Card) |
|
163 |
||
164 |
(* ********************************************************************** *) |
|
165 |
(* Case of finite ordinals *) |
|
166 |
(* ********************************************************************** *) |
|
167 |
||
168 |
||
169 |
lemma Finite_lesspoll_infinite_Ord: |
|
170 |
"[| Finite(X); ~Finite(a); Ord(a) |] ==> X\<prec>a" |
|
171 |
apply (unfold lesspoll_def) |
|
172 |
apply (rule conjI) |
|
173 |
apply (drule nat_le_infinite_Ord [THEN le_imp_lepoll], assumption) |
|
174 |
apply (unfold Finite_def) |
|
175 |
apply (blast intro: leI [THEN le_imp_subset, THEN subset_imp_lepoll] |
|
176 |
ltI eqpoll_imp_lepoll lepoll_trans) |
|
177 |
apply (blast intro: eqpoll_sym [THEN eqpoll_trans]) |
|
178 |
done |
|
179 |
||
180 |
lemma Union_lesspoll: |
|
181 |
"[| \<forall>x \<in> X. x lepoll n & x \<subseteq> T; well_ord(T, R); X lepoll b; |
|
182 |
b<a; ~Finite(a); Card(a); n \<in> nat |] |
|
183 |
==> Union(X)\<prec>a" |
|
184 |
apply (case_tac "Finite (X)") |
|
185 |
apply (blast intro: Card_is_Ord Finite_lesspoll_infinite_Ord |
|
186 |
lepoll_nat_imp_Finite Finite_Union) |
|
187 |
apply (drule lepoll_imp_ex_le_eqpoll) |
|
188 |
apply (erule lt_Ord) |
|
189 |
apply (elim exE conjE) |
|
190 |
apply (frule eqpoll_imp_lepoll [THEN lepoll_infinite], assumption) |
|
191 |
apply (erule eqpoll_sym [THEN eqpoll_def [THEN def_imp_iff, THEN iffD1], |
|
192 |
THEN exE]) |
|
193 |
apply (frule bij_is_surj [THEN surj_image_eq]) |
|
194 |
apply (drule image_fun [OF bij_is_fun subset_refl]) |
|
195 |
apply (drule sym [THEN trans], assumption) |
|
196 |
apply (blast intro: lt_Ord UN_lepoll lt_Card_imp_lesspoll |
|
197 |
lt_trans1 lesspoll_trans1) |
|
198 |
done |
|
199 |
||
200 |
(* ********************************************************************** *) |
|
201 |
(* recfunAC16_lepoll_index *) |
|
202 |
(* ********************************************************************** *) |
|
203 |
||
204 |
lemma Un_sing_eq_cons: "A Un {a} = cons(a, A)" |
|
205 |
by fast |
|
206 |
||
207 |
lemma Un_lepoll_succ: "A lepoll B ==> A Un {a} lepoll succ(B)" |
|
208 |
apply (simp add: Un_sing_eq_cons succ_def) |
|
209 |
apply (blast elim!: mem_irrefl intro: cons_lepoll_cong) |
|
210 |
done |
|
211 |
||
212 |
lemma Diff_UN_succ_empty: "Ord(a) ==> F(a) - (\<Union>b<succ(a). F(b)) = 0" |
|
213 |
by (fast intro!: le_refl) |
|
214 |
||
215 |
lemma Diff_UN_succ_subset: "Ord(a) ==> F(a) Un X - (\<Union>b<succ(a). F(b)) \<subseteq> X" |
|
216 |
by blast |
|
217 |
||
218 |
lemma recfunAC16_Diff_lepoll_1: |
|
219 |
"Ord(x) |
|
220 |
==> recfunAC16(f, g, x, a) - (\<Union>i<x. recfunAC16(f, g, i, a)) lepoll 1" |
|
221 |
apply (erule Ord_cases) |
|
222 |
apply (simp add: recfunAC16_0 empty_subsetI [THEN subset_imp_lepoll]) |
|
223 |
(*Limit case*) |
|
224 |
prefer 2 apply (simp add: recfunAC16_Limit Diff_cancel |
|
225 |
empty_subsetI [THEN subset_imp_lepoll]) |
|
226 |
(*succ case*) |
|
227 |
apply (simp add: recfunAC16_succ |
|
228 |
Diff_UN_succ_empty [of _ "%j. recfunAC16(f,g,j,a)"] |
|
229 |
empty_subsetI [THEN subset_imp_lepoll]) |
|
230 |
apply (best intro: Diff_UN_succ_subset [THEN subset_imp_lepoll] |
|
231 |
singleton_eqpoll_1 [THEN eqpoll_imp_lepoll] lepoll_trans) |
|
232 |
done |
|
233 |
||
234 |
lemma in_Least_Diff: |
|
235 |
"[| z \<in> F(x); Ord(x) |] |
|
236 |
==> z \<in> F(LEAST i. z \<in> F(i)) - (\<Union>j<(LEAST i. z \<in> F(i)). F(j))" |
|
13339
0f89104dd377
Fixed quantified variable name preservation for ball and bex (bounded quants)
paulson
parents:
12820
diff
changeset
|
237 |
by (fast elim: less_LeastE elim!: LeastI) |
12776 | 238 |
|
239 |
lemma Least_eq_imp_ex: |
|
240 |
"[| (LEAST i. w \<in> F(i)) = (LEAST i. z \<in> F(i)); |
|
241 |
w \<in> (\<Union>i<a. F(i)); z \<in> (\<Union>i<a. F(i)) |] |
|
242 |
==> \<exists>b<a. w \<in> (F(b) - (\<Union>c<b. F(c))) & z \<in> (F(b) - (\<Union>c<b. F(c)))" |
|
243 |
apply (elim OUN_E) |
|
244 |
apply (drule in_Least_Diff, erule lt_Ord) |
|
245 |
apply (frule in_Least_Diff, erule lt_Ord) |
|
246 |
apply (rule oexI, force) |
|
247 |
apply (blast intro: lt_Ord Least_le [THEN lt_trans1]) |
|
248 |
done |
|
249 |
||
250 |
||
251 |
lemma two_in_lepoll_1: "[| A lepoll 1; a \<in> A; b \<in> A |] ==> a=b" |
|
252 |
by (fast dest!: lepoll_1_is_sing) |
|
253 |
||
254 |
||
255 |
lemma UN_lepoll_index: |
|
256 |
"[| \<forall>i<a. F(i)-(\<Union>j<i. F(j)) lepoll 1; Limit(a) |] |
|
257 |
==> (\<Union>x<a. F(x)) lepoll a" |
|
258 |
apply (rule lepoll_def [THEN def_imp_iff [THEN iffD2]]) |
|
259 |
apply (rule_tac x = "\<lambda>z \<in> (\<Union>x<a. F (x)). LEAST i. z \<in> F (i) " in exI) |
|
260 |
apply (unfold inj_def) |
|
261 |
apply (rule CollectI) |
|
262 |
apply (rule lam_type) |
|
263 |
apply (erule OUN_E) |
|
264 |
apply (erule Least_in_Ord) |
|
265 |
apply (erule ltD) |
|
266 |
apply (erule lt_Ord2) |
|
267 |
apply (intro ballI) |
|
268 |
apply (simp (no_asm_simp)) |
|
269 |
apply (rule impI) |
|
270 |
apply (drule Least_eq_imp_ex, assumption+) |
|
271 |
apply (fast elim!: two_in_lepoll_1) |
|
272 |
done |
|
273 |
||
274 |
||
275 |
lemma recfunAC16_lepoll_index: "Ord(y) ==> recfunAC16(f, h, y, a) lepoll y" |
|
276 |
apply (erule trans_induct3) |
|
277 |
(*0 case*) |
|
278 |
apply (simp (no_asm_simp) add: recfunAC16_0 lepoll_refl) |
|
279 |
(*succ case*) |
|
280 |
apply (simp (no_asm_simp) add: recfunAC16_succ) |
|
281 |
apply (blast dest!: succI1 [THEN rev_bspec] |
|
282 |
intro: subset_succI [THEN subset_imp_lepoll] Un_lepoll_succ |
|
283 |
lepoll_trans) |
|
284 |
apply (simp (no_asm_simp) add: recfunAC16_Limit) |
|
285 |
apply (blast intro: lt_Ord [THEN recfunAC16_Diff_lepoll_1] UN_lepoll_index) |
|
286 |
done |
|
287 |
||
1196 | 288 |
|
12776 | 289 |
lemma Union_recfunAC16_lesspoll: |
290 |
"[| recfunAC16(f,g,y,a) \<subseteq> {X \<in> Pow(A). X\<approx>n}; |
|
291 |
A\<approx>a; y<a; ~Finite(a); Card(a); n \<in> nat |] |
|
292 |
==> Union(recfunAC16(f,g,y,a))\<prec>a" |
|
293 |
apply (erule eqpoll_def [THEN def_imp_iff, THEN iffD1, THEN exE]) |
|
13339
0f89104dd377
Fixed quantified variable name preservation for ball and bex (bounded quants)
paulson
parents:
12820
diff
changeset
|
294 |
apply (rule_tac T=A in Union_lesspoll, simp_all) |
12776 | 295 |
apply (blast intro!: eqpoll_imp_lepoll) |
296 |
apply (blast intro: bij_is_inj Card_is_Ord [THEN well_ord_Memrel] |
|
297 |
well_ord_rvimage) |
|
298 |
apply (erule lt_Ord [THEN recfunAC16_lepoll_index]) |
|
299 |
done |
|
300 |
||
301 |
lemma dbl_Diff_eqpoll: |
|
302 |
"[| recfunAC16(f, h, y, a) \<subseteq> {X \<in> Pow(A) . X\<approx>succ(k #+ m)}; |
|
303 |
Card(a); ~ Finite(a); A\<approx>a; |
|
304 |
k \<in> nat; y<a; |
|
305 |
h \<in> bij(a, {Y \<in> Pow(A). Y\<approx>succ(k)}) |] |
|
306 |
==> A - Union(recfunAC16(f, h, y, a)) - h`y\<approx>a" |
|
307 |
apply (rule dbl_Diff_eqpoll_Card, simp_all) |
|
308 |
apply (simp add: Union_recfunAC16_lesspoll) |
|
309 |
apply (rule Finite_lesspoll_infinite_Ord) |
|
310 |
apply (rule Finite_def [THEN def_imp_iff, THEN iffD2]) |
|
12820 | 311 |
apply (blast dest: ltD bij_is_fun [THEN apply_type], assumption) |
12776 | 312 |
apply (blast intro: Card_is_Ord) |
313 |
done; |
|
314 |
||
315 |
(* back to the proof *) |
|
316 |
||
317 |
lemmas disj_Un_eqpoll_nat_sum = |
|
318 |
eqpoll_trans [THEN eqpoll_trans, |
|
319 |
OF disj_Un_eqpoll_sum sum_eqpoll_cong nat_sum_eqpoll_sum, |
|
320 |
standard]; |
|
321 |
||
322 |
||
323 |
lemma Un_in_Collect: "[| x \<in> Pow(A - B - h`i); x\<approx>m; |
|
324 |
h \<in> bij(a, {x \<in> Pow(A) . x\<approx>k}); i<a; k \<in> nat; m \<in> nat |] |
|
325 |
==> h ` i Un x \<in> {x \<in> Pow(A) . x\<approx>k #+ m}" |
|
326 |
by (blast intro: disj_Un_eqpoll_nat_sum |
|
327 |
dest: ltD bij_is_fun [THEN apply_type]) |
|
328 |
||
329 |
||
330 |
(* ********************************************************************** *) |
|
331 |
(* Lemmas simplifying assumptions *) |
|
332 |
(* ********************************************************************** *) |
|
333 |
||
334 |
lemma lemma6: |
|
335 |
"[| \<forall>y<succ(j). F(y)<=X & (\<forall>x<a. x<y | P(x,y) --> Q(x,y)); succ(j)<a |] |
|
336 |
==> F(j)<=X & (\<forall>x<a. x<j | P(x,j) --> Q(x,j))" |
|
13339
0f89104dd377
Fixed quantified variable name preservation for ball and bex (bounded quants)
paulson
parents:
12820
diff
changeset
|
337 |
by (blast intro!: lt_Ord succI1 [THEN ltI, THEN lt_Ord, THEN le_refl]) |
12776 | 338 |
|
339 |
||
340 |
lemma lemma7: |
|
341 |
"[| \<forall>x<a. x<j | P(x,j) --> Q(x,j); succ(j)<a |] |
|
342 |
==> P(j,j) --> (\<forall>x<a. x\<le>j | P(x,j) --> Q(x,j))" |
|
343 |
by (fast elim!: leE) |
|
344 |
||
345 |
(* ********************************************************************** *) |
|
346 |
(* Lemmas needed to prove ex_next_set, which means that for any successor *) |
|
347 |
(* ordinal there is a set satisfying certain properties *) |
|
348 |
(* ********************************************************************** *) |
|
349 |
||
350 |
lemma ex_subset_eqpoll: |
|
351 |
"[| A\<approx>a; ~ Finite(a); Ord(a); m \<in> nat |] ==> \<exists>X \<in> Pow(A). X\<approx>m" |
|
352 |
apply (rule lepoll_imp_eqpoll_subset [of m A, THEN exE]) |
|
353 |
apply (rule lepoll_trans, rule leI [THEN le_imp_lepoll]) |
|
354 |
apply (blast intro: lt_trans2 [OF ltI nat_le_infinite_Ord] Ord_nat) |
|
355 |
apply (erule eqpoll_sym [THEN eqpoll_imp_lepoll]) |
|
356 |
apply (fast elim!: eqpoll_sym) |
|
357 |
done |
|
358 |
||
359 |
lemma subset_Un_disjoint: "[| A \<subseteq> B Un C; A Int C = 0 |] ==> A \<subseteq> B" |
|
360 |
by blast |
|
361 |
||
362 |
||
363 |
lemma Int_empty: |
|
364 |
"[| X \<in> Pow(A - Union(B) -C); T \<in> B; F \<subseteq> T |] ==> F Int X = 0" |
|
365 |
by blast |
|
366 |
||
367 |
||
368 |
(* ********************************************************************** *) |
|
369 |
(* equipollent subset (and finite) is the whole set *) |
|
370 |
(* ********************************************************************** *) |
|
371 |
||
372 |
||
373 |
lemma subset_imp_eq_lemma: |
|
374 |
"m \<in> nat ==> \<forall>A B. A \<subseteq> B & m lepoll A & B lepoll m --> A=B" |
|
375 |
apply (induct_tac "m") |
|
376 |
apply (fast dest!: lepoll_0_is_0) |
|
377 |
apply (intro allI impI) |
|
378 |
apply (elim conjE) |
|
379 |
apply (rule succ_lepoll_imp_not_empty [THEN not_emptyE], assumption) |
|
380 |
apply (frule subsetD [THEN Diff_sing_lepoll], assumption+) |
|
381 |
apply (frule lepoll_Diff_sing) |
|
382 |
apply (erule allE impE)+ |
|
383 |
apply (rule conjI) |
|
384 |
prefer 2 apply fast |
|
385 |
apply fast |
|
386 |
apply (blast elim: equalityE) |
|
387 |
done |
|
388 |
||
389 |
||
390 |
lemma subset_imp_eq: "[| A \<subseteq> B; m lepoll A; B lepoll m; m \<in> nat |] ==> A=B" |
|
391 |
by (blast dest!: subset_imp_eq_lemma) |
|
392 |
||
393 |
||
394 |
lemma bij_imp_arg_eq: |
|
395 |
"[| f \<in> bij(a, {Y \<in> X. Y\<approx>succ(k)}); k \<in> nat; f`b \<subseteq> f`y; b<a; y<a |] |
|
396 |
==> b=y" |
|
397 |
apply (drule subset_imp_eq) |
|
398 |
apply (erule_tac [3] nat_succI) |
|
399 |
apply (unfold bij_def inj_def) |
|
400 |
apply (blast intro: eqpoll_sym eqpoll_imp_lepoll |
|
401 |
dest: ltD apply_type)+ |
|
402 |
done |
|
403 |
||
404 |
||
405 |
lemma ex_next_set: |
|
406 |
"[| recfunAC16(f, h, y, a) \<subseteq> {X \<in> Pow(A) . X\<approx>succ(k #+ m)}; |
|
407 |
Card(a); ~ Finite(a); A\<approx>a; |
|
408 |
k \<in> nat; m \<in> nat; y<a; |
|
409 |
h \<in> bij(a, {Y \<in> Pow(A). Y\<approx>succ(k)}); |
|
410 |
~ (\<exists>Y \<in> recfunAC16(f, h, y, a). h`y \<subseteq> Y) |] |
|
411 |
==> \<exists>X \<in> {Y \<in> Pow(A). Y\<approx>succ(k #+ m)}. h`y \<subseteq> X & |
|
412 |
(\<forall>b<a. h`b \<subseteq> X --> |
|
413 |
(\<forall>T \<in> recfunAC16(f, h, y, a). ~ h`b \<subseteq> T))" |
|
414 |
apply (erule_tac m1=m in dbl_Diff_eqpoll [THEN ex_subset_eqpoll, THEN bexE], |
|
415 |
assumption+) |
|
416 |
apply (erule Card_is_Ord, assumption) |
|
417 |
apply (frule Un_in_Collect, (erule asm_rl nat_succI)+) |
|
418 |
apply (erule CollectE) |
|
419 |
apply (rule rev_bexI, simp) |
|
420 |
apply (rule conjI, blast) |
|
421 |
apply (intro ballI impI oallI notI) |
|
422 |
apply (drule subset_Un_disjoint, rule Int_empty, assumption+) |
|
423 |
apply (blast dest: bij_imp_arg_eq) |
|
424 |
done |
|
425 |
||
426 |
(* ********************************************************************** *) |
|
427 |
(* Lemma ex_next_Ord states that for any successor *) |
|
428 |
(* ordinal there is a number of the set satisfying certain properties *) |
|
429 |
(* ********************************************************************** *) |
|
430 |
||
431 |
lemma ex_next_Ord: |
|
432 |
"[| recfunAC16(f, h, y, a) \<subseteq> {X \<in> Pow(A) . X\<approx>succ(k #+ m)}; |
|
433 |
Card(a); ~ Finite(a); A\<approx>a; |
|
434 |
k \<in> nat; m \<in> nat; y<a; |
|
435 |
h \<in> bij(a, {Y \<in> Pow(A). Y\<approx>succ(k)}); |
|
436 |
f \<in> bij(a, {Y \<in> Pow(A). Y\<approx>succ(k #+ m)}); |
|
437 |
~ (\<exists>Y \<in> recfunAC16(f, h, y, a). h`y \<subseteq> Y) |] |
|
438 |
==> \<exists>c<a. h`y \<subseteq> f`c & |
|
439 |
(\<forall>b<a. h`b \<subseteq> f`c --> |
|
440 |
(\<forall>T \<in> recfunAC16(f, h, y, a). ~ h`b \<subseteq> T))" |
|
441 |
apply (drule ex_next_set, assumption+) |
|
442 |
apply (erule bexE) |
|
15481 | 443 |
apply (rule_tac x="converse(f)`X" in oexI) |
444 |
apply (simp add: right_inverse_bij) |
|
12776 | 445 |
apply (blast intro: bij_converse_bij bij_is_fun [THEN apply_type] ltI |
446 |
Card_is_Ord) |
|
447 |
done |
|
448 |
||
449 |
||
450 |
(* ********************************************************************** *) |
|
451 |
(* Lemma simplifying assumptions *) |
|
452 |
(* ********************************************************************** *) |
|
453 |
||
454 |
lemma lemma8: |
|
455 |
"[| \<forall>x<a. x<j | (\<exists>xa \<in> F(j). P(x, xa)) |
|
456 |
--> (\<exists>! Y. Y \<in> F(j) & P(x, Y)); F(j) \<subseteq> X; |
|
457 |
L \<in> X; P(j, L) & (\<forall>x<a. P(x, L) --> (\<forall>xa \<in> F(j). ~P(x, xa))) |] |
|
458 |
==> F(j) Un {L} \<subseteq> X & |
|
459 |
(\<forall>x<a. x\<le>j | (\<exists>xa \<in> (F(j) Un {L}). P(x, xa)) --> |
|
460 |
(\<exists>! Y. Y \<in> (F(j) Un {L}) & P(x, Y)))" |
|
461 |
apply (rule conjI) |
|
462 |
apply (fast intro!: singleton_subsetI) |
|
463 |
apply (rule oallI) |
|
464 |
apply (blast elim!: leE oallE) |
|
465 |
done |
|
466 |
||
467 |
(* ********************************************************************** *) |
|
468 |
(* The main part of the proof: inductive proof of the property of T_gamma *) |
|
469 |
(* lemma main_induct *) |
|
470 |
(* ********************************************************************** *) |
|
471 |
||
472 |
lemma main_induct: |
|
473 |
"[| b < a; f \<in> bij(a, {Y \<in> Pow(A) . Y\<approx>succ(k #+ m)}); |
|
474 |
h \<in> bij(a, {Y \<in> Pow(A) . Y\<approx>succ(k)}); |
|
475 |
~Finite(a); Card(a); A\<approx>a; k \<in> nat; m \<in> nat |] |
|
476 |
==> recfunAC16(f, h, b, a) \<subseteq> {X \<in> Pow(A) . X\<approx>succ(k #+ m)} & |
|
477 |
(\<forall>x<a. x < b | (\<exists>Y \<in> recfunAC16(f, h, b, a). h ` x \<subseteq> Y) --> |
|
478 |
(\<exists>! Y. Y \<in> recfunAC16(f, h, b, a) & h ` x \<subseteq> Y))" |
|
479 |
apply (erule lt_induct) |
|
480 |
apply (frule lt_Ord) |
|
481 |
apply (erule Ord_cases) |
|
482 |
(* case 0 *) |
|
483 |
apply (simp add: recfunAC16_0) |
|
484 |
(* case Limit *) |
|
485 |
prefer 2 apply (simp add: recfunAC16_Limit) |
|
486 |
apply (rule lemma5, assumption+) |
|
487 |
apply (blast dest!: recfunAC16_mono) |
|
488 |
(* case succ *) |
|
489 |
apply clarify |
|
490 |
apply (erule lemma6 [THEN conjE], assumption) |
|
491 |
apply (simp (no_asm_simp) split del: split_if add: recfunAC16_succ) |
|
492 |
apply (rule conjI [THEN split_if [THEN iffD2]]) |
|
493 |
apply (simp, erule lemma7, assumption) |
|
494 |
apply (rule impI) |
|
495 |
apply (rule ex_next_Ord [THEN oexE], |
|
496 |
assumption+, rule le_refl [THEN lt_trans], assumption+) |
|
497 |
apply (erule lemma8, assumption) |
|
498 |
apply (rule bij_is_fun [THEN apply_type], assumption) |
|
499 |
apply (erule Least_le [THEN lt_trans2, THEN ltD]) |
|
500 |
apply (erule lt_Ord) |
|
501 |
apply (erule succ_leI) |
|
502 |
apply (erule LeastI) |
|
503 |
apply (erule lt_Ord) |
|
504 |
done |
|
505 |
||
506 |
(* ********************************************************************** *) |
|
507 |
(* Lemma to simplify the inductive proof *) |
|
508 |
(* - the desired property is a consequence of the inductive assumption *) |
|
509 |
(* ********************************************************************** *) |
|
510 |
||
511 |
lemma lemma_simp_induct: |
|
512 |
"[| \<forall>b. b<a --> F(b) \<subseteq> S & (\<forall>x<a. (x<b | (\<exists>Y \<in> F(b). f`x \<subseteq> Y)) |
|
513 |
--> (\<exists>! Y. Y \<in> F(b) & f`x \<subseteq> Y)); |
|
514 |
f \<in> a->f``(a); Limit(a); |
|
515 |
\<forall>i j. i\<le>j --> F(i) \<subseteq> F(j) |] |
|
516 |
==> (\<Union>j<a. F(j)) \<subseteq> S & |
|
517 |
(\<forall>x \<in> f``a. \<exists>! Y. Y \<in> (\<Union>j<a. F(j)) & x \<subseteq> Y)" |
|
518 |
apply (rule conjI) |
|
519 |
apply (rule subsetI) |
|
520 |
apply (erule OUN_E, blast) |
|
521 |
apply (rule ballI) |
|
522 |
apply (erule imageE) |
|
523 |
apply (drule ltI, erule Limit_is_Ord) |
|
524 |
apply (drule Limit_has_succ, assumption) |
|
12820 | 525 |
apply (frule_tac x1="succ(xa)" in spec [THEN mp], assumption) |
12776 | 526 |
apply (erule conjE) |
527 |
apply (drule ospec) |
|
528 |
(** LEVEL 10 **) |
|
529 |
apply (erule leI [THEN succ_leE]) |
|
530 |
apply (erule impE) |
|
531 |
apply (fast elim!: leI [THEN succ_leE, THEN lt_Ord, THEN le_refl]) |
|
532 |
apply (drule apply_equality, assumption) |
|
533 |
apply (elim conjE ex1E) |
|
534 |
(** LEVEL 15 **) |
|
535 |
apply (rule ex1I, blast) |
|
536 |
apply (elim conjE OUN_E) |
|
537 |
apply (erule_tac i="succ(xa)" and j=aa |
|
538 |
in Ord_linear_le [OF lt_Ord lt_Ord], assumption) |
|
539 |
prefer 2 |
|
540 |
apply (drule spec [THEN spec, THEN mp, THEN subsetD], assumption+, blast) |
|
541 |
(** LEVEL 20 **) |
|
13339
0f89104dd377
Fixed quantified variable name preservation for ball and bex (bounded quants)
paulson
parents:
12820
diff
changeset
|
542 |
apply (drule_tac x1=aa in spec [THEN mp], assumption) |
12776 | 543 |
apply (frule succ_leE) |
544 |
apply (drule spec [THEN spec, THEN mp, THEN subsetD], assumption+, blast) |
|
545 |
done |
|
546 |
||
547 |
(* ********************************************************************** *) |
|
548 |
(* The target theorem *) |
|
549 |
(* ********************************************************************** *) |
|
550 |
||
551 |
theorem WO2_AC16: "[| WO2; 0<m; k \<in> nat; m \<in> nat |] ==> AC16(k #+ m,k)" |
|
552 |
apply (unfold AC16_def) |
|
553 |
apply (rule allI) |
|
554 |
apply (rule impI) |
|
555 |
apply (frule WO2_infinite_subsets_eqpoll_X, assumption+) |
|
12820 | 556 |
apply (frule_tac n="k #+ m" in WO2_infinite_subsets_eqpoll_X, simp, simp) |
12776 | 557 |
apply (frule WO2_imp_ex_Card) |
558 |
apply (elim exE conjE) |
|
559 |
apply (drule eqpoll_trans [THEN eqpoll_sym, |
|
560 |
THEN eqpoll_def [THEN def_imp_iff, THEN iffD1]], |
|
561 |
assumption) |
|
562 |
apply (drule eqpoll_trans [THEN eqpoll_sym, |
|
563 |
THEN eqpoll_def [THEN def_imp_iff, THEN iffD1]], |
|
564 |
assumption+) |
|
565 |
apply (elim exE) |
|
566 |
apply (rename_tac h) |
|
567 |
apply (rule_tac x = "\<Union>j<a. recfunAC16 (h,f,j,a) " in exI) |
|
568 |
apply (rule_tac P="%z. ?Y & (\<forall>x \<in> z. ?Z (x))" |
|
569 |
in bij_is_surj [THEN surj_image_eq, THEN subst], assumption) |
|
570 |
apply (rule lemma_simp_induct) |
|
571 |
apply (blast del: conjI notI |
|
572 |
intro!: main_induct eqpoll_imp_lepoll [THEN lepoll_infinite] ) |
|
573 |
apply (blast intro: bij_is_fun [THEN surj_image, THEN surj_is_fun]) |
|
574 |
apply (erule eqpoll_imp_lepoll [THEN lepoll_infinite, |
|
575 |
THEN infinite_Card_is_InfCard, |
|
576 |
THEN InfCard_is_Limit], |
|
577 |
assumption+) |
|
578 |
apply (blast dest!: recfunAC16_mono) |
|
579 |
done |
|
580 |
||
581 |
end |