12 (* ********************************************************************** *) |
12 (* ********************************************************************** *) |
13 |
13 |
14 goalw thy [Finite_def] "!!A. [| Finite(A); 0<m; m:nat |] ==> \ |
14 goalw thy [Finite_def] "!!A. [| Finite(A); 0<m; m:nat |] ==> \ |
15 \ EX a f. Ord(a) & domain(f) = a & \ |
15 \ EX a f. Ord(a) & domain(f) = a & \ |
16 \ (UN b<a. f`b) = A & (ALL b<a. f`b lepoll m)"; |
16 \ (UN b<a. f`b) = A & (ALL b<a. f`b lepoll m)"; |
17 by (eresolve_tac [bexE] 1); |
17 by (etac bexE 1); |
18 by (dresolve_tac [eqpoll_sym RS (eqpoll_def RS def_imp_iff RS iffD1)] 1); |
18 by (dresolve_tac [eqpoll_sym RS (eqpoll_def RS def_imp_iff RS iffD1)] 1); |
19 by (eresolve_tac [exE] 1); |
19 by (etac exE 1); |
20 by (res_inst_tac [("x","n")] exI 1); |
20 by (res_inst_tac [("x","n")] exI 1); |
21 by (res_inst_tac [("x","lam i:n. {f`i}")] exI 1); |
21 by (res_inst_tac [("x","lam i:n. {f`i}")] exI 1); |
22 by (asm_full_simp_tac AC_ss 1); |
22 by (asm_full_simp_tac AC_ss 1); |
23 by (rewrite_goals_tac [bij_def, surj_def]); |
23 by (rewrite_goals_tac [bij_def, surj_def]); |
24 by (fast_tac (AC_cs addSIs [ltI, nat_into_Ord, lam_funtype RS domain_of_fun, |
24 by (fast_tac (AC_cs addSIs [ltI, nat_into_Ord, lam_funtype RS domain_of_fun, |
102 val [prem] = goalw thy [s_u_def] |
102 val [prem] = goalw thy [s_u_def] |
103 "(ALL v:s_u(u, t_n, k, y). k eqpoll v Int y ==> False) \ |
103 "(ALL v:s_u(u, t_n, k, y). k eqpoll v Int y ==> False) \ |
104 \ ==> EX v : s_u(u, t_n, k, y). succ(k) lepoll v Int y"; |
104 \ ==> EX v : s_u(u, t_n, k, y). succ(k) lepoll v Int y"; |
105 by (excluded_middle_tac "?P" 1 THEN (assume_tac 2)); |
105 by (excluded_middle_tac "?P" 1 THEN (assume_tac 2)); |
106 by (resolve_tac [prem RS FalseE] 1); |
106 by (resolve_tac [prem RS FalseE] 1); |
107 by (resolve_tac [ballI] 1); |
107 by (rtac ballI 1); |
108 by (eresolve_tac [CollectE] 1); |
108 by (etac CollectE 1); |
109 by (eresolve_tac [conjE] 1); |
109 by (etac conjE 1); |
110 by (eresolve_tac [swap] 1); |
110 by (etac swap 1); |
111 by (fast_tac (AC_cs addSEs [succ_not_lepoll_imp_eqpoll]) 1); |
111 by (fast_tac (AC_cs addSEs [succ_not_lepoll_imp_eqpoll]) 1); |
112 val suppose_not = result(); |
112 val suppose_not = result(); |
113 |
113 |
114 (* ********************************************************************** *) |
114 (* ********************************************************************** *) |
115 (* There is a k-2 element subset of y *) |
115 (* There is a k-2 element subset of y *) |
125 val ordertype_eqpoll = |
125 val ordertype_eqpoll = |
126 ordermap_bij RS (exI RS (eqpoll_def RS def_imp_iff RS iffD2)); |
126 ordermap_bij RS (exI RS (eqpoll_def RS def_imp_iff RS iffD2)); |
127 |
127 |
128 goal thy "!!y. [| well_ord(y,R); ~Finite(y); n:nat \ |
128 goal thy "!!y. [| well_ord(y,R); ~Finite(y); n:nat \ |
129 \ |] ==> EX z. z<=y & n eqpoll z"; |
129 \ |] ==> EX z. z<=y & n eqpoll z"; |
130 by (eresolve_tac [nat_lepoll_imp_ex_eqpoll_n] 1); |
130 by (etac nat_lepoll_imp_ex_eqpoll_n 1); |
131 by (resolve_tac [ordertype_eqpoll RS eqpoll_sym RS eqpoll_imp_lepoll |
131 by (resolve_tac [ordertype_eqpoll RS eqpoll_sym RS eqpoll_imp_lepoll |
132 RSN (2, lepoll_trans)] 1 THEN (assume_tac 2)); |
132 RSN (2, lepoll_trans)] 1 THEN (assume_tac 2)); |
133 by (fast_tac (AC_cs addSIs [nat_le_infinite_Ord RS le_imp_lepoll] |
133 by (fast_tac (AC_cs addSIs [nat_le_infinite_Ord RS le_imp_lepoll] |
134 addSEs [Ord_ordertype, ordertype_eqpoll RS eqpoll_imp_lepoll |
134 addSEs [Ord_ordertype, ordertype_eqpoll RS eqpoll_imp_lepoll |
135 RS lepoll_infinite]) 1); |
135 RS lepoll_infinite]) 1); |
183 goal thy |
183 goal thy |
184 "!!y. [| ALL z:{z: Pow(x Un y) . z eqpoll succ(succ(k))}. \ |
184 "!!y. [| ALL z:{z: Pow(x Un y) . z eqpoll succ(succ(k))}. \ |
185 \ EX! w. w:t_n & z <= w; \ |
185 \ EX! w. w:t_n & z <= w; \ |
186 \ k eqpoll a; a <= y; b : y - a; u : x; x Int y = 0 |] \ |
186 \ k eqpoll a; a <= y; b : y - a; u : x; x Int y = 0 |] \ |
187 \ ==> EX! c. c:{v:s_u(u, t_n, succ(k), y). a <= v} & b:c"; |
187 \ ==> EX! c. c:{v:s_u(u, t_n, succ(k), y). a <= v} & b:c"; |
188 by (eresolve_tac [ballE] 1); |
188 by (etac ballE 1); |
189 by (fast_tac (FOL_cs addSIs [CollectI, cons_cons_subset, |
189 by (fast_tac (FOL_cs addSIs [CollectI, cons_cons_subset, |
190 eqpoll_sym RS cons_cons_eqpoll]) 2); |
190 eqpoll_sym RS cons_cons_eqpoll]) 2); |
191 by (eresolve_tac [ex1E] 1); |
191 by (etac ex1E 1); |
192 by (res_inst_tac [("a","w")] ex1I 1); |
192 by (res_inst_tac [("a","w")] ex1I 1); |
193 by (resolve_tac [conjI] 1); |
193 by (rtac conjI 1); |
194 by (resolve_tac [CollectI] 1); |
194 by (rtac CollectI 1); |
195 by (fast_tac (FOL_cs addSEs [s_uI]) 1); |
195 by (fast_tac (FOL_cs addSEs [s_uI]) 1); |
196 by (fast_tac AC_cs 1); |
196 by (fast_tac AC_cs 1); |
197 by (fast_tac AC_cs 1); |
197 by (fast_tac AC_cs 1); |
198 by (eresolve_tac [allE] 1); |
198 by (etac allE 1); |
199 by (eresolve_tac [impE] 1); |
199 by (etac impE 1); |
200 by (assume_tac 2); |
200 by (assume_tac 2); |
201 by (fast_tac (AC_cs addSEs [s_u_subset RS subsetD, in_s_u_imp_u_in]) 1); |
201 by (fast_tac (AC_cs addSEs [s_u_subset RS subsetD, in_s_u_imp_u_in]) 1); |
202 val ex1_superset_a = result(); |
202 val ex1_superset_a = result(); |
203 |
203 |
204 goal thy |
204 goal thy |
205 "!!A. [| succ(k) eqpoll A; k eqpoll B; B <= A; a : A-B; k:nat \ |
205 "!!A. [| succ(k) eqpoll A; k eqpoll B; B <= A; a : A-B; k:nat \ |
206 \ |] ==> A = cons(a, B)"; |
206 \ |] ==> A = cons(a, B)"; |
207 by (resolve_tac [equalityI] 1); |
207 by (rtac equalityI 1); |
208 by (fast_tac AC_cs 2); |
208 by (fast_tac AC_cs 2); |
209 by (resolve_tac [Diff_eq_0_iff RS iffD1] 1); |
209 by (resolve_tac [Diff_eq_0_iff RS iffD1] 1); |
210 by (resolve_tac [equals0I] 1); |
210 by (rtac equals0I 1); |
211 by (dresolve_tac [eqpoll_sym RS eqpoll_imp_lepoll] 1); |
211 by (dresolve_tac [eqpoll_sym RS eqpoll_imp_lepoll] 1); |
212 by (dresolve_tac [eqpoll_sym RS cons_eqpoll_succ] 1); |
212 by (dresolve_tac [eqpoll_sym RS cons_eqpoll_succ] 1); |
213 by (fast_tac AC_cs 1); |
213 by (fast_tac AC_cs 1); |
214 by (dresolve_tac [cons_eqpoll_succ] 1); |
214 by (dtac cons_eqpoll_succ 1); |
215 by (fast_tac AC_cs 1); |
215 by (fast_tac AC_cs 1); |
216 by (fast_tac (AC_cs addSIs [nat_succI] |
216 by (fast_tac (AC_cs addSIs [nat_succI] |
217 addSEs [[eqpoll_sym RS eqpoll_imp_lepoll, subset_imp_lepoll] MRS |
217 addSEs [[eqpoll_sym RS eqpoll_imp_lepoll, subset_imp_lepoll] MRS |
218 (lepoll_trans RS lepoll_trans) RS succ_lepoll_natE]) 1); |
218 (lepoll_trans RS lepoll_trans) RS succ_lepoll_natE]) 1); |
219 val set_eq_cons = result(); |
219 val set_eq_cons = result(); |
224 \ ALL v:s_u(u, t_n, succ(k), y). succ(k) eqpoll v Int y; \ |
224 \ ALL v:s_u(u, t_n, succ(k), y). succ(k) eqpoll v Int y; \ |
225 \ k eqpoll a; a <= y; b : y - a; u : x; x Int y = 0; k:nat \ |
225 \ k eqpoll a; a <= y; b : y - a; u : x; x Int y = 0; k:nat \ |
226 \ |] ==> (THE c. c:{v:s_u(u, t_n, succ(k), y). a <= v} & b:c) \ |
226 \ |] ==> (THE c. c:{v:s_u(u, t_n, succ(k), y). a <= v} & b:c) \ |
227 \ Int y = cons(b, a)"; |
227 \ Int y = cons(b, a)"; |
228 by (dresolve_tac [ex1_superset_a RS theI] 1 THEN REPEAT (assume_tac 1)); |
228 by (dresolve_tac [ex1_superset_a RS theI] 1 THEN REPEAT (assume_tac 1)); |
229 by (resolve_tac [set_eq_cons] 1); |
229 by (rtac set_eq_cons 1); |
230 by (REPEAT (fast_tac AC_cs 1)); |
230 by (REPEAT (fast_tac AC_cs 1)); |
231 val the_eq_cons = result(); |
231 val the_eq_cons = result(); |
232 |
232 |
233 goal thy "!!a. [| cons(x,a) = cons(y,a); x~: a |] ==> x = y "; |
233 goal thy "!!a. [| cons(x,a) = cons(y,a); x~: a |] ==> x = y "; |
234 by (fast_tac (AC_cs addSEs [equalityE]) 1); |
234 by (fast_tac (AC_cs addSEs [equalityE]) 1); |
259 THEN REPEAT (assume_tac 1)); |
259 THEN REPEAT (assume_tac 1)); |
260 by (res_inst_tac [("f3","lam b:y-a. \ |
260 by (res_inst_tac [("f3","lam b:y-a. \ |
261 \ THE c. c:{v:s_u(u, t_n, succ(k), y). a <= v} & b:c")] |
261 \ THE c. c:{v:s_u(u, t_n, succ(k), y). a <= v} & b:c")] |
262 (exI RS (lepoll_def RS def_imp_iff RS iffD2)) 1); |
262 (exI RS (lepoll_def RS def_imp_iff RS iffD2)) 1); |
263 by (resolve_tac [inj_def RS def_imp_eq RS ssubst] 1); |
263 by (resolve_tac [inj_def RS def_imp_eq RS ssubst] 1); |
264 by (resolve_tac [CollectI] 1); |
264 by (rtac CollectI 1); |
265 by (resolve_tac [lam_type] 1); |
265 by (rtac lam_type 1); |
266 by (resolve_tac [ex1_superset_a RS theI RS conjunct1] 1 |
266 by (resolve_tac [ex1_superset_a RS theI RS conjunct1] 1 |
267 THEN REPEAT (assume_tac 1)); |
267 THEN REPEAT (assume_tac 1)); |
268 by (resolve_tac [ballI] 1); |
268 by (rtac ballI 1); |
269 by (resolve_tac [ballI] 1); |
269 by (rtac ballI 1); |
270 by (resolve_tac [beta RS ssubst] 1 THEN (assume_tac 1)); |
270 by (resolve_tac [beta RS ssubst] 1 THEN (assume_tac 1)); |
271 by (resolve_tac [beta RS ssubst] 1 THEN (assume_tac 1)); |
271 by (resolve_tac [beta RS ssubst] 1 THEN (assume_tac 1)); |
272 by (resolve_tac [impI] 1); |
272 by (rtac impI 1); |
273 by (resolve_tac [cons_eqE] 1); |
273 by (rtac cons_eqE 1); |
274 by (fast_tac AC_cs 2); |
274 by (fast_tac AC_cs 2); |
275 by (dres_inst_tac [("A","THE c. ?P(c)"), ("C","y")] eq_imp_Int_eq 1); |
275 by (dres_inst_tac [("A","THE c. ?P(c)"), ("C","y")] eq_imp_Int_eq 1); |
276 by (eresolve_tac [[asm_rl, the_eq_cons, the_eq_cons] MRS msubst] 1 |
276 by (eresolve_tac [[asm_rl, the_eq_cons, the_eq_cons] MRS msubst] 1 |
277 THEN REPEAT (assume_tac 1)); |
277 THEN REPEAT (assume_tac 1)); |
278 val y_lepoll_subset_s_u = result(); |
278 val y_lepoll_subset_s_u = result(); |
291 by (REPEAT (resolve_tac [allI,impI] 1)); |
291 by (REPEAT (resolve_tac [allI,impI] 1)); |
292 by (resolve_tac [succ_lepoll_imp_not_empty RS not_emptyE] 1); |
292 by (resolve_tac [succ_lepoll_imp_not_empty RS not_emptyE] 1); |
293 by (fast_tac AC_cs 1); |
293 by (fast_tac AC_cs 1); |
294 by (eres_inst_tac [("x","A - {xa}")] allE 1); |
294 by (eres_inst_tac [("x","A - {xa}")] allE 1); |
295 by (eres_inst_tac [("x","B - {xa}")] allE 1); |
295 by (eres_inst_tac [("x","B - {xa}")] allE 1); |
296 by (eresolve_tac [impE] 1); |
296 by (etac impE 1); |
297 by (asm_full_simp_tac (AC_ss addsimps [add_succ]) 1); |
297 by (asm_full_simp_tac (AC_ss addsimps [add_succ]) 1); |
298 by (fast_tac (AC_cs addSIs [Diff_sing_eqpoll, lepoll_Diff_sing]) 1); |
298 by (fast_tac (AC_cs addSIs [Diff_sing_eqpoll, lepoll_Diff_sing]) 1); |
299 by (res_inst_tac [("P","%z. z lepoll m")] subst 1 THEN (assume_tac 2)); |
299 by (res_inst_tac [("P","%z. z lepoll m")] subst 1 THEN (assume_tac 2)); |
300 by (fast_tac (AC_cs addSIs [equalityI]) 1); |
300 by (fast_tac (AC_cs addSIs [equalityI]) 1); |
301 val eqpoll_sum_imp_Diff_lepoll_lemma = result(); |
301 val eqpoll_sum_imp_Diff_lepoll_lemma = result(); |
322 by (REPEAT (resolve_tac [allI,impI] 1)); |
322 by (REPEAT (resolve_tac [allI,impI] 1)); |
323 by (resolve_tac [succ_lepoll_imp_not_empty RS not_emptyE] 1); |
323 by (resolve_tac [succ_lepoll_imp_not_empty RS not_emptyE] 1); |
324 by (fast_tac (AC_cs addSEs [eqpoll_imp_lepoll]) 1); |
324 by (fast_tac (AC_cs addSEs [eqpoll_imp_lepoll]) 1); |
325 by (eres_inst_tac [("x","A - {xa}")] allE 1); |
325 by (eres_inst_tac [("x","A - {xa}")] allE 1); |
326 by (eres_inst_tac [("x","B - {xa}")] allE 1); |
326 by (eres_inst_tac [("x","B - {xa}")] allE 1); |
327 by (eresolve_tac [impE] 1); |
327 by (etac impE 1); |
328 by (fast_tac (AC_cs addSIs [Diff_sing_eqpoll, |
328 by (fast_tac (AC_cs addSIs [Diff_sing_eqpoll, |
329 eqpoll_sym RSN (2, Diff_sing_eqpoll) RS eqpoll_sym] |
329 eqpoll_sym RSN (2, Diff_sing_eqpoll) RS eqpoll_sym] |
330 addss (AC_ss addsimps [add_succ])) 1); |
330 addss (AC_ss addsimps [add_succ])) 1); |
331 by (res_inst_tac [("P","%z. z eqpoll m")] subst 1 THEN (assume_tac 2)); |
331 by (res_inst_tac [("P","%z. z eqpoll m")] subst 1 THEN (assume_tac 2)); |
332 by (fast_tac (AC_cs addSIs [equalityI]) 1); |
332 by (fast_tac (AC_cs addSIs [equalityI]) 1); |
353 goal thy "!!w. [| w:{v:s_u(u, t_n, succ(l), y). a <= v}; \ |
353 goal thy "!!w. [| w:{v:s_u(u, t_n, succ(l), y). a <= v}; \ |
354 \ l eqpoll a; t_n <= {v:Pow(x Un y). v eqpoll succ(succ(l) #+ m)}; \ |
354 \ l eqpoll a; t_n <= {v:Pow(x Un y). v eqpoll succ(succ(l) #+ m)}; \ |
355 \ m:nat; l:nat; x Int y = 0; u : x; \ |
355 \ m:nat; l:nat; x Int y = 0; u : x; \ |
356 \ ALL v:s_u(u, t_n, succ(l), y). succ(l) eqpoll v Int y \ |
356 \ ALL v:s_u(u, t_n, succ(l), y). succ(l) eqpoll v Int y \ |
357 \ |] ==> w Int (x - {u}) eqpoll m"; |
357 \ |] ==> w Int (x - {u}) eqpoll m"; |
358 by (eresolve_tac [CollectE] 1); |
358 by (etac CollectE 1); |
359 by (resolve_tac [w_Int_eq_w_Diff RS ssubst] 1 THEN (assume_tac 1)); |
359 by (resolve_tac [w_Int_eq_w_Diff RS ssubst] 1 THEN (assume_tac 1)); |
360 by (fast_tac (AC_cs addSDs [s_u_subset RS subsetD]) 1); |
360 by (fast_tac (AC_cs addSDs [s_u_subset RS subsetD]) 1); |
361 by (fast_tac (AC_cs addEs [equals0D] addSDs [bspec] |
361 by (fast_tac (AC_cs addEs [equals0D] addSDs [bspec] |
362 addDs [s_u_subset RS subsetD] |
362 addDs [s_u_subset RS subsetD] |
363 addSEs [eqpoll_sym RS cons_eqpoll_succ RS eqpoll_sym, in_s_u_imp_u_in] |
363 addSEs [eqpoll_sym RS cons_eqpoll_succ RS eqpoll_sym, in_s_u_imp_u_in] |
391 \ lepoll {v:Pow(x). v eqpoll m}"; |
391 \ lepoll {v:Pow(x). v eqpoll m}"; |
392 by (res_inst_tac [("f3","lam w:{v:s_u(u, t_n, succ(l), y). a <= v}. \ |
392 by (res_inst_tac [("f3","lam w:{v:s_u(u, t_n, succ(l), y). a <= v}. \ |
393 \ w Int (x - {u})")] |
393 \ w Int (x - {u})")] |
394 (exI RS (lepoll_def RS def_imp_iff RS iffD2)) 1); |
394 (exI RS (lepoll_def RS def_imp_iff RS iffD2)) 1); |
395 by (resolve_tac [inj_def RS def_imp_eq RS ssubst] 1); |
395 by (resolve_tac [inj_def RS def_imp_eq RS ssubst] 1); |
396 by (resolve_tac [CollectI] 1); |
396 by (rtac CollectI 1); |
397 by (resolve_tac [lam_type] 1); |
397 by (rtac lam_type 1); |
398 by (resolve_tac [CollectI] 1); |
398 by (rtac CollectI 1); |
399 by (fast_tac AC_cs 1); |
399 by (fast_tac AC_cs 1); |
400 by (resolve_tac [w_Int_eqpoll_m] 1 THEN REPEAT (assume_tac 1)); |
400 by (rtac w_Int_eqpoll_m 1 THEN REPEAT (assume_tac 1)); |
401 by (simp_tac AC_ss 1); |
401 by (simp_tac AC_ss 1); |
402 by (REPEAT (resolve_tac [ballI, impI] 1)); |
402 by (REPEAT (resolve_tac [ballI, impI] 1)); |
403 by (eresolve_tac [w_Int_eqpoll_m RSN (2, eqpoll_m_not_empty) RS not_emptyE] 1 |
403 by (eresolve_tac [w_Int_eqpoll_m RSN (2, eqpoll_m_not_empty) RS not_emptyE] 1 |
404 THEN REPEAT (assume_tac 1)); |
404 THEN REPEAT (assume_tac 1)); |
405 by (dresolve_tac [equalityD1 RS subsetD] 1 THEN (assume_tac 1)); |
405 by (dresolve_tac [equalityD1 RS subsetD] 1 THEN (assume_tac 1)); |
406 by (dresolve_tac [cons_cons_in RSN (2, bspec)] 1 THEN REPEAT (assume_tac 1)); |
406 by (dresolve_tac [cons_cons_in RSN (2, bspec)] 1 THEN REPEAT (assume_tac 1)); |
407 by (eresolve_tac [ex1_two_eq] 1); |
407 by (etac ex1_two_eq 1); |
408 by (fast_tac (AC_cs addSEs [s_u_subset RS subsetD, in_s_u_imp_u_in]) 1); |
408 by (fast_tac (AC_cs addSEs [s_u_subset RS subsetD, in_s_u_imp_u_in]) 1); |
409 by (fast_tac (AC_cs addSEs [s_u_subset RS subsetD, in_s_u_imp_u_in]) 1); |
409 by (fast_tac (AC_cs addSEs [s_u_subset RS subsetD, in_s_u_imp_u_in]) 1); |
410 val subset_s_u_lepoll_w = result(); |
410 val subset_s_u_lepoll_w = result(); |
411 |
411 |
412 goal thy "!!k. [| 0<k; k:nat |] ==> EX l:nat. k = succ(l)"; |
412 goal thy "!!k. [| 0<k; k:nat |] ==> EX l:nat. k = succ(l)"; |
413 by (eresolve_tac [natE] 1); |
413 by (etac natE 1); |
414 by (fast_tac (empty_cs addSEs [ltE, mem_irrefl]) 1); |
414 by (fast_tac (empty_cs addSEs [ltE, mem_irrefl]) 1); |
415 by (fast_tac (empty_cs addSIs [refl, bexI]) 1); |
415 by (fast_tac (empty_cs addSIs [refl, bexI]) 1); |
416 val ex_eq_succ = result(); |
416 val ex_eq_succ = result(); |
417 |
417 |
418 goal thy |
418 goal thy |
420 \ EX! w. w:t_n & z <= w; \ |
420 \ EX! w. w:t_n & z <= w; \ |
421 \ well_ord(y,R); ~Finite(y); u:x; x Int y = 0; \ |
421 \ well_ord(y,R); ~Finite(y); u:x; x Int y = 0; \ |
422 \ t_n <= {v:Pow(x Un y). v eqpoll succ(k #+ m)}; \ |
422 \ t_n <= {v:Pow(x Un y). v eqpoll succ(k #+ m)}; \ |
423 \ ~ y lepoll {v:Pow(x). v eqpoll m}; 0<k; 0<m; k:nat; m:nat \ |
423 \ ~ y lepoll {v:Pow(x). v eqpoll m}; 0<k; 0<m; k:nat; m:nat \ |
424 \ |] ==> EX v : s_u(u, t_n, k, y). succ(k) lepoll v Int y"; |
424 \ |] ==> EX v : s_u(u, t_n, k, y). succ(k) lepoll v Int y"; |
425 by (resolve_tac [suppose_not] 1); |
425 by (rtac suppose_not 1); |
426 by (eresolve_tac [ex_eq_succ RS bexE] 1 THEN (assume_tac 1)); |
426 by (eresolve_tac [ex_eq_succ RS bexE] 1 THEN (assume_tac 1)); |
427 by (hyp_subst_tac 1); |
427 by (hyp_subst_tac 1); |
428 by (res_inst_tac [("n1","xa")] (ex_subset_eqpoll_n RS exE) 1 |
428 by (res_inst_tac [("n1","xa")] (ex_subset_eqpoll_n RS exE) 1 |
429 THEN REPEAT (assume_tac 1)); |
429 THEN REPEAT (assume_tac 1)); |
430 by (eresolve_tac [conjE] 1); |
430 by (etac conjE 1); |
431 by (forward_tac [[y_lepoll_subset_s_u, subset_s_u_lepoll_w] MRS lepoll_trans] 1 |
431 by (forward_tac [[y_lepoll_subset_s_u, subset_s_u_lepoll_w] MRS lepoll_trans] 1 |
432 THEN REPEAT (assume_tac 1)); |
432 THEN REPEAT (assume_tac 1)); |
433 by (contr_tac 1); |
433 by (contr_tac 1); |
434 val exists_proper_in_s_u = result(); |
434 val exists_proper_in_s_u = result(); |
435 |
435 |
487 (* well_ord_subsets_lepoll_n *) |
487 (* well_ord_subsets_lepoll_n *) |
488 (* ********************************************************************** *) |
488 (* ********************************************************************** *) |
489 |
489 |
490 goal thy "!!y r. [| well_ord(y,r); ~Finite(y); n:nat |] ==> \ |
490 goal thy "!!y r. [| well_ord(y,r); ~Finite(y); n:nat |] ==> \ |
491 \ EX R. well_ord({z:Pow(y). z lepoll n}, R)"; |
491 \ EX R. well_ord({z:Pow(y). z lepoll n}, R)"; |
492 by (eresolve_tac [nat_induct] 1); |
492 by (etac nat_induct 1); |
493 by (fast_tac (ZF_cs addSIs [well_ord_unit] |
493 by (fast_tac (ZF_cs addSIs [well_ord_unit] |
494 addss (ZF_ss addsimps [subsets_lepoll_0_eq_unit])) 1); |
494 addss (ZF_ss addsimps [subsets_lepoll_0_eq_unit])) 1); |
495 by (eresolve_tac [exE] 1); |
495 by (etac exE 1); |
496 by (eresolve_tac [well_ord_subsets_eqpoll_n RS exE] 1 |
496 by (eresolve_tac [well_ord_subsets_eqpoll_n RS exE] 1 |
497 THEN REPEAT (assume_tac 1)); |
497 THEN REPEAT (assume_tac 1)); |
498 by (asm_simp_tac (ZF_ss addsimps [subsets_lepoll_succ]) 1); |
498 by (asm_simp_tac (ZF_ss addsimps [subsets_lepoll_succ]) 1); |
499 by (dresolve_tac [well_ord_radd] 1 THEN (assume_tac 1)); |
499 by (dtac well_ord_radd 1 THEN (assume_tac 1)); |
500 by (eresolve_tac [Int_empty RS disj_Un_eqpoll_sum RS |
500 by (eresolve_tac [Int_empty RS disj_Un_eqpoll_sum RS |
501 (eqpoll_def RS def_imp_iff RS iffD1) RS exE] 1); |
501 (eqpoll_def RS def_imp_iff RS iffD1) RS exE] 1); |
502 by (fast_tac (ZF_cs addSEs [bij_is_inj RS well_ord_rvimage]) 1); |
502 by (fast_tac (ZF_cs addSEs [bij_is_inj RS well_ord_rvimage]) 1); |
503 val well_ord_subsets_lepoll_n = result(); |
503 val well_ord_subsets_lepoll_n = result(); |
504 |
504 |
531 by (resolve_tac [lepoll_imp_eqpoll_subset RS exE] 1 THEN (assume_tac 1)); |
531 by (resolve_tac [lepoll_imp_eqpoll_subset RS exE] 1 THEN (assume_tac 1)); |
532 by (eres_inst_tac [("x","xa")] ballE 1); |
532 by (eres_inst_tac [("x","xa")] ballE 1); |
533 by (fast_tac (AC_cs addSEs [eqpoll_sym]) 2); |
533 by (fast_tac (AC_cs addSEs [eqpoll_sym]) 2); |
534 by (res_inst_tac [("a","v")] ex1I 1); |
534 by (res_inst_tac [("a","v")] ex1I 1); |
535 by (fast_tac AC_cs 1); |
535 by (fast_tac AC_cs 1); |
536 by (eresolve_tac [ex1E] 1); |
536 by (etac ex1E 1); |
537 by (res_inst_tac [("x","v")] allE 1 THEN (assume_tac 1)); |
537 by (res_inst_tac [("x","v")] allE 1 THEN (assume_tac 1)); |
538 by (eres_inst_tac [("x","xb")] allE 1); |
538 by (eres_inst_tac [("x","xb")] allE 1); |
539 by (fast_tac AC_cs 1); |
539 by (fast_tac AC_cs 1); |
540 val unique_superset_in_MM = result(); |
540 val unique_superset_in_MM = result(); |
541 |
541 |
574 \ well_ord(y,R); ~Finite(y); u:x; x Int y = 0; \ |
574 \ well_ord(y,R); ~Finite(y); u:x; x Int y = 0; \ |
575 \ t_n <= {v:Pow(x Un y). v eqpoll succ(k #+ m)}; \ |
575 \ t_n <= {v:Pow(x Un y). v eqpoll succ(k #+ m)}; \ |
576 \ ~ y lepoll {v:Pow(x). v eqpoll m}; 0<k; 0<m; k:nat; m:nat \ |
576 \ ~ y lepoll {v:Pow(x). v eqpoll m}; 0<k; 0<m; k:nat; m:nat \ |
577 \ |] ==> EX w:LL(t_n, succ(k), y). u:GG(t_n, succ(k), y)`w"; |
577 \ |] ==> EX w:LL(t_n, succ(k), y). u:GG(t_n, succ(k), y)`w"; |
578 by (forward_tac [exists_in_MM] 1 THEN REPEAT (assume_tac 1)); |
578 by (forward_tac [exists_in_MM] 1 THEN REPEAT (assume_tac 1)); |
579 by (eresolve_tac [bexE] 1); |
579 by (etac bexE 1); |
580 by (res_inst_tac [("x","w Int y")] bexI 1); |
580 by (res_inst_tac [("x","w Int y")] bexI 1); |
581 by (eresolve_tac [Int_in_LL] 2); |
581 by (etac Int_in_LL 2); |
582 by (rewrite_goals_tac [GG_def]); |
582 by (rewtac GG_def); |
583 by (asm_full_simp_tac (AC_ss addsimps [Int_in_LL]) 1); |
583 by (asm_full_simp_tac (AC_ss addsimps [Int_in_LL]) 1); |
584 by (eresolve_tac [unique_superset_in_MM RS the_equality2 RS ssubst] 1 |
584 by (eresolve_tac [unique_superset_in_MM RS the_equality2 RS ssubst] 1 |
585 THEN (assume_tac 1)); |
585 THEN (assume_tac 1)); |
586 by (REPEAT (fast_tac (AC_cs addEs [equals0D] addSEs [Int_in_LL]) 1)); |
586 by (REPEAT (fast_tac (AC_cs addEs [equals0D] addSEs [Int_in_LL]) 1)); |
587 val exists_in_LL = result(); |
587 val exists_in_LL = result(); |
609 \ t_n <= {v:Pow(x Un y). v eqpoll n}; \ |
609 \ t_n <= {v:Pow(x Un y). v eqpoll n}; \ |
610 \ v : LL(t_n, k, y) |] \ |
610 \ v : LL(t_n, k, y) |] \ |
611 \ ==> GG(t_n, k, y) ` v <= x"; |
611 \ ==> GG(t_n, k, y) ` v <= x"; |
612 by (asm_full_simp_tac AC_ss 1); |
612 by (asm_full_simp_tac AC_ss 1); |
613 by (forward_tac [the_in_MM_subset] 1 THEN REPEAT (assume_tac 1)); |
613 by (forward_tac [the_in_MM_subset] 1 THEN REPEAT (assume_tac 1)); |
614 by (dresolve_tac [in_LL_eq_Int] 1 THEN REPEAT (assume_tac 1)); |
614 by (dtac in_LL_eq_Int 1 THEN REPEAT (assume_tac 1)); |
615 by (resolve_tac [subsetI] 1); |
615 by (rtac subsetI 1); |
616 by (eresolve_tac [DiffE] 1); |
616 by (etac DiffE 1); |
617 by (eresolve_tac [swap] 1); |
617 by (etac swap 1); |
618 by (fast_tac (AC_cs addEs [ssubst]) 1); |
618 by (fast_tac (AC_cs addEs [ssubst]) 1); |
619 val GG_subset = result(); |
619 val GG_subset = result(); |
620 |
620 |
621 goal thy |
621 goal thy |
622 "!!x. [| well_ord(LL(t_n, succ(k), y), S); \ |
622 "!!x. [| well_ord(LL(t_n, succ(k), y), S); \ |
625 \ t_n <= {v:Pow(x Un y). v eqpoll succ(k #+ m)}; \ |
625 \ t_n <= {v:Pow(x Un y). v eqpoll succ(k #+ m)}; \ |
626 \ ~ y lepoll {v:Pow(x). v eqpoll m}; 0<k; 0<m; k:nat; m:nat \ |
626 \ ~ y lepoll {v:Pow(x). v eqpoll m}; 0<k; 0<m; k:nat; m:nat \ |
627 \ |] ==> (UN b<ordertype(LL(t_n, succ(k), y), S). \ |
627 \ |] ==> (UN b<ordertype(LL(t_n, succ(k), y), S). \ |
628 \ (GG(t_n, succ(k), y)) ` \ |
628 \ (GG(t_n, succ(k), y)) ` \ |
629 \ (converse(ordermap(LL(t_n, succ(k), y), S)) ` b)) = x"; |
629 \ (converse(ordermap(LL(t_n, succ(k), y), S)) ` b)) = x"; |
630 by (resolve_tac [equalityI] 1); |
630 by (rtac equalityI 1); |
631 by (resolve_tac [subsetI] 1); |
631 by (rtac subsetI 1); |
632 by (eresolve_tac [OUN_E] 1); |
632 by (etac OUN_E 1); |
633 by (eresolve_tac [GG_subset RS subsetD] 1 THEN TRYALL assume_tac); |
633 by (eresolve_tac [GG_subset RS subsetD] 1 THEN TRYALL assume_tac); |
634 by (eresolve_tac [ordermap_bij RS bij_converse_bij RS |
634 by (eresolve_tac [ordermap_bij RS bij_converse_bij RS |
635 bij_is_fun RS apply_type] 1); |
635 bij_is_fun RS apply_type] 1); |
636 by (eresolve_tac [ltD] 1); |
636 by (etac ltD 1); |
637 by (resolve_tac [subsetI] 1); |
637 by (rtac subsetI 1); |
638 by (eresolve_tac [exists_in_LL RS bexE] 1 THEN REPEAT (assume_tac 1)); |
638 by (eresolve_tac [exists_in_LL RS bexE] 1 THEN REPEAT (assume_tac 1)); |
639 by (resolve_tac [OUN_I] 1); |
639 by (rtac OUN_I 1); |
640 by (resolve_tac [Ord_ordertype RSN (2, ltI)] 1 THEN (assume_tac 2)); |
640 by (resolve_tac [Ord_ordertype RSN (2, ltI)] 1 THEN (assume_tac 2)); |
641 by (eresolve_tac [ordermap_type RS apply_type] 1); |
641 by (eresolve_tac [ordermap_type RS apply_type] 1); |
642 by (eresolve_tac [ordermap_bij RS bij_is_inj RS left_inverse RS ssubst] 1 |
642 by (eresolve_tac [ordermap_bij RS bij_is_inj RS left_inverse RS ssubst] 1 |
643 THEN REPEAT (assume_tac 1)); |
643 THEN REPEAT (assume_tac 1)); |
644 val OUN_eq_x = result(); |
644 val OUN_eq_x = result(); |
664 \ t_n <= {v:Pow(x Un y). v eqpoll succ(k #+ m)}; \ |
664 \ t_n <= {v:Pow(x Un y). v eqpoll succ(k #+ m)}; \ |
665 \ well_ord(LL(t_n, succ(k), y), S); k:nat; m:nat |] \ |
665 \ well_ord(LL(t_n, succ(k), y), S); k:nat; m:nat |] \ |
666 \ ==> ALL b<ordertype(LL(t_n, succ(k), y), S). \ |
666 \ ==> ALL b<ordertype(LL(t_n, succ(k), y), S). \ |
667 \ (GG(t_n, succ(k), y)) ` \ |
667 \ (GG(t_n, succ(k), y)) ` \ |
668 \ (converse(ordermap(LL(t_n, succ(k), y), S)) ` b) lepoll m"; |
668 \ (converse(ordermap(LL(t_n, succ(k), y), S)) ` b) lepoll m"; |
669 by (resolve_tac [oallI] 1); |
669 by (rtac oallI 1); |
670 by (asm_full_simp_tac (AC_ss addsimps [ltD, |
670 by (asm_full_simp_tac (AC_ss addsimps [ltD, |
671 ordermap_bij RS bij_converse_bij RS bij_is_fun RS apply_type]) 1); |
671 ordermap_bij RS bij_converse_bij RS bij_is_fun RS apply_type]) 1); |
672 by (resolve_tac [eqpoll_sum_imp_Diff_lepoll] 1); |
672 by (rtac eqpoll_sum_imp_Diff_lepoll 1); |
673 by (REPEAT (fast_tac (FOL_cs addSDs [ltD] |
673 by (REPEAT (fast_tac (FOL_cs addSDs [ltD] |
674 addSIs [eqpoll_sum_imp_Diff_lepoll, in_LL_eqpoll_n] |
674 addSIs [eqpoll_sum_imp_Diff_lepoll, in_LL_eqpoll_n] |
675 addEs [unique_superset_in_MM RS theI RS conjunct1 RS in_MM_eqpoll_n, |
675 addEs [unique_superset_in_MM RS theI RS conjunct1 RS in_MM_eqpoll_n, |
676 in_LL_eq_Int RS equalityD1 RS (Int_lower1 RSN (2, subset_trans)), |
676 in_LL_eq_Int RS equalityD1 RS (Int_lower1 RSN (2, subset_trans)), |
677 ordermap_bij RS bij_converse_bij RS bij_is_fun RS apply_type]) 1)); |
677 ordermap_bij RS bij_converse_bij RS bij_is_fun RS apply_type]) 1)); |
681 (* The main theorem AC16(n, k) ==> WO4(n-k) *) |
681 (* The main theorem AC16(n, k) ==> WO4(n-k) *) |
682 (* ********************************************************************** *) |
682 (* ********************************************************************** *) |
683 |
683 |
684 goalw thy [AC16_def,WO4_def] |
684 goalw thy [AC16_def,WO4_def] |
685 "!!n k. [| AC16(k #+ m, k); 0 < k; 0 < m; k:nat; m:nat |] ==> WO4(m)"; |
685 "!!n k. [| AC16(k #+ m, k); 0 < k; 0 < m; k:nat; m:nat |] ==> WO4(m)"; |
686 by (resolve_tac [allI] 1); |
686 by (rtac allI 1); |
687 by (excluded_middle_tac "Finite(A)" 1); |
687 by (excluded_middle_tac "Finite(A)" 1); |
688 by (resolve_tac [lemma1] 2 THEN REPEAT (assume_tac 2)); |
688 by (rtac lemma1 2 THEN REPEAT (assume_tac 2)); |
689 by (resolve_tac [lemma2 RS revcut_rl] 1); |
689 by (resolve_tac [lemma2 RS revcut_rl] 1); |
690 by (REPEAT (eresolve_tac [exE, conjE] 1)); |
690 by (REPEAT (eresolve_tac [exE, conjE] 1)); |
691 by (eres_inst_tac [("x","A Un y")] allE 1); |
691 by (eres_inst_tac [("x","A Un y")] allE 1); |
692 by (forward_tac [infinite_Un] 1 THEN (mp_tac 1)); |
692 by (forward_tac [infinite_Un] 1 THEN (mp_tac 1)); |
693 by (REPEAT (eresolve_tac [exE, conjE] 1)); |
693 by (REPEAT (eresolve_tac [exE, conjE] 1)); |