22 \ --> (EX! Y. Y:F(y) & f(z)<=Y); \ |
22 \ --> (EX! Y. Y:F(y) & f(z)<=Y); \ |
23 \ ALL i j. i le j --> F(i) <= F(j); j le i; i<x; z<a; \ |
23 \ ALL i j. i le j --> F(i) <= F(j); j le i; i<x; z<a; \ |
24 \ V: F(i); f(z)<=V; W:F(j); f(z)<=W |] \ |
24 \ V: F(i); f(z)<=V; W:F(j); f(z)<=W |] \ |
25 \ ==> V = W"; |
25 \ ==> V = W"; |
26 by (REPEAT (eresolve_tac [asm_rl, allE, impE] 1)); |
26 by (REPEAT (eresolve_tac [asm_rl, allE, impE] 1)); |
27 by (dresolve_tac [subsetD] 1 THEN (assume_tac 1)); |
27 by (dtac subsetD 1 THEN (assume_tac 1)); |
28 by (REPEAT (dresolve_tac [ospec] 1 THEN (assume_tac 1))); |
28 by (REPEAT (dtac ospec 1 THEN (assume_tac 1))); |
29 by (eresolve_tac [disjI2 RSN (2, impE)] 1); |
29 by (eresolve_tac [disjI2 RSN (2, impE)] 1); |
30 by (fast_tac (FOL_cs addSIs [bexI]) 1); |
30 by (fast_tac (FOL_cs addSIs [bexI]) 1); |
31 by (eresolve_tac [ex1_two_eq] 1 THEN (REPEAT (ares_tac [conjI] 1))); |
31 by (etac ex1_two_eq 1 THEN (REPEAT (ares_tac [conjI] 1))); |
32 val lemma3_1 = result(); |
32 val lemma3_1 = result(); |
33 |
33 |
34 goal thy "!!Z. [| ALL y<x. ALL z<a. z<y | (EX Y: F(y). f(z)<=Y) \ |
34 goal thy "!!Z. [| ALL y<x. ALL z<a. z<y | (EX Y: F(y). f(z)<=Y) \ |
35 \ --> (EX! Y. Y:F(y) & f(z)<=Y); \ |
35 \ --> (EX! Y. Y:F(y) & f(z)<=Y); \ |
36 \ ALL i j. i le j --> F(i) <= F(j); i<x; j<x; z<a; \ |
36 \ ALL i j. i le j --> F(i) <= F(j); i<x; j<x; z<a; \ |
37 \ V: F(i); f(z)<=V; W:F(j); f(z)<=W |] \ |
37 \ V: F(i); f(z)<=V; W:F(j); f(z)<=W |] \ |
38 \ ==> V = W"; |
38 \ ==> V = W"; |
39 by (res_inst_tac [("j","j")] (lt_Ord RS (lt_Ord RSN (2, Ord_linear_le))) 1 |
39 by (res_inst_tac [("j","j")] (lt_Ord RS (lt_Ord RSN (2, Ord_linear_le))) 1 |
40 THEN (REPEAT (assume_tac 1))); |
40 THEN (REPEAT (assume_tac 1))); |
41 by (eresolve_tac [lemma3_1 RS sym] 1 THEN (REPEAT (assume_tac 1))); |
41 by (eresolve_tac [lemma3_1 RS sym] 1 THEN (REPEAT (assume_tac 1))); |
42 by (eresolve_tac [lemma3_1] 1 THEN (REPEAT (assume_tac 1))); |
42 by (etac lemma3_1 1 THEN (REPEAT (assume_tac 1))); |
43 val lemma3 = result(); |
43 val lemma3 = result(); |
44 |
44 |
45 goal thy "!!a. [| ALL y:x. y < a --> F(y) <= X & \ |
45 goal thy "!!a. [| ALL y:x. y < a --> F(y) <= X & \ |
46 \ (ALL x<a. x < y | (EX Y:F(y). fa(x) <= Y) --> \ |
46 \ (ALL x<a. x < y | (EX Y:F(y). fa(x) <= Y) --> \ |
47 \ (EX! Y. Y : F(y) & fa(x) <= Y)); x < a |] \ |
47 \ (EX! Y. Y : F(y) & fa(x) <= Y)); x < a |] \ |
58 \ (EX! Y. Y : F(y) & fa(x) <= Y)); \ |
58 \ (EX! Y. Y : F(y) & fa(x) <= Y)); \ |
59 \ x < a; Limit(x); ALL i j. i le j --> F(i) <= F(j) |] \ |
59 \ x < a; Limit(x); ALL i j. i le j --> F(i) <= F(j) |] \ |
60 \ ==> (UN x<x. F(x)) <= X & \ |
60 \ ==> (UN x<x. F(x)) <= X & \ |
61 \ (ALL xa<a. xa < x | (EX x:UN x<x. F(x). fa(xa) <= x) \ |
61 \ (ALL xa<a. xa < x | (EX x:UN x<x. F(x). fa(xa) <= x) \ |
62 \ --> (EX! Y. Y : (UN x<x. F(x)) & fa(xa) <= Y))"; |
62 \ --> (EX! Y. Y : (UN x<x. F(x)) & fa(xa) <= Y))"; |
63 by (resolve_tac [conjI] 1); |
63 by (rtac conjI 1); |
64 by (resolve_tac [subsetI] 1); |
64 by (rtac subsetI 1); |
65 by (eresolve_tac [OUN_E] 1); |
65 by (etac OUN_E 1); |
66 by (dresolve_tac [ltD RSN (2, bspec)] 1 THEN (assume_tac 1)); |
66 by (dresolve_tac [ltD RSN (2, bspec)] 1 THEN (assume_tac 1)); |
67 by (eresolve_tac [lt_trans RSN (2, impE)] 1 THEN (REPEAT (assume_tac 1))); |
67 by (eresolve_tac [lt_trans RSN (2, impE)] 1 THEN (REPEAT (assume_tac 1))); |
68 by (fast_tac AC_cs 1); |
68 by (fast_tac AC_cs 1); |
69 by (dresolve_tac [lemma4] 1 THEN (assume_tac 1)); |
69 by (dtac lemma4 1 THEN (assume_tac 1)); |
70 by (resolve_tac [oallI] 1); |
70 by (rtac oallI 1); |
71 by (resolve_tac [impI] 1); |
71 by (rtac impI 1); |
72 by (eresolve_tac [disjE] 1); |
72 by (etac disjE 1); |
73 by (forward_tac [Limit_has_succ RSN (2, ospec)] 1 THEN (REPEAT (assume_tac 1))); |
73 by (forward_tac [Limit_has_succ RSN (2, ospec)] 1 THEN (REPEAT (assume_tac 1))); |
74 by (dres_inst_tac [("A","a"),("x","xa")] ospec 1 THEN (assume_tac 1)); |
74 by (dres_inst_tac [("A","a"),("x","xa")] ospec 1 THEN (assume_tac 1)); |
75 by (eresolve_tac [lt_Ord RS le_refl RSN (2, disjI1 RSN (2, impE))] 1 |
75 by (eresolve_tac [lt_Ord RS le_refl RSN (2, disjI1 RSN (2, impE))] 1 |
76 THEN (assume_tac 1)); |
76 THEN (assume_tac 1)); |
77 by (REPEAT (eresolve_tac [ex1E, conjE] 1)); |
77 by (REPEAT (eresolve_tac [ex1E, conjE] 1)); |
78 by (resolve_tac [ex1I] 1); |
78 by (rtac ex1I 1); |
79 by (resolve_tac [conjI] 1 THEN (assume_tac 2)); |
79 by (rtac conjI 1 THEN (assume_tac 2)); |
80 by (eresolve_tac [Limit_has_succ RS OUN_I] 1 THEN (TRYALL assume_tac)); |
80 by (eresolve_tac [Limit_has_succ RS OUN_I] 1 THEN (TRYALL assume_tac)); |
81 by (REPEAT (eresolve_tac [conjE, OUN_E] 1)); |
81 by (REPEAT (eresolve_tac [conjE, OUN_E] 1)); |
82 by (eresolve_tac [lemma3] 1 THEN (TRYALL assume_tac)); |
82 by (etac lemma3 1 THEN (TRYALL assume_tac)); |
83 by (eresolve_tac [Limit_has_succ] 1 THEN (assume_tac 1)); |
83 by (etac Limit_has_succ 1 THEN (assume_tac 1)); |
84 by (eresolve_tac [bexE] 1); |
84 by (etac bexE 1); |
85 by (resolve_tac [ex1I] 1); |
85 by (rtac ex1I 1); |
86 by (eresolve_tac [conjI] 1 THEN (assume_tac 1)); |
86 by (etac conjI 1 THEN (assume_tac 1)); |
87 by (REPEAT (eresolve_tac [conjE, OUN_E] 1)); |
87 by (REPEAT (eresolve_tac [conjE, OUN_E] 1)); |
88 by (eresolve_tac [lemma3] 1 THEN (TRYALL assume_tac)); |
88 by (etac lemma3 1 THEN (TRYALL assume_tac)); |
89 val lemma5 = result(); |
89 val lemma5 = result(); |
90 |
90 |
91 (* ********************************************************************** *) |
91 (* ********************************************************************** *) |
92 (* case of successor ordinal *) |
92 (* case of successor ordinal *) |
93 (* ********************************************************************** *) |
93 (* ********************************************************************** *) |
103 (* dbl_Diff_eqpoll_Card *) |
103 (* dbl_Diff_eqpoll_Card *) |
104 (* ********************************************************************** *) |
104 (* ********************************************************************** *) |
105 |
105 |
106 goal thy "!!A. [| A eqpoll a; Card(a); ~Finite(a); B lesspoll a; \ |
106 goal thy "!!A. [| A eqpoll a; Card(a); ~Finite(a); B lesspoll a; \ |
107 \ C lesspoll a |] ==> A - B - C eqpoll a"; |
107 \ C lesspoll a |] ==> A - B - C eqpoll a"; |
108 by (resolve_tac [Diff_lesspoll_eqpoll_Card] 1 THEN (REPEAT (assume_tac 1))); |
108 by (rtac Diff_lesspoll_eqpoll_Card 1 THEN (REPEAT (assume_tac 1))); |
109 by (resolve_tac [Diff_lesspoll_eqpoll_Card] 1 THEN (REPEAT (assume_tac 1))); |
109 by (rtac Diff_lesspoll_eqpoll_Card 1 THEN (REPEAT (assume_tac 1))); |
110 val dbl_Diff_eqpoll_Card = result(); |
110 val dbl_Diff_eqpoll_Card = result(); |
111 |
111 |
112 (* ********************************************************************** *) |
112 (* ********************************************************************** *) |
113 (* Case of finite ordinals *) |
113 (* Case of finite ordinals *) |
114 (* ********************************************************************** *) |
114 (* ********************************************************************** *) |
115 |
115 |
116 goalw thy [lesspoll_def] |
116 goalw thy [lesspoll_def] |
117 "!!X. [| Finite(X); ~Finite(a); Ord(a) |] ==> X lesspoll a"; |
117 "!!X. [| Finite(X); ~Finite(a); Ord(a) |] ==> X lesspoll a"; |
118 by (resolve_tac [conjI] 1); |
118 by (rtac conjI 1); |
119 by (dresolve_tac [nat_le_infinite_Ord RS le_imp_lepoll] 1 |
119 by (dresolve_tac [nat_le_infinite_Ord RS le_imp_lepoll] 1 |
120 THEN (assume_tac 1)); |
120 THEN (assume_tac 1)); |
121 by (rewrite_goals_tac [Finite_def]); |
121 by (rewtac Finite_def); |
122 by (fast_tac (AC_cs addSEs [eqpoll_sym RS eqpoll_trans]) 2); |
122 by (fast_tac (AC_cs addSEs [eqpoll_sym RS eqpoll_trans]) 2); |
123 by (resolve_tac [lepoll_trans] 1 THEN (assume_tac 2)); |
123 by (rtac lepoll_trans 1 THEN (assume_tac 2)); |
124 by (fast_tac (AC_cs addSEs [Ord_nat RSN (2, ltI) RS leI RS le_imp_subset RS |
124 by (fast_tac (AC_cs addSEs [Ord_nat RSN (2, ltI) RS leI RS le_imp_subset RS |
125 subset_imp_lepoll RSN (2, eqpoll_imp_lepoll RS lepoll_trans)]) 1); |
125 subset_imp_lepoll RSN (2, eqpoll_imp_lepoll RS lepoll_trans)]) 1); |
126 val Finite_lesspoll_infinite_Ord = result(); |
126 val Finite_lesspoll_infinite_Ord = result(); |
127 |
127 |
128 goal thy "!!x. x:X ==> Union(X) = Union(X-{x}) Un x"; |
128 goal thy "!!x. x:X ==> Union(X) = Union(X-{x}) Un x"; |
130 addSEs [singletonE]) 1); |
130 addSEs [singletonE]) 1); |
131 val Union_eq_Un_Diff = result(); |
131 val Union_eq_Un_Diff = result(); |
132 |
132 |
133 goal thy "!!n. n:nat ==> ALL X. X eqpoll n --> (ALL x:X. Finite(x)) \ |
133 goal thy "!!n. n:nat ==> ALL X. X eqpoll n --> (ALL x:X. Finite(x)) \ |
134 \ --> Finite(Union(X))"; |
134 \ --> Finite(Union(X))"; |
135 by (eresolve_tac [nat_induct] 1); |
135 by (etac nat_induct 1); |
136 by (fast_tac (AC_cs addSDs [eqpoll_imp_lepoll RS lepoll_0_is_0] |
136 by (fast_tac (AC_cs addSDs [eqpoll_imp_lepoll RS lepoll_0_is_0] |
137 addSIs [nat_0I RS nat_into_Finite] addIs [Union_0 RS ssubst]) 1); |
137 addSIs [nat_0I RS nat_into_Finite] addIs [Union_0 RS ssubst]) 1); |
138 by (REPEAT (resolve_tac [allI, impI] 1)); |
138 by (REPEAT (resolve_tac [allI, impI] 1)); |
139 by (resolve_tac [eqpoll_succ_imp_not_empty RS not_emptyE] 1 THEN (assume_tac 1)); |
139 by (resolve_tac [eqpoll_succ_imp_not_empty RS not_emptyE] 1 THEN (assume_tac 1)); |
140 by (res_inst_tac [("P","%z. Finite(z)")] (Union_eq_Un_Diff RS ssubst) 1 |
140 by (res_inst_tac [("P","%z. Finite(z)")] (Union_eq_Un_Diff RS ssubst) 1 |
141 THEN (assume_tac 1)); |
141 THEN (assume_tac 1)); |
142 by (resolve_tac [Finite_Un] 1); |
142 by (rtac Finite_Un 1); |
143 by (fast_tac AC_cs 2); |
143 by (fast_tac AC_cs 2); |
144 by (fast_tac (AC_cs addSIs [Diff_sing_eqpoll]) 1); |
144 by (fast_tac (AC_cs addSIs [Diff_sing_eqpoll]) 1); |
145 val Finite_Union_lemma = result(); |
145 val Finite_Union_lemma = result(); |
146 |
146 |
147 goal thy "!!X. [| ALL x:X. Finite(x); Finite(X) |] ==> Finite(Union(X))"; |
147 goal thy "!!X. [| ALL x:X. Finite(x); Finite(X) |] ==> Finite(Union(X))"; |
148 by (eresolve_tac [Finite_def RS def_imp_iff RS iffD1 RS bexE] 1); |
148 by (eresolve_tac [Finite_def RS def_imp_iff RS iffD1 RS bexE] 1); |
149 by (dresolve_tac [Finite_Union_lemma] 1); |
149 by (dtac Finite_Union_lemma 1); |
150 by (fast_tac AC_cs 1); |
150 by (fast_tac AC_cs 1); |
151 val Finite_Union = result(); |
151 val Finite_Union = result(); |
152 |
152 |
153 goalw thy [Finite_def] "!!x. [| x lepoll n; n:nat |] ==> Finite(x)"; |
153 goalw thy [Finite_def] "!!x. [| x lepoll n; n:nat |] ==> Finite(x)"; |
154 by (fast_tac (AC_cs |
154 by (fast_tac (AC_cs |
202 by (fast_tac (AC_cs addSIs [OUN_I, le_refl]) 1); |
202 by (fast_tac (AC_cs addSIs [OUN_I, le_refl]) 1); |
203 val Diff_UN_succ_subset = result(); |
203 val Diff_UN_succ_subset = result(); |
204 |
204 |
205 goal thy "!!x. Ord(x) ==> \ |
205 goal thy "!!x. Ord(x) ==> \ |
206 \ recfunAC16(f, g, x, a) - (UN i<x. recfunAC16(f, g, i, a)) lepoll 1"; |
206 \ recfunAC16(f, g, x, a) - (UN i<x. recfunAC16(f, g, i, a)) lepoll 1"; |
207 by (eresolve_tac [Ord_cases] 1); |
207 by (etac Ord_cases 1); |
208 by (asm_simp_tac (AC_ss addsimps [recfunAC16_0, |
208 by (asm_simp_tac (AC_ss addsimps [recfunAC16_0, |
209 empty_subsetI RS subset_imp_lepoll]) 1); |
209 empty_subsetI RS subset_imp_lepoll]) 1); |
210 by (asm_simp_tac (AC_ss addsimps [recfunAC16_Limit, |
210 by (asm_simp_tac (AC_ss addsimps [recfunAC16_Limit, |
211 Diff_cancel, empty_subsetI RS subset_imp_lepoll]) 2); |
211 Diff_cancel, empty_subsetI RS subset_imp_lepoll]) 2); |
212 by (asm_simp_tac (AC_ss addsimps [recfunAC16_succ]) 1); |
212 by (asm_simp_tac (AC_ss addsimps [recfunAC16_succ]) 1); |
223 val in_Least_Diff = result(); |
223 val in_Least_Diff = result(); |
224 |
224 |
225 goal thy "!!w. [| (LEAST i. w:F(i)) = (LEAST i. z:F(i)); \ |
225 goal thy "!!w. [| (LEAST i. w:F(i)) = (LEAST i. z:F(i)); \ |
226 \ w:(UN i<a. F(i)); z:(UN i<a. F(i)) |] \ |
226 \ w:(UN i<a. F(i)); z:(UN i<a. F(i)) |] \ |
227 \ ==> EX b<a. w:(F(b) - (UN c<b. F(c))) & z:(F(b) - (UN c<b. F(c)))"; |
227 \ ==> EX b<a. w:(F(b) - (UN c<b. F(c))) & z:(F(b) - (UN c<b. F(c)))"; |
228 by (REPEAT (eresolve_tac [OUN_E] 1)); |
228 by (REPEAT (etac OUN_E 1)); |
229 by (dresolve_tac [lt_Ord RSN (2, in_Least_Diff)] 1 THEN (assume_tac 1)); |
229 by (dresolve_tac [lt_Ord RSN (2, in_Least_Diff)] 1 THEN (assume_tac 1)); |
230 by (forward_tac [lt_Ord RSN (2, in_Least_Diff)] 1 THEN (assume_tac 1)); |
230 by (forward_tac [lt_Ord RSN (2, in_Least_Diff)] 1 THEN (assume_tac 1)); |
231 by (resolve_tac [oexI] 1); |
231 by (rtac oexI 1); |
232 by (resolve_tac [conjI] 1 THEN (assume_tac 2)); |
232 by (rtac conjI 1 THEN (assume_tac 2)); |
233 by (eresolve_tac [subst] 1 THEN (assume_tac 1)); |
233 by (etac subst 1 THEN (assume_tac 1)); |
234 by (eresolve_tac [lt_Ord RSN (2, Least_le) RS lt_trans1] 1 |
234 by (eresolve_tac [lt_Ord RSN (2, Least_le) RS lt_trans1] 1 |
235 THEN (REPEAT (assume_tac 1))); |
235 THEN (REPEAT (assume_tac 1))); |
236 val Least_eq_imp_ex = result(); |
236 val Least_eq_imp_ex = result(); |
237 |
237 |
238 goal thy "!!A. [| A lepoll 1; a:A; b:A |] ==> a=b"; |
238 goal thy "!!A. [| A lepoll 1; a:A; b:A |] ==> a=b"; |
241 |
241 |
242 goal thy "!!a. [| ALL i<a. F(i)-(UN j<i. F(j)) lepoll 1; Limit(a) |] \ |
242 goal thy "!!a. [| ALL i<a. F(i)-(UN j<i. F(j)) lepoll 1; Limit(a) |] \ |
243 \ ==> (UN x<a. F(x)) lepoll a"; |
243 \ ==> (UN x<a. F(x)) lepoll a"; |
244 by (resolve_tac [lepoll_def RS (def_imp_iff RS iffD2)] 1); |
244 by (resolve_tac [lepoll_def RS (def_imp_iff RS iffD2)] 1); |
245 by (res_inst_tac [("x","lam z: (UN x<a. F(x)). LEAST i. z:F(i)")] exI 1); |
245 by (res_inst_tac [("x","lam z: (UN x<a. F(x)). LEAST i. z:F(i)")] exI 1); |
246 by (rewrite_goals_tac [inj_def]); |
246 by (rewtac inj_def); |
247 by (resolve_tac [CollectI] 1); |
247 by (rtac CollectI 1); |
248 by (resolve_tac [lam_type] 1); |
248 by (rtac lam_type 1); |
249 by (eresolve_tac [OUN_E] 1); |
249 by (etac OUN_E 1); |
250 by (eresolve_tac [Least_in_Ord] 1); |
250 by (etac Least_in_Ord 1); |
251 by (eresolve_tac [ltD] 1); |
251 by (etac ltD 1); |
252 by (eresolve_tac [lt_Ord2] 1); |
252 by (etac lt_Ord2 1); |
253 by (resolve_tac [ballI] 1); |
253 by (rtac ballI 1); |
254 by (resolve_tac [ballI] 1); |
254 by (rtac ballI 1); |
255 by (asm_simp_tac AC_ss 1); |
255 by (asm_simp_tac AC_ss 1); |
256 by (resolve_tac [impI] 1); |
256 by (rtac impI 1); |
257 by (dresolve_tac [Least_eq_imp_ex] 1 THEN (REPEAT (assume_tac 1))); |
257 by (dtac Least_eq_imp_ex 1 THEN (REPEAT (assume_tac 1))); |
258 by (fast_tac (AC_cs addSEs [two_in_lepoll_1]) 1); |
258 by (fast_tac (AC_cs addSEs [two_in_lepoll_1]) 1); |
259 val UN_lepoll_index = result(); |
259 val UN_lepoll_index = result(); |
260 |
260 |
261 goal thy "!!y. Ord(y) ==> recfunAC16(f, fa, y, a) lepoll y"; |
261 goal thy "!!y. Ord(y) ==> recfunAC16(f, fa, y, a) lepoll y"; |
262 by (eresolve_tac [trans_induct] 1); |
262 by (etac trans_induct 1); |
263 by (eresolve_tac [Ord_cases] 1); |
263 by (etac Ord_cases 1); |
264 by (asm_simp_tac (AC_ss addsimps [recfunAC16_0, lepoll_refl]) 1); |
264 by (asm_simp_tac (AC_ss addsimps [recfunAC16_0, lepoll_refl]) 1); |
265 by (asm_simp_tac (AC_ss addsimps [recfunAC16_succ]) 1); |
265 by (asm_simp_tac (AC_ss addsimps [recfunAC16_succ]) 1); |
266 by (fast_tac (AC_cs addIs [conjI RS (expand_if RS iffD2)] |
266 by (fast_tac (AC_cs addIs [conjI RS (expand_if RS iffD2)] |
267 addSDs [succI1 RSN (2, bspec)] |
267 addSDs [succI1 RSN (2, bspec)] |
268 addSEs [subset_succI RS subset_imp_lepoll RSN (2, lepoll_trans), |
268 addSEs [subset_succI RS subset_imp_lepoll RSN (2, lepoll_trans), |
274 |
274 |
275 goal thy "!!y. [| recfunAC16(f,g,y,a) <= {X: Pow(A). X eqpoll n}; \ |
275 goal thy "!!y. [| recfunAC16(f,g,y,a) <= {X: Pow(A). X eqpoll n}; \ |
276 \ A eqpoll a; y<a; ~Finite(a); Card(a); n:nat |] \ |
276 \ A eqpoll a; y<a; ~Finite(a); Card(a); n:nat |] \ |
277 \ ==> Union(recfunAC16(f,g,y,a)) lesspoll a"; |
277 \ ==> Union(recfunAC16(f,g,y,a)) lesspoll a"; |
278 by (eresolve_tac [eqpoll_def RS def_imp_iff RS iffD1 RS exE] 1); |
278 by (eresolve_tac [eqpoll_def RS def_imp_iff RS iffD1 RS exE] 1); |
279 by (resolve_tac [Union_lesspoll] 1 THEN (TRYALL assume_tac)); |
279 by (rtac Union_lesspoll 1 THEN (TRYALL assume_tac)); |
280 by (eresolve_tac [lt_Ord RS recfunAC16_lepoll_index] 3); |
280 by (eresolve_tac [lt_Ord RS recfunAC16_lepoll_index] 3); |
281 by (eresolve_tac [[bij_is_inj, Card_is_Ord RS well_ord_Memrel] MRS |
281 by (eresolve_tac [[bij_is_inj, Card_is_Ord RS well_ord_Memrel] MRS |
282 well_ord_rvimage] 2 THEN (assume_tac 2)); |
282 well_ord_rvimage] 2 THEN (assume_tac 2)); |
283 by (fast_tac (AC_cs addSEs [eqpoll_imp_lepoll]) 1); |
283 by (fast_tac (AC_cs addSEs [eqpoll_imp_lepoll]) 1); |
284 val Union_recfunAC16_lesspoll = result(); |
284 val Union_recfunAC16_lesspoll = result(); |
287 "!!a. [| recfunAC16(f, fa, y, a) <= {X: Pow(A) . X eqpoll succ(k #+ m)}; \ |
287 "!!a. [| recfunAC16(f, fa, y, a) <= {X: Pow(A) . X eqpoll succ(k #+ m)}; \ |
288 \ Card(a); ~ Finite(a); A eqpoll a; \ |
288 \ Card(a); ~ Finite(a); A eqpoll a; \ |
289 \ k : nat; m : nat; y<a; \ |
289 \ k : nat; m : nat; y<a; \ |
290 \ fa : bij(a, {Y: Pow(A). Y eqpoll succ(k)}) |] \ |
290 \ fa : bij(a, {Y: Pow(A). Y eqpoll succ(k)}) |] \ |
291 \ ==> A - Union(recfunAC16(f, fa, y, a)) - fa`y eqpoll a"; |
291 \ ==> A - Union(recfunAC16(f, fa, y, a)) - fa`y eqpoll a"; |
292 by (resolve_tac [dbl_Diff_eqpoll_Card] 1 THEN (TRYALL assume_tac)); |
292 by (rtac dbl_Diff_eqpoll_Card 1 THEN (TRYALL assume_tac)); |
293 by (resolve_tac [Union_recfunAC16_lesspoll] 1 THEN (REPEAT (assume_tac 1))); |
293 by (rtac Union_recfunAC16_lesspoll 1 THEN (REPEAT (assume_tac 1))); |
294 by (eresolve_tac [add_type RS nat_succI] 1 THEN (assume_tac 1)); |
294 by (eresolve_tac [add_type RS nat_succI] 1 THEN (assume_tac 1)); |
295 by (resolve_tac [nat_succI RSN (2, bexI RS (Finite_def RS def_imp_iff RS |
295 by (resolve_tac [nat_succI RSN (2, bexI RS (Finite_def RS def_imp_iff RS |
296 iffD2)) RS (Card_is_Ord RSN (3, Finite_lesspoll_infinite_Ord))] 1 |
296 iffD2)) RS (Card_is_Ord RSN (3, Finite_lesspoll_infinite_Ord))] 1 |
297 THEN (TRYALL assume_tac)); |
297 THEN (TRYALL assume_tac)); |
298 by (eresolve_tac [ltD RSN (2, bij_is_fun RS apply_type) RS CollectE] 1 |
298 by (eresolve_tac [ltD RSN (2, bij_is_fun RS apply_type) RS CollectE] 1 |
307 eqpoll_trans RS eqpoll_trans))) |> standard; |
307 eqpoll_trans RS eqpoll_trans))) |> standard; |
308 |
308 |
309 goal thy "!!x. [| x : Pow(A - B - fa`i); x eqpoll m; \ |
309 goal thy "!!x. [| x : Pow(A - B - fa`i); x eqpoll m; \ |
310 \ fa : bij(a, {x: Pow(A) . x eqpoll k}); i<a; k:nat; m:nat |] \ |
310 \ fa : bij(a, {x: Pow(A) . x eqpoll k}); i<a; k:nat; m:nat |] \ |
311 \ ==> fa ` i Un x : {x: Pow(A) . x eqpoll k #+ m}"; |
311 \ ==> fa ` i Un x : {x: Pow(A) . x eqpoll k #+ m}"; |
312 by (resolve_tac [CollectI] 1); |
312 by (rtac CollectI 1); |
313 by (fast_tac (AC_cs addSIs [PowD RS (PowD RSN (2, Un_least RS PowI))] |
313 by (fast_tac (AC_cs addSIs [PowD RS (PowD RSN (2, Un_least RS PowI))] |
314 addSEs [ltD RSN (2, bij_is_fun RS apply_type RS CollectE)]) 1); |
314 addSEs [ltD RSN (2, bij_is_fun RS apply_type RS CollectE)]) 1); |
315 by (resolve_tac [disj_Un_eqpoll_nat_sum] 1 |
315 by (rtac disj_Un_eqpoll_nat_sum 1 |
316 THEN (TRYALL assume_tac)); |
316 THEN (TRYALL assume_tac)); |
317 by (fast_tac (AC_cs addSIs [equals0I]) 1); |
317 by (fast_tac (AC_cs addSIs [equals0I]) 1); |
318 by (eresolve_tac [ltD RSN (2, bij_is_fun RS apply_type RS CollectE)] 1 |
318 by (eresolve_tac [ltD RSN (2, bij_is_fun RS apply_type RS CollectE)] 1 |
319 THEN (REPEAT (assume_tac 1))); |
319 THEN (REPEAT (assume_tac 1))); |
320 val Un_in_Collect = result(); |
320 val Un_in_Collect = result(); |
369 by (fast_tac (AC_cs addSEs [equalityE, singletonE] |
369 by (fast_tac (AC_cs addSEs [equalityE, singletonE] |
370 addSIs [equalityI, singletonI]) 1); |
370 addSIs [equalityI, singletonI]) 1); |
371 val Diffs_eq_imp_eq = result(); |
371 val Diffs_eq_imp_eq = result(); |
372 |
372 |
373 goal thy "!!A. m:nat ==> ALL A B. A <= B & m lepoll A & B lepoll m --> A=B"; |
373 goal thy "!!A. m:nat ==> ALL A B. A <= B & m lepoll A & B lepoll m --> A=B"; |
374 by (eresolve_tac [nat_induct] 1); |
374 by (etac nat_induct 1); |
375 by (fast_tac (AC_cs addSDs [lepoll_0_is_0] addSIs [equalityI]) 1); |
375 by (fast_tac (AC_cs addSDs [lepoll_0_is_0] addSIs [equalityI]) 1); |
376 by (REPEAT (resolve_tac [allI, impI] 1)); |
376 by (REPEAT (resolve_tac [allI, impI] 1)); |
377 by (REPEAT (eresolve_tac [conjE] 1)); |
377 by (REPEAT (etac conjE 1)); |
378 by (resolve_tac [succ_lepoll_imp_not_empty RS not_emptyE] 1 |
378 by (resolve_tac [succ_lepoll_imp_not_empty RS not_emptyE] 1 |
379 THEN (assume_tac 1)); |
379 THEN (assume_tac 1)); |
380 by (forward_tac [subsetD RS Diff_sing_lepoll] 1 |
380 by (forward_tac [subsetD RS Diff_sing_lepoll] 1 |
381 THEN REPEAT (assume_tac 1)); |
381 THEN REPEAT (assume_tac 1)); |
382 by (forward_tac [lepoll_Diff_sing] 1); |
382 by (forward_tac [lepoll_Diff_sing] 1); |
383 by (REPEAT (eresolve_tac [allE, impE] 1)); |
383 by (REPEAT (eresolve_tac [allE, impE] 1)); |
384 by (resolve_tac [conjI] 1); |
384 by (rtac conjI 1); |
385 by (fast_tac AC_cs 2); |
385 by (fast_tac AC_cs 2); |
386 by (fast_tac (AC_cs addSEs [singletonE] addSIs [singletonI]) 1); |
386 by (fast_tac (AC_cs addSEs [singletonE] addSIs [singletonI]) 1); |
387 by (eresolve_tac [Diffs_eq_imp_eq] 1 |
387 by (etac Diffs_eq_imp_eq 1 |
388 THEN REPEAT (assume_tac 1)); |
388 THEN REPEAT (assume_tac 1)); |
389 val subset_imp_eq_lemma = result(); |
389 val subset_imp_eq_lemma = result(); |
390 |
390 |
391 goal thy "!!A. [| A <= B; m lepoll A; B lepoll m; m:nat |] ==> A=B"; |
391 goal thy "!!A. [| A <= B; m lepoll A; B lepoll m; m:nat |] ==> A=B"; |
392 by (fast_tac (FOL_cs addSDs [subset_imp_eq_lemma]) 1); |
392 by (fast_tac (FOL_cs addSDs [subset_imp_eq_lemma]) 1); |
393 val subset_imp_eq = result(); |
393 val subset_imp_eq = result(); |
394 |
394 |
395 goal thy "!!f. [| f:bij(a, {Y:X. Y eqpoll succ(k)}); k:nat; f`b<=f`y; b<a; \ |
395 goal thy "!!f. [| f:bij(a, {Y:X. Y eqpoll succ(k)}); k:nat; f`b<=f`y; b<a; \ |
396 \ y<a |] ==> b=y"; |
396 \ y<a |] ==> b=y"; |
397 by (dresolve_tac [subset_imp_eq] 1); |
397 by (dtac subset_imp_eq 1); |
398 by (eresolve_tac [nat_succI] 3); |
398 by (etac nat_succI 3); |
399 by (fast_tac (AC_cs addSEs [bij_is_fun RS (ltD RSN (2, apply_type)) RS |
399 by (fast_tac (AC_cs addSEs [bij_is_fun RS (ltD RSN (2, apply_type)) RS |
400 CollectE, eqpoll_sym RS eqpoll_imp_lepoll]) 1); |
400 CollectE, eqpoll_sym RS eqpoll_imp_lepoll]) 1); |
401 by (fast_tac (AC_cs addSEs [bij_is_fun RS (ltD RSN (2, apply_type)) RS |
401 by (fast_tac (AC_cs addSEs [bij_is_fun RS (ltD RSN (2, apply_type)) RS |
402 CollectE, eqpoll_imp_lepoll]) 1); |
402 CollectE, eqpoll_imp_lepoll]) 1); |
403 by (rewrite_goals_tac [bij_def, inj_def]); |
403 by (rewrite_goals_tac [bij_def, inj_def]); |
413 \ ==> EX X:{Y: Pow(A). Y eqpoll succ(k #+ m)}. fa`y <= X & \ |
413 \ ==> EX X:{Y: Pow(A). Y eqpoll succ(k #+ m)}. fa`y <= X & \ |
414 \ (ALL b<a. fa`b <= X --> \ |
414 \ (ALL b<a. fa`b <= X --> \ |
415 \ (ALL T:recfunAC16(f, fa, y, a). ~ fa`b <= T))"; |
415 \ (ALL T:recfunAC16(f, fa, y, a). ~ fa`b <= T))"; |
416 by (eresolve_tac [dbl_Diff_eqpoll RS ex_subset_eqpoll RS bexE] 1 |
416 by (eresolve_tac [dbl_Diff_eqpoll RS ex_subset_eqpoll RS bexE] 1 |
417 THEN REPEAT (assume_tac 1)); |
417 THEN REPEAT (assume_tac 1)); |
418 by (eresolve_tac [Card_is_Ord] 1); |
418 by (etac Card_is_Ord 1); |
419 by (forward_tac [Un_in_Collect] 2 THEN REPEAT (assume_tac 2)); |
419 by (forward_tac [Un_in_Collect] 2 THEN REPEAT (assume_tac 2)); |
420 by (eresolve_tac [CollectE] 4); |
420 by (etac CollectE 4); |
421 by (resolve_tac [bexI] 4); |
421 by (rtac bexI 4); |
422 by (resolve_tac [CollectI] 5); |
422 by (rtac CollectI 5); |
423 by (assume_tac 5); |
423 by (assume_tac 5); |
424 by (eresolve_tac [add_succ RS subst] 5); |
424 by (eresolve_tac [add_succ RS subst] 5); |
425 by (assume_tac 1); |
425 by (assume_tac 1); |
426 by (eresolve_tac [nat_succI] 1); |
426 by (etac nat_succI 1); |
427 by (assume_tac 1); |
427 by (assume_tac 1); |
428 by (resolve_tac [conjI] 1); |
428 by (rtac conjI 1); |
429 by (fast_tac AC_cs 1); |
429 by (fast_tac AC_cs 1); |
430 by (REPEAT (resolve_tac [ballI, impI, oallI, notI] 1)); |
430 by (REPEAT (resolve_tac [ballI, impI, oallI, notI] 1)); |
431 by (dresolve_tac [Int_empty RSN (2, subset_Un_disjoint)] 1 |
431 by (dresolve_tac [Int_empty RSN (2, subset_Un_disjoint)] 1 |
432 THEN REPEAT (assume_tac 1)); |
432 THEN REPEAT (assume_tac 1)); |
433 by (dresolve_tac [bij_imp_arg_eq] 1 THEN REPEAT (assume_tac 1)); |
433 by (dtac bij_imp_arg_eq 1 THEN REPEAT (assume_tac 1)); |
434 by (hyp_subst_tac 1); |
434 by (hyp_subst_tac 1); |
435 by (eresolve_tac [bexI RSN (2, notE)] 1 THEN TRYALL assume_tac); |
435 by (eresolve_tac [bexI RSN (2, notE)] 1 THEN TRYALL assume_tac); |
436 val ex_next_set = result(); |
436 val ex_next_set = result(); |
437 |
437 |
438 (* ********************************************************************** *) |
438 (* ********************************************************************** *) |
448 \ f : bij(a, {Y: Pow(A). Y eqpoll succ(k #+ m)}); \ |
448 \ f : bij(a, {Y: Pow(A). Y eqpoll succ(k #+ m)}); \ |
449 \ ~ (EX Y:recfunAC16(f, fa, y, a). fa`y <= Y) |] \ |
449 \ ~ (EX Y:recfunAC16(f, fa, y, a). fa`y <= Y) |] \ |
450 \ ==> EX c<a. fa`y <= f`c & \ |
450 \ ==> EX c<a. fa`y <= f`c & \ |
451 \ (ALL b<a. fa`b <= f`c --> \ |
451 \ (ALL b<a. fa`b <= f`c --> \ |
452 \ (ALL T:recfunAC16(f, fa, y, a). ~ fa`b <= T))"; |
452 \ (ALL T:recfunAC16(f, fa, y, a). ~ fa`b <= T))"; |
453 by (dresolve_tac [ex_next_set] 1 THEN REPEAT (assume_tac 1)); |
453 by (dtac ex_next_set 1 THEN REPEAT (assume_tac 1)); |
454 by (eresolve_tac [bexE] 1); |
454 by (etac bexE 1); |
455 by (resolve_tac [bij_converse_bij RS bij_is_fun RS apply_type RS ltI RSN |
455 by (resolve_tac [bij_converse_bij RS bij_is_fun RS apply_type RS ltI RSN |
456 (2, oexI)] 1); |
456 (2, oexI)] 1); |
457 by (resolve_tac [right_inverse_bij RS ssubst] 1 |
457 by (resolve_tac [right_inverse_bij RS ssubst] 1 |
458 THEN REPEAT (ares_tac [Card_is_Ord] 1)); |
458 THEN REPEAT (ares_tac [Card_is_Ord] 1)); |
459 val ex_next_Ord = result(); |
459 val ex_next_Ord = result(); |
470 \ --> (EX! Y. Y:F(j) & P(x, Y)); F(j) <= X; \ |
470 \ --> (EX! Y. Y:F(j) & P(x, Y)); F(j) <= X; \ |
471 \ L : X; P(j, L) & (ALL x<a. P(x, L) --> (ALL xa:F(j). ~P(x, xa))) |] \ |
471 \ L : X; P(j, L) & (ALL x<a. P(x, L) --> (ALL xa:F(j). ~P(x, xa))) |] \ |
472 \ ==> F(j) Un {L} <= X & \ |
472 \ ==> F(j) Un {L} <= X & \ |
473 \ (ALL x<a. x le j | (EX xa:F(j) Un {L}. P(x, xa)) --> \ |
473 \ (ALL x<a. x le j | (EX xa:F(j) Un {L}. P(x, xa)) --> \ |
474 \ (EX! Y. Y:F(j) Un {L} & P(x, Y)))"; |
474 \ (EX! Y. Y:F(j) Un {L} & P(x, Y)))"; |
475 by (resolve_tac [conjI] 1); |
475 by (rtac conjI 1); |
476 by (fast_tac (AC_cs addSIs [singleton_subsetI]) 1); |
476 by (fast_tac (AC_cs addSIs [singleton_subsetI]) 1); |
477 by (resolve_tac [oallI] 1); |
477 by (rtac oallI 1); |
478 by (eresolve_tac [oallE] 1 THEN (contr_tac 2)); |
478 by (etac oallE 1 THEN (contr_tac 2)); |
479 by (resolve_tac [impI] 1); |
479 by (rtac impI 1); |
480 by (eresolve_tac [disjE] 1); |
480 by (etac disjE 1); |
481 by (eresolve_tac [leE] 1); |
481 by (etac leE 1); |
482 by (eresolve_tac [disjI1 RSN (2, impE)] 1 THEN (assume_tac 1)); |
482 by (eresolve_tac [disjI1 RSN (2, impE)] 1 THEN (assume_tac 1)); |
483 by (resolve_tac [ex1E] 1 THEN (assume_tac 1)); |
483 by (rtac ex1E 1 THEN (assume_tac 1)); |
484 by (eresolve_tac [ex1_in_Un_sing] 1); |
484 by (etac ex1_in_Un_sing 1); |
485 by (fast_tac AC_cs 1); |
485 by (fast_tac AC_cs 1); |
486 by (fast_tac AC_cs 1); |
486 by (fast_tac AC_cs 1); |
487 by (eresolve_tac [bexE] 1); |
487 by (etac bexE 1); |
488 by (eresolve_tac [UnE] 1); |
488 by (etac UnE 1); |
489 by (fast_tac (AC_cs addSEs [ex1_in_Un_sing]) 1); |
489 by (fast_tac (AC_cs addSEs [ex1_in_Un_sing]) 1); |
490 by (fast_tac AC_cs 1); |
490 by (fast_tac AC_cs 1); |
491 val lemma8 = result(); |
491 val lemma8 = result(); |
492 |
492 |
493 (* ********************************************************************** *) |
493 (* ********************************************************************** *) |
500 \ fa : bij(a, {Y: Pow(A) . Y eqpoll succ(k)}); \ |
500 \ fa : bij(a, {Y: Pow(A) . Y eqpoll succ(k)}); \ |
501 \ ~Finite(a); Card(a); A eqpoll a; k : nat; m : nat |] \ |
501 \ ~Finite(a); Card(a); A eqpoll a; k : nat; m : nat |] \ |
502 \ ==> recfunAC16(f, fa, b, a) <= {X: Pow(A) . X eqpoll succ(k #+ m)} & \ |
502 \ ==> recfunAC16(f, fa, b, a) <= {X: Pow(A) . X eqpoll succ(k #+ m)} & \ |
503 \ (ALL x<a. x < b | (EX Y:recfunAC16(f, fa, b, a). fa ` x <= Y) --> \ |
503 \ (ALL x<a. x < b | (EX Y:recfunAC16(f, fa, b, a). fa ` x <= Y) --> \ |
504 \ (EX! Y. Y:recfunAC16(f, fa, b, a) & fa ` x <= Y))"; |
504 \ (EX! Y. Y:recfunAC16(f, fa, b, a) & fa ` x <= Y))"; |
505 by (resolve_tac [impE] 1 THEN (REPEAT (assume_tac 2))); |
505 by (rtac impE 1 THEN (REPEAT (assume_tac 2))); |
506 by (eresolve_tac [lt_Ord RS trans_induct] 1); |
506 by (eresolve_tac [lt_Ord RS trans_induct] 1); |
507 by (resolve_tac [impI] 1); |
507 by (rtac impI 1); |
508 by (eresolve_tac [Ord_cases] 1); |
508 by (etac Ord_cases 1); |
509 (* case 0 *) |
509 (* case 0 *) |
510 by (asm_simp_tac (AC_ss addsimps [recfunAC16_0]) 1); |
510 by (asm_simp_tac (AC_ss addsimps [recfunAC16_0]) 1); |
511 by (fast_tac (AC_cs addSEs [ltE]) 1); |
511 by (fast_tac (AC_cs addSEs [ltE]) 1); |
512 (* case Limit *) |
512 (* case Limit *) |
513 by (asm_simp_tac (AC_ss addsimps [recfunAC16_Limit]) 2); |
513 by (asm_simp_tac (AC_ss addsimps [recfunAC16_Limit]) 2); |
514 by (eresolve_tac [lemma5] 2 THEN (REPEAT (assume_tac 2))); |
514 by (etac lemma5 2 THEN (REPEAT (assume_tac 2))); |
515 by (fast_tac (FOL_cs addSEs [recfunAC16_mono]) 2); |
515 by (fast_tac (FOL_cs addSEs [recfunAC16_mono]) 2); |
516 (* case succ *) |
516 (* case succ *) |
517 by (hyp_subst_tac 1); |
517 by (hyp_subst_tac 1); |
518 by (eresolve_tac [lemma6 RS conjE] 1 THEN (assume_tac 1)); |
518 by (eresolve_tac [lemma6 RS conjE] 1 THEN (assume_tac 1)); |
519 by (asm_simp_tac (AC_ss addsimps [recfunAC16_succ]) 1); |
519 by (asm_simp_tac (AC_ss addsimps [recfunAC16_succ]) 1); |
520 by (resolve_tac [conjI RS (expand_if RS iffD2)] 1); |
520 by (resolve_tac [conjI RS (expand_if RS iffD2)] 1); |
521 by (eresolve_tac [lemma7] 1 THEN (REPEAT (assume_tac 1))); |
521 by (etac lemma7 1 THEN (REPEAT (assume_tac 1))); |
522 by (resolve_tac [impI] 1); |
522 by (rtac impI 1); |
523 by (resolve_tac [ex_next_Ord RS oexE] 1 |
523 by (resolve_tac [ex_next_Ord RS oexE] 1 |
524 THEN REPEAT (ares_tac [le_refl RS lt_trans] 1)); |
524 THEN REPEAT (ares_tac [le_refl RS lt_trans] 1)); |
525 by (eresolve_tac [lemma8] 1 THEN (assume_tac 1)); |
525 by (etac lemma8 1 THEN (assume_tac 1)); |
526 by (resolve_tac [bij_is_fun RS apply_type] 1 THEN (assume_tac 1)); |
526 by (resolve_tac [bij_is_fun RS apply_type] 1 THEN (assume_tac 1)); |
527 by (eresolve_tac [Least_le RS lt_trans2 RS ltD] 1 |
527 by (eresolve_tac [Least_le RS lt_trans2 RS ltD] 1 |
528 THEN REPEAT (ares_tac [lt_Ord, succ_leI] 1)); |
528 THEN REPEAT (ares_tac [lt_Ord, succ_leI] 1)); |
529 by (eresolve_tac [lt_Ord RSN (2, LeastI)] 1 THEN (assume_tac 1)); |
529 by (eresolve_tac [lt_Ord RSN (2, LeastI)] 1 THEN (assume_tac 1)); |
530 val main_induct = result(); |
530 val main_induct = result(); |
538 "[| (!!b. b<a ==> F(b) <= S & (ALL x<a. (x<b | (EX Y:F(b). f`x <= Y)) \ |
538 "[| (!!b. b<a ==> F(b) <= S & (ALL x<a. (x<b | (EX Y:F(b). f`x <= Y)) \ |
539 \ --> (EX! Y. Y : F(b) & f`x <= Y))); \ |
539 \ --> (EX! Y. Y : F(b) & f`x <= Y))); \ |
540 \ f:a->f``(a); Limit(a); (!!i j. i le j ==> F(i) <= F(j)) |] \ |
540 \ f:a->f``(a); Limit(a); (!!i j. i le j ==> F(i) <= F(j)) |] \ |
541 \ ==> (UN j<a. F(j)) <= S & \ |
541 \ ==> (UN j<a. F(j)) <= S & \ |
542 \ (ALL x:f``a. EX! Y. Y : (UN j<a. F(j)) & x <= Y)"; |
542 \ (ALL x:f``a. EX! Y. Y : (UN j<a. F(j)) & x <= Y)"; |
543 by (resolve_tac [conjI] 1); |
543 by (rtac conjI 1); |
544 by (resolve_tac [subsetI] 1); |
544 by (rtac subsetI 1); |
545 by (eresolve_tac [OUN_E] 1); |
545 by (etac OUN_E 1); |
546 by (dresolve_tac [prem1] 1); |
546 by (dtac prem1 1); |
547 by (fast_tac AC_cs 1); |
547 by (fast_tac AC_cs 1); |
548 by (resolve_tac [ballI] 1); |
548 by (rtac ballI 1); |
549 by (eresolve_tac [imageE] 1); |
549 by (etac imageE 1); |
550 by (dresolve_tac [prem3 RS Limit_is_Ord RSN (2, ltI) RS |
550 by (dresolve_tac [prem3 RS Limit_is_Ord RSN (2, ltI) RS |
551 (prem3 RS Limit_has_succ)] 1); |
551 (prem3 RS Limit_has_succ)] 1); |
552 by (forward_tac [prem1] 1); |
552 by (forward_tac [prem1] 1); |
553 by (eresolve_tac [conjE] 1); |
553 by (etac conjE 1); |
554 by (dresolve_tac [leI RS succ_leE RSN (2, ospec)] 1 THEN (assume_tac 1)); |
554 by (dresolve_tac [leI RS succ_leE RSN (2, ospec)] 1 THEN (assume_tac 1)); |
555 by (eresolve_tac [impE] 1); |
555 by (etac impE 1); |
556 by (fast_tac (AC_cs addSEs [leI RS succ_leE RS lt_Ord RS le_refl]) 1); |
556 by (fast_tac (AC_cs addSEs [leI RS succ_leE RS lt_Ord RS le_refl]) 1); |
557 by (dresolve_tac [prem2 RSN (2, apply_equality)] 1); |
557 by (dresolve_tac [prem2 RSN (2, apply_equality)] 1); |
558 by (REPEAT (eresolve_tac [conjE, ex1E] 1)); |
558 by (REPEAT (eresolve_tac [conjE, ex1E] 1)); |
559 by (resolve_tac [ex1I] 1); |
559 by (rtac ex1I 1); |
560 by (fast_tac (AC_cs addSIs [OUN_I]) 1); |
560 by (fast_tac (AC_cs addSIs [OUN_I]) 1); |
561 by (REPEAT (eresolve_tac [conjE, OUN_E] 1)); |
561 by (REPEAT (eresolve_tac [conjE, OUN_E] 1)); |
562 by (eresolve_tac [lt_Ord RSN (2, lt_Ord RS Ord_linear_le)] 1 THEN (assume_tac 1)); |
562 by (eresolve_tac [lt_Ord RSN (2, lt_Ord RS Ord_linear_le)] 1 THEN (assume_tac 1)); |
563 by (dresolve_tac [prem4 RS subsetD] 2 THEN (assume_tac 2)); |
563 by (dresolve_tac [prem4 RS subsetD] 2 THEN (assume_tac 2)); |
564 by (fast_tac FOL_cs 2); |
564 by (fast_tac FOL_cs 2); |
565 by (forward_tac [prem1] 1); |
565 by (forward_tac [prem1] 1); |
566 by (forward_tac [succ_leE] 1); |
566 by (forward_tac [succ_leE] 1); |
567 by (dresolve_tac [prem4 RS subsetD] 1 THEN (assume_tac 1)); |
567 by (dresolve_tac [prem4 RS subsetD] 1 THEN (assume_tac 1)); |
568 by (eresolve_tac [conjE] 1); |
568 by (etac conjE 1); |
569 by (dresolve_tac [lt_trans RSN (2, ospec)] 1 THEN (TRYALL assume_tac)); |
569 by (dresolve_tac [lt_trans RSN (2, ospec)] 1 THEN (TRYALL assume_tac)); |
570 by (dresolve_tac [disjI1 RSN (2, mp)] 1 THEN (assume_tac 1)); |
570 by (dresolve_tac [disjI1 RSN (2, mp)] 1 THEN (assume_tac 1)); |
571 by (eresolve_tac [ex1_two_eq] 1); |
571 by (etac ex1_two_eq 1); |
572 by (REPEAT (fast_tac FOL_cs 1)); |
572 by (REPEAT (fast_tac FOL_cs 1)); |
573 val lemma_simp_induct = result(); |
573 val lemma_simp_induct = result(); |
574 |
574 |
575 (* ********************************************************************** *) |
575 (* ********************************************************************** *) |
576 (* The target theorem *) |
576 (* The target theorem *) |
577 (* ********************************************************************** *) |
577 (* ********************************************************************** *) |
578 |
578 |
579 goalw thy [AC16_def] |
579 goalw thy [AC16_def] |
580 "!!n k. [| WO2; 0<m; k:nat; m:nat |] ==> AC16(k #+ m,k)"; |
580 "!!n k. [| WO2; 0<m; k:nat; m:nat |] ==> AC16(k #+ m,k)"; |
581 by (resolve_tac [allI] 1); |
581 by (rtac allI 1); |
582 by (resolve_tac [impI] 1); |
582 by (rtac impI 1); |
583 by (forward_tac [WO2_infinite_subsets_eqpoll_X] 1 THEN (REPEAT (assume_tac 1))); |
583 by (forward_tac [WO2_infinite_subsets_eqpoll_X] 1 THEN (REPEAT (assume_tac 1))); |
584 by (forw_inst_tac [("n","k #+ m")] (WO2_infinite_subsets_eqpoll_X) 1 |
584 by (forw_inst_tac [("n","k #+ m")] (WO2_infinite_subsets_eqpoll_X) 1 |
585 THEN (REPEAT (ares_tac [add_type] 1))); |
585 THEN (REPEAT (ares_tac [add_type] 1))); |
586 by (forward_tac [WO2_imp_ex_Card] 1); |
586 by (forward_tac [WO2_imp_ex_Card] 1); |
587 by (REPEAT (eresolve_tac [exE,conjE] 1)); |
587 by (REPEAT (eresolve_tac [exE,conjE] 1)); |
588 by (dresolve_tac [eqpoll_trans RS eqpoll_sym RS (eqpoll_def RS |
588 by (dresolve_tac [eqpoll_trans RS eqpoll_sym RS (eqpoll_def RS |
589 def_imp_iff RS iffD1)] 1 THEN (assume_tac 1)); |
589 def_imp_iff RS iffD1)] 1 THEN (assume_tac 1)); |
590 by (dresolve_tac [eqpoll_trans RS eqpoll_sym RS (eqpoll_def RS |
590 by (dresolve_tac [eqpoll_trans RS eqpoll_sym RS (eqpoll_def RS |
591 def_imp_iff RS iffD1)] 1 THEN (assume_tac 1)); |
591 def_imp_iff RS iffD1)] 1 THEN (assume_tac 1)); |
592 by (REPEAT (eresolve_tac [exE] 1)); |
592 by (REPEAT (etac exE 1)); |
593 by (res_inst_tac [("x","UN j<a. recfunAC16(fa,f,j,a)")] exI 1); |
593 by (res_inst_tac [("x","UN j<a. recfunAC16(fa,f,j,a)")] exI 1); |
594 by (res_inst_tac [("P","%z. ?Y & (ALL x:z. ?Z(x))")] |
594 by (res_inst_tac [("P","%z. ?Y & (ALL x:z. ?Z(x))")] |
595 (bij_is_surj RS surj_image_eq RS subst) 1 |
595 (bij_is_surj RS surj_image_eq RS subst) 1 |
596 THEN (assume_tac 1)); |
596 THEN (assume_tac 1)); |
597 by (resolve_tac [lemma_simp_induct] 1); |
597 by (rtac lemma_simp_induct 1); |
598 by (eresolve_tac [bij_is_fun RS surj_image RS surj_is_fun] 2); |
598 by (eresolve_tac [bij_is_fun RS surj_image RS surj_is_fun] 2); |
599 by (eresolve_tac [eqpoll_imp_lepoll RS lepoll_infinite RS |
599 by (eresolve_tac [eqpoll_imp_lepoll RS lepoll_infinite RS |
600 infinite_Card_is_InfCard RS InfCard_is_Limit] 2 |
600 infinite_Card_is_InfCard RS InfCard_is_Limit] 2 |
601 THEN REPEAT (assume_tac 2)); |
601 THEN REPEAT (assume_tac 2)); |
602 by (eresolve_tac [recfunAC16_mono] 2); |
602 by (etac recfunAC16_mono 2); |
603 by (resolve_tac [main_induct] 1 |
603 by (rtac main_induct 1 |
604 THEN REPEAT (ares_tac [eqpoll_imp_lepoll RS lepoll_infinite] 1)); |
604 THEN REPEAT (ares_tac [eqpoll_imp_lepoll RS lepoll_infinite] 1)); |
605 qed "WO2_AC16"; |
605 qed "WO2_AC16"; |