1196
|
1 |
(* Title: ZF/AC/WO2_AC16.ML
|
|
2 |
ID: $Id$
|
|
3 |
Author: Krzysztof Gr`abczewski
|
|
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 |
|
|
17 |
(* ********************************************************************** *)
|
|
18 |
(* case of limit ordinal *)
|
|
19 |
(* ********************************************************************** *)
|
|
20 |
|
|
21 |
goal thy "!!Z. [| ALL y<x. ALL z<a. z<y | (EX 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; \
|
|
24 |
\ V: F(i); f(z)<=V; W:F(j); f(z)<=W |] \
|
|
25 |
\ ==> V = W";
|
|
26 |
by (REPEAT (eresolve_tac [asm_rl, allE, impE] 1));
|
|
27 |
by (dresolve_tac [subsetD] 1 THEN (assume_tac 1));
|
|
28 |
by (REPEAT (dresolve_tac [ospec] 1 THEN (assume_tac 1)));
|
|
29 |
by (eresolve_tac [disjI2 RSN (2, impE)] 1);
|
|
30 |
by (fast_tac (FOL_cs addSIs [bexI]) 1);
|
|
31 |
by (eresolve_tac [ex1_two_eq] 1 THEN (REPEAT (ares_tac [conjI] 1)));
|
|
32 |
val lemma3_1 = result();
|
|
33 |
|
|
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); \
|
|
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 |] \
|
|
38 |
\ ==> V = W";
|
|
39 |
by (res_inst_tac [("j","j")] (lt_Ord RS (lt_Ord RSN (2, Ord_linear_le))) 1
|
|
40 |
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)));
|
|
43 |
val lemma3 = result();
|
|
44 |
|
|
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) --> \
|
|
47 |
\ (EX! Y. Y : F(y) & fa(x) <= Y)); x < a |] \
|
|
48 |
\ ==> ALL y<x. ALL z<a. z < y | (EX Y:F(y). fa(z) <= Y) --> \
|
|
49 |
\ (EX! Y. Y : F(y) & fa(z) <= Y)";
|
|
50 |
by (REPEAT (resolve_tac [oallI, impI] 1));
|
|
51 |
by (dresolve_tac [ltD RSN (2, bspec)] 1 THEN (assume_tac 1));
|
|
52 |
by (eresolve_tac [lt_trans RSN (2, impE)] 1 THEN (REPEAT (assume_tac 1)));
|
|
53 |
by (fast_tac (FOL_cs addSEs [oallE]) 1);
|
|
54 |
val lemma4 = result();
|
|
55 |
|
|
56 |
goal thy "!!a. [| ALL y:x. y < a --> F(y) <= X & \
|
|
57 |
\ (ALL x<a. x < y | (EX 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) |] \
|
|
60 |
\ ==> (UN x<x. F(x)) <= 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))";
|
|
63 |
by (resolve_tac [conjI] 1);
|
|
64 |
by (resolve_tac [subsetI] 1);
|
|
65 |
by (eresolve_tac [OUN_E] 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)));
|
|
68 |
by (fast_tac AC_cs 1);
|
|
69 |
by (dresolve_tac [lemma4] 1 THEN (assume_tac 1));
|
|
70 |
by (resolve_tac [oallI] 1);
|
|
71 |
by (resolve_tac [impI] 1);
|
|
72 |
by (eresolve_tac [disjE] 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));
|
|
75 |
by (eresolve_tac [lt_Ord RS le_refl RSN (2, disjI1 RSN (2, impE))] 1
|
|
76 |
THEN (assume_tac 1));
|
|
77 |
by (REPEAT (eresolve_tac [ex1E, conjE] 1));
|
|
78 |
by (resolve_tac [ex1I] 1);
|
|
79 |
by (resolve_tac [conjI] 1 THEN (assume_tac 2));
|
|
80 |
by (eresolve_tac [Limit_has_succ RS OUN_I] 1 THEN (TRYALL assume_tac));
|
|
81 |
by (REPEAT (eresolve_tac [conjE, OUN_E] 1));
|
|
82 |
by (eresolve_tac [lemma3] 1 THEN (TRYALL assume_tac));
|
|
83 |
by (eresolve_tac [Limit_has_succ] 1 THEN (assume_tac 1));
|
|
84 |
by (eresolve_tac [bexE] 1);
|
|
85 |
by (resolve_tac [ex1I] 1);
|
|
86 |
by (eresolve_tac [conjI] 1 THEN (assume_tac 1));
|
|
87 |
by (REPEAT (eresolve_tac [conjE, OUN_E] 1));
|
|
88 |
by (eresolve_tac [lemma3] 1 THEN (TRYALL assume_tac));
|
|
89 |
val lemma5 = result();
|
|
90 |
|
|
91 |
(* ********************************************************************** *)
|
|
92 |
(* case of successor ordinal *)
|
|
93 |
(* ********************************************************************** *)
|
|
94 |
|
|
95 |
(*
|
|
96 |
First quite complicated proof of the fact used in the recursive construction
|
|
97 |
of the family T_gamma (WO2 ==> AC16(k #+ m, k)) - the fact that at any stage
|
|
98 |
gamma the set (s - Union(...) - k_gamma) is equipollent to s
|
|
99 |
(Rubin & Rubin page 15).
|
|
100 |
*)
|
|
101 |
|
|
102 |
(* ********************************************************************** *)
|
|
103 |
(* dbl_Diff_eqpoll_Card *)
|
|
104 |
(* ********************************************************************** *)
|
|
105 |
|
|
106 |
goal thy "!!A. [| A eqpoll a; Card(a); ~Finite(a); B lesspoll a; \
|
|
107 |
\ C lesspoll a |] ==> A - B - C eqpoll a";
|
|
108 |
by (resolve_tac [Diff_lesspoll_eqpoll_Card] 1 THEN (REPEAT (assume_tac 1)));
|
|
109 |
by (resolve_tac [Diff_lesspoll_eqpoll_Card] 1 THEN (REPEAT (assume_tac 1)));
|
|
110 |
val dbl_Diff_eqpoll_Card = result();
|
|
111 |
|
|
112 |
(* ********************************************************************** *)
|
|
113 |
(* Case of finite ordinals *)
|
|
114 |
(* ********************************************************************** *)
|
|
115 |
|
|
116 |
goalw thy [lesspoll_def]
|
|
117 |
"!!X. [| Finite(X); ~Finite(a); Ord(a) |] ==> X lesspoll a";
|
|
118 |
by (resolve_tac [conjI] 1);
|
|
119 |
by (dresolve_tac [nat_le_infinite_Ord RS le_imp_lepoll] 1
|
|
120 |
THEN (assume_tac 1));
|
|
121 |
by (rewrite_goals_tac [Finite_def]);
|
|
122 |
by (fast_tac (AC_cs addSEs [eqpoll_sym RS eqpoll_trans]) 2);
|
|
123 |
by (resolve_tac [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
|
|
125 |
subset_imp_lepoll RSN (2, eqpoll_imp_lepoll RS lepoll_trans)]) 1);
|
|
126 |
val Finite_lesspoll_infinite_Ord = result();
|
|
127 |
|
|
128 |
goal thy "!!x. x:X ==> Union(X) = Union(X-{x}) Un x";
|
|
129 |
by (fast_tac (AC_cs addIs [equalityI] addSIs [singletonI]
|
|
130 |
addSEs [singletonE]) 1);
|
|
131 |
val Union_eq_Un_Diff = result();
|
|
132 |
|
|
133 |
goal thy "!!n. n:nat ==> ALL X. X eqpoll n --> (ALL x:X. Finite(x)) \
|
|
134 |
\ --> Finite(Union(X))";
|
|
135 |
by (eresolve_tac [nat_induct] 1);
|
|
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);
|
|
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));
|
|
140 |
by (res_inst_tac [("P","%z. Finite(z)")] (Union_eq_Un_Diff RS ssubst) 1
|
|
141 |
THEN (assume_tac 1));
|
|
142 |
by (resolve_tac [Finite_Un] 1);
|
|
143 |
by (fast_tac AC_cs 2);
|
|
144 |
by (fast_tac (AC_cs addSIs [Diff_sing_eqpoll]) 1);
|
|
145 |
val Finite_Union_lemma = result();
|
|
146 |
|
|
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);
|
|
149 |
by (dresolve_tac [Finite_Union_lemma] 1);
|
|
150 |
by (fast_tac AC_cs 1);
|
|
151 |
val Finite_Union = result();
|
|
152 |
|
|
153 |
goalw thy [Finite_def] "!!x. [| x lepoll n; n:nat |] ==> Finite(x)";
|
|
154 |
by (fast_tac (AC_cs
|
|
155 |
addEs [nat_into_Ord RSN (2, lepoll_imp_ex_le_eqpoll) RS exE,
|
|
156 |
Ord_nat RSN (2, ltI) RSN (2, lt_trans1) RS ltD]) 1);
|
|
157 |
val lepoll_nat_num_imp_Finite = result();
|
|
158 |
|
|
159 |
goal thy "!!X. [| ALL x:X. x lepoll n & x <= T; well_ord(T, R); X lepoll b; \
|
|
160 |
\ b<a; ~Finite(a); Card(a); n:nat |] \
|
|
161 |
\ ==> Union(X) lesspoll a";
|
|
162 |
by (excluded_middle_tac "Finite(X)" 1);
|
|
163 |
by (resolve_tac [Card_is_Ord RSN (3, Finite_lesspoll_infinite_Ord)] 2
|
|
164 |
THEN (REPEAT (assume_tac 3)));
|
|
165 |
by (fast_tac (AC_cs addSEs [lepoll_nat_num_imp_Finite]
|
|
166 |
addSIs [Finite_Union]) 2);
|
|
167 |
by (dresolve_tac [lt_Ord RSN (2, lepoll_imp_ex_le_eqpoll)] 1 THEN (assume_tac 1));
|
|
168 |
by (REPEAT (eresolve_tac [exE, conjE] 1));
|
|
169 |
by (forward_tac [eqpoll_imp_lepoll RS lepoll_infinite] 1 THEN (assume_tac 1));
|
|
170 |
by (eresolve_tac [eqpoll_sym RS (eqpoll_def RS def_imp_iff RS iffD1) RS
|
|
171 |
exE] 1);
|
|
172 |
by (forward_tac [bij_is_surj RS surj_image_eq] 1);
|
|
173 |
by (dresolve_tac [[bij_is_fun, subset_refl] MRS image_fun] 1);
|
|
174 |
by (dresolve_tac [sym RS trans] 1 THEN (assume_tac 1));
|
|
175 |
by (hyp_subst_tac 1);
|
|
176 |
by (resolve_tac [lepoll_lesspoll_lesspoll] 1);
|
|
177 |
by (eresolve_tac [lt_trans1 RSN (2, lt_Card_imp_lesspoll)] 1
|
|
178 |
THEN REPEAT (assume_tac 1));
|
|
179 |
by (resolve_tac [UN_lepoll] 1
|
|
180 |
THEN (TRYALL (fast_tac (AC_cs addSEs [lt_Ord]))));
|
|
181 |
val Union_lesspoll = result();
|
|
182 |
|
|
183 |
(* ********************************************************************** *)
|
|
184 |
(* recfunAC16_lepoll_index *)
|
|
185 |
(* ********************************************************************** *)
|
|
186 |
|
|
187 |
goal thy "A Un {a} = cons(a, A)";
|
|
188 |
by (fast_tac (AC_cs addSIs [singletonI]
|
|
189 |
addSEs [singletonE] addIs [equalityI]) 1);
|
|
190 |
val Un_sing_eq_cons = result();
|
|
191 |
|
|
192 |
goal thy "!!A. A lepoll B ==> A Un {a} lepoll succ(B)";
|
|
193 |
by (asm_simp_tac (AC_ss addsimps [Un_sing_eq_cons, succ_def]) 1);
|
|
194 |
by (eresolve_tac [mem_not_refl RSN (2, cons_lepoll_cong)] 1);
|
|
195 |
val Un_lepoll_succ = result();
|
|
196 |
|
|
197 |
goal thy "!!a. Ord(a) ==> F(a) - (UN b<succ(a). F(b)) = 0";
|
|
198 |
by (fast_tac (AC_cs addSIs [OUN_I, le_refl] addIs [equalityI]) 1);
|
|
199 |
val Diff_UN_succ_empty = result();
|
|
200 |
|
|
201 |
goal thy "!!a. Ord(a) ==> F(a) Un X - (UN b<succ(a). F(b)) <= X";
|
|
202 |
by (fast_tac (AC_cs addSIs [OUN_I, le_refl]) 1);
|
|
203 |
val Diff_UN_succ_subset = result();
|
|
204 |
|
|
205 |
goal thy "!!x. Ord(x) ==> \
|
|
206 |
\ recfunAC16(f, g, x, a) - (UN i<x. recfunAC16(f, g, i, a)) lepoll 1";
|
|
207 |
by (eresolve_tac [Ord_cases] 1);
|
|
208 |
by (asm_simp_tac (AC_ss addsimps [recfunAC16_0,
|
|
209 |
empty_subsetI RS subset_imp_lepoll]) 1);
|
|
210 |
by (asm_simp_tac (AC_ss addsimps [recfunAC16_Limit,
|
|
211 |
Diff_cancel, empty_subsetI RS subset_imp_lepoll]) 2);
|
|
212 |
by (asm_simp_tac (AC_ss addsimps [recfunAC16_succ]) 1);
|
|
213 |
by (resolve_tac [conjI RS (expand_if RS iffD2)] 1);
|
|
214 |
by (fast_tac (AC_cs addSIs [empty_subsetI RS subset_imp_lepoll]
|
|
215 |
addSEs [Diff_UN_succ_empty RS ssubst]) 1);
|
|
216 |
by (fast_tac (AC_cs addSEs [Diff_UN_succ_subset RS subset_imp_lepoll RS
|
|
217 |
(singleton_eqpoll_1 RS eqpoll_imp_lepoll RSN (2, lepoll_trans))]) 1);
|
|
218 |
val recfunAC16_Diff_lepoll_1 = result();
|
|
219 |
|
|
220 |
goal thy "!!z. [| z : F(x); Ord(x) |] \
|
|
221 |
\ ==> z:F(LEAST i. z:F(i)) - (UN j<(LEAST i. z:F(i)). F(j))";
|
|
222 |
by (fast_tac (AC_cs addEs [less_LeastE] addSEs [OUN_E, LeastI]) 1);
|
|
223 |
val in_Least_Diff = result();
|
|
224 |
|
|
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)) |] \
|
|
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));
|
|
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));
|
|
231 |
by (resolve_tac [oexI] 1);
|
|
232 |
by (resolve_tac [conjI] 1 THEN (assume_tac 2));
|
|
233 |
by (eresolve_tac [subst] 1 THEN (assume_tac 1));
|
|
234 |
by (eresolve_tac [lt_Ord RSN (2, Least_le) RS lt_trans1] 1
|
|
235 |
THEN (REPEAT (assume_tac 1)));
|
|
236 |
val Least_eq_imp_ex = result();
|
|
237 |
|
|
238 |
goal thy "!!A. [| A lepoll 1; a:A; b:A |] ==> a=b";
|
|
239 |
by (fast_tac (AC_cs addSDs [lepoll_1_is_sing] addSEs [singletonE]) 1);
|
|
240 |
val two_in_lepoll_1 = result();
|
|
241 |
|
|
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";
|
|
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);
|
|
246 |
by (rewrite_goals_tac [inj_def]);
|
|
247 |
by (resolve_tac [CollectI] 1);
|
|
248 |
by (resolve_tac [lam_type] 1);
|
|
249 |
by (eresolve_tac [OUN_E] 1);
|
|
250 |
by (eresolve_tac [Least_in_Ord] 1);
|
|
251 |
by (eresolve_tac [ltD] 1);
|
|
252 |
by (eresolve_tac [lt_Ord2] 1);
|
|
253 |
by (resolve_tac [ballI] 1);
|
|
254 |
by (resolve_tac [ballI] 1);
|
|
255 |
by (asm_simp_tac AC_ss 1);
|
|
256 |
by (resolve_tac [impI] 1);
|
|
257 |
by (dresolve_tac [Least_eq_imp_ex] 1 THEN (REPEAT (assume_tac 1)));
|
|
258 |
by (fast_tac (AC_cs addSEs [two_in_lepoll_1]) 1);
|
|
259 |
val UN_lepoll_index = result();
|
|
260 |
|
|
261 |
goal thy "!!y. Ord(y) ==> recfunAC16(f, fa, y, a) lepoll y";
|
|
262 |
by (eresolve_tac [trans_induct] 1);
|
|
263 |
by (eresolve_tac [Ord_cases] 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);
|
|
266 |
by (fast_tac (AC_cs addIs [conjI RS (expand_if RS iffD2)]
|
|
267 |
addSDs [succI1 RSN (2, bspec)]
|
|
268 |
addSEs [subset_succI RS subset_imp_lepoll RSN (2, lepoll_trans),
|
|
269 |
Un_lepoll_succ]) 1);
|
|
270 |
by (asm_simp_tac (AC_ss addsimps [recfunAC16_Limit]) 1);
|
|
271 |
by (fast_tac (AC_cs addSEs [lt_Ord RS recfunAC16_Diff_lepoll_1]
|
|
272 |
addSIs [UN_lepoll_index]) 1);
|
|
273 |
val recfunAC16_lepoll_index = result();
|
|
274 |
|
|
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 |] \
|
|
277 |
\ ==> Union(recfunAC16(f,g,y,a)) lesspoll a";
|
|
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));
|
|
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
|
|
282 |
well_ord_rvimage] 2 THEN (assume_tac 2));
|
|
283 |
by (fast_tac (AC_cs addSEs [eqpoll_imp_lepoll]) 1);
|
|
284 |
val Union_recfunAC16_lesspoll = result();
|
|
285 |
|
|
286 |
goal thy
|
|
287 |
"!!a. [| recfunAC16(f, fa, y, a) <= {X: Pow(A) . X eqpoll succ(k #+ m)}; \
|
|
288 |
\ Card(a); ~ Finite(a); A eqpoll a; \
|
|
289 |
\ k : nat; m : nat; y<a; \
|
|
290 |
\ fa : bij(a, {Y: Pow(A). Y eqpoll succ(k)}) |] \
|
|
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));
|
|
293 |
by (resolve_tac [Union_recfunAC16_lesspoll] 1 THEN (REPEAT (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
|
|
296 |
iffD2)) RS (Card_is_Ord RSN (3, Finite_lesspoll_infinite_Ord))] 1
|
|
297 |
THEN (TRYALL assume_tac));
|
|
298 |
by (eresolve_tac [ltD RSN (2, bij_is_fun RS apply_type) RS CollectE] 1
|
|
299 |
THEN (TRYALL assume_tac));
|
|
300 |
val dbl_Diff_eqpoll = result();
|
|
301 |
|
|
302 |
(* back to the proof *)
|
|
303 |
|
|
304 |
val disj_Un_eqpoll_nat_sum = disj_Un_eqpoll_sum RS (
|
|
305 |
sum_eqpoll_cong RSN (2,
|
|
306 |
nat_sum_eqpoll_sum RSN (3,
|
|
307 |
eqpoll_trans RS eqpoll_trans))) |> standard;
|
|
308 |
|
|
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 |] \
|
|
311 |
\ ==> fa ` i Un x : {x: Pow(A) . x eqpoll k #+ m}";
|
|
312 |
by (resolve_tac [CollectI] 1);
|
|
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);
|
|
315 |
by (resolve_tac [disj_Un_eqpoll_nat_sum] 1
|
|
316 |
THEN (TRYALL assume_tac));
|
|
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
|
|
319 |
THEN (REPEAT (assume_tac 1)));
|
|
320 |
val Un_in_Collect = result();
|
|
321 |
|
|
322 |
(* ********************************************************************** *)
|
|
323 |
(* Lemmas simplifying assumptions *)
|
|
324 |
(* ********************************************************************** *)
|
|
325 |
|
|
326 |
goal thy "!!j. [| ALL y:succ(j). y<a --> F(y)<=X & (ALL x<a. x<y | P(x,y) \
|
|
327 |
\ --> Q(x,y)); succ(j)<a |] \
|
|
328 |
\ ==> F(j)<=X & (ALL x<a. x<j | P(x,j) --> Q(x,j))";
|
|
329 |
by (dresolve_tac [succI1 RSN (2, bspec)] 1);
|
|
330 |
by (eresolve_tac [impE] 1);
|
|
331 |
by (resolve_tac [lt_Ord RS (succI1 RS ltI RS lt_Ord RS le_refl) RS lt_trans] 1
|
|
332 |
THEN (REPEAT (assume_tac 1)));
|
|
333 |
val lemma6 = result();
|
|
334 |
|
|
335 |
goal thy "!!j. [| F(j)<=X; (ALL x<a. x<j | P(x,j) --> Q(x,j)); succ(j)<a |] \
|
|
336 |
\ ==> P(j,j) --> F(j) <= X & (ALL x<a. x le j | P(x,j) --> Q(x,j))";
|
|
337 |
by (fast_tac (AC_cs addSEs [leE]) 1);
|
|
338 |
val lemma7 = result();
|
|
339 |
|
|
340 |
(* ********************************************************************** *)
|
|
341 |
(* Lemmas needded to prove ex_next_set which means that for any successor *)
|
|
342 |
(* ordinal there is a set satisfying certain properties *)
|
|
343 |
(* ********************************************************************** *)
|
|
344 |
|
|
345 |
goal thy "!!A. [| A eqpoll a; ~ Finite(a); Ord(a); m:nat |] \
|
|
346 |
\ ==> EX X:Pow(A). X eqpoll m";
|
|
347 |
by (eresolve_tac [Ord_nat RSN (2, ltI) RS
|
|
348 |
(nat_le_infinite_Ord RSN (2, lt_trans2)) RS
|
|
349 |
leI RS le_imp_lepoll RS
|
|
350 |
((eqpoll_sym RS eqpoll_imp_lepoll) RSN (2, lepoll_trans)) RS
|
|
351 |
lepoll_imp_eqpoll_subset RS exE] 1
|
|
352 |
THEN REPEAT (assume_tac 1));
|
|
353 |
by (fast_tac (AC_cs addSEs [eqpoll_sym]) 1);
|
|
354 |
val ex_subset_eqpoll = result();
|
|
355 |
|
|
356 |
goal thy "!!A. [| A <= B Un C; A Int C = 0 |] ==> A <= B";
|
|
357 |
by (fast_tac (AC_cs addDs [equals0D]) 1);
|
|
358 |
val subset_Un_disjoint = result();
|
|
359 |
|
|
360 |
goal thy "!!F. [| X:Pow(A - Union(B) -C); T:B; F<=T |] ==> F Int X = 0";
|
|
361 |
by (fast_tac (AC_cs addSIs [equals0I]) 1);
|
|
362 |
val Int_empty = result();
|
|
363 |
|
|
364 |
(* ********************************************************************** *)
|
|
365 |
(* equipollent subset (and finite) is the whole set *)
|
|
366 |
(* ********************************************************************** *)
|
|
367 |
|
|
368 |
goal thy "!!A. [| A <= B; a : A; A - {a} = B - {a} |] ==> A = B";
|
|
369 |
by (fast_tac (AC_cs addSEs [equalityE, singletonE]
|
|
370 |
addSIs [equalityI, singletonI]) 1);
|
|
371 |
val Diffs_eq_imp_eq = result();
|
|
372 |
|
|
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);
|
|
375 |
by (fast_tac (AC_cs addSDs [lepoll_0_is_0] addSIs [equalityI]) 1);
|
|
376 |
by (REPEAT (resolve_tac [allI, impI] 1));
|
|
377 |
by (REPEAT (eresolve_tac [conjE] 1));
|
|
378 |
by (resolve_tac [succ_lepoll_imp_not_empty RS not_emptyE] 1
|
|
379 |
THEN (assume_tac 1));
|
|
380 |
by (forward_tac [subsetD RS Diff_sing_lepoll] 1
|
|
381 |
THEN REPEAT (assume_tac 1));
|
|
382 |
by (forward_tac [lepoll_Diff_sing] 1);
|
|
383 |
by (REPEAT (eresolve_tac [allE, impE] 1));
|
|
384 |
by (resolve_tac [conjI] 1);
|
|
385 |
by (fast_tac AC_cs 2);
|
|
386 |
by (fast_tac (AC_cs addSEs [singletonE] addSIs [singletonI]) 1);
|
|
387 |
by (eresolve_tac [Diffs_eq_imp_eq] 1
|
|
388 |
THEN REPEAT (assume_tac 1));
|
|
389 |
val subset_imp_eq_lemma = result();
|
|
390 |
|
|
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);
|
|
393 |
val subset_imp_eq = result();
|
|
394 |
|
|
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";
|
|
397 |
by (dresolve_tac [subset_imp_eq] 1);
|
|
398 |
by (eresolve_tac [nat_succI] 3);
|
|
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);
|
|
401 |
by (fast_tac (AC_cs addSEs [bij_is_fun RS (ltD RSN (2, apply_type)) RS
|
|
402 |
CollectE, eqpoll_imp_lepoll]) 1);
|
|
403 |
by (rewrite_goals_tac [bij_def, inj_def]);
|
|
404 |
by (fast_tac (AC_cs addSDs [ltD]) 1);
|
|
405 |
val bij_imp_arg_eq = result();
|
|
406 |
|
|
407 |
goal thy
|
|
408 |
"!!a. [| recfunAC16(f, fa, y, a) <= {X: Pow(A) . X eqpoll succ(k #+ m)}; \
|
|
409 |
\ Card(a); ~ Finite(a); A eqpoll a; \
|
|
410 |
\ k : nat; m : nat; y<a; \
|
|
411 |
\ fa : bij(a, {Y: Pow(A). Y eqpoll succ(k)}); \
|
|
412 |
\ ~ (EX Y:recfunAC16(f, fa, y, a). fa`y <= Y) |] \
|
|
413 |
\ ==> EX X:{Y: Pow(A). Y eqpoll succ(k #+ m)}. fa`y <= X & \
|
|
414 |
\ (ALL b<a. fa`b <= X --> \
|
|
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
|
|
417 |
THEN REPEAT (assume_tac 1));
|
|
418 |
by (eresolve_tac [Card_is_Ord] 1);
|
|
419 |
by (forward_tac [Un_in_Collect] 2 THEN REPEAT (assume_tac 2));
|
|
420 |
by (eresolve_tac [CollectE] 4);
|
|
421 |
by (resolve_tac [bexI] 4);
|
|
422 |
by (resolve_tac [CollectI] 5);
|
|
423 |
by (assume_tac 5);
|
|
424 |
by (eresolve_tac [add_succ RS subst] 5);
|
|
425 |
by (assume_tac 1);
|
|
426 |
by (eresolve_tac [nat_succI] 1);
|
|
427 |
by (assume_tac 1);
|
|
428 |
by (resolve_tac [conjI] 1);
|
|
429 |
by (fast_tac AC_cs 1);
|
|
430 |
by (REPEAT (resolve_tac [ballI, impI, oallI, notI] 1));
|
|
431 |
by (dresolve_tac [Int_empty RSN (2, subset_Un_disjoint)] 1
|
|
432 |
THEN REPEAT (assume_tac 1));
|
|
433 |
by (dresolve_tac [bij_imp_arg_eq] 1 THEN REPEAT (assume_tac 1));
|
|
434 |
by (hyp_subst_tac 1);
|
|
435 |
by (eresolve_tac [bexI RSN (2, notE)] 1 THEN TRYALL assume_tac);
|
|
436 |
val ex_next_set = result();
|
|
437 |
|
|
438 |
(* ********************************************************************** *)
|
|
439 |
(* Lemma ex_next_Ord states that for any successor *)
|
|
440 |
(* ordinal there is a number of the set satisfying certain properties *)
|
|
441 |
(* ********************************************************************** *)
|
|
442 |
|
|
443 |
goal thy
|
|
444 |
"!!a. [| recfunAC16(f, fa, y, a) <= {X: Pow(A) . X eqpoll succ(k #+ m)}; \
|
|
445 |
\ Card(a); ~ Finite(a); A eqpoll a; \
|
|
446 |
\ k : nat; m : nat; y<a; \
|
|
447 |
\ fa : bij(a, {Y: Pow(A). Y eqpoll succ(k)}); \
|
|
448 |
\ f : bij(a, {Y: Pow(A). Y eqpoll succ(k #+ m)}); \
|
|
449 |
\ ~ (EX Y:recfunAC16(f, fa, y, a). fa`y <= Y) |] \
|
|
450 |
\ ==> EX c<a. fa`y <= f`c & \
|
|
451 |
\ (ALL b<a. fa`b <= f`c --> \
|
|
452 |
\ (ALL T:recfunAC16(f, fa, y, a). ~ fa`b <= T))";
|
|
453 |
by (dresolve_tac [ex_next_set] 1 THEN REPEAT (assume_tac 1));
|
|
454 |
by (eresolve_tac [bexE] 1);
|
|
455 |
by (resolve_tac [bij_converse_bij RS bij_is_fun RS apply_type RS ltI RSN
|
|
456 |
(2, oexI)] 1);
|
|
457 |
by (resolve_tac [right_inverse_bij RS ssubst] 1
|
|
458 |
THEN REPEAT (ares_tac [Card_is_Ord] 1));
|
|
459 |
val ex_next_Ord = result();
|
|
460 |
|
|
461 |
goal thy "!!Z. [| EX! Y. Y:Z & P(Y); ~P(W) |] ==> EX! Y. Y:Z Un {W} & P(Y)";
|
|
462 |
by (fast_tac (AC_cs addSEs [singletonE]) 1);
|
|
463 |
val ex1_in_Un_sing = result();
|
|
464 |
|
|
465 |
(* ********************************************************************** *)
|
|
466 |
(* Lemma simplifying assumptions *)
|
|
467 |
(* ********************************************************************** *)
|
|
468 |
|
|
469 |
goal thy "!!j. [| ALL x<a. x<j | (EX xa:F(j). P(x, xa)) \
|
|
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))) |] \
|
|
472 |
\ ==> F(j) Un {L} <= X & \
|
|
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)))";
|
|
475 |
by (resolve_tac [conjI] 1);
|
|
476 |
by (fast_tac (AC_cs addSIs [singleton_subsetI]) 1);
|
|
477 |
by (resolve_tac [oallI] 1);
|
|
478 |
by (eresolve_tac [oallE] 1 THEN (contr_tac 2));
|
|
479 |
by (resolve_tac [impI] 1);
|
|
480 |
by (eresolve_tac [disjE] 1);
|
|
481 |
by (eresolve_tac [leE] 1);
|
|
482 |
by (eresolve_tac [disjI1 RSN (2, impE)] 1 THEN (assume_tac 1));
|
|
483 |
by (resolve_tac [ex1E] 1 THEN (assume_tac 1));
|
|
484 |
by (eresolve_tac [ex1_in_Un_sing] 1);
|
|
485 |
by (fast_tac AC_cs 1);
|
|
486 |
by (fast_tac AC_cs 1);
|
|
487 |
by (eresolve_tac [bexE] 1);
|
|
488 |
by (eresolve_tac [UnE] 1);
|
|
489 |
by (fast_tac (AC_cs addSEs [ex1_in_Un_sing]) 1);
|
|
490 |
by (fast_tac AC_cs 1);
|
|
491 |
val lemma8 = result();
|
|
492 |
|
|
493 |
(* ********************************************************************** *)
|
|
494 |
(* The main part of the proof: inductive proof of the property of T_gamma *)
|
|
495 |
(* lemma main_induct *)
|
|
496 |
(* ********************************************************************** *)
|
|
497 |
|
|
498 |
goal thy
|
|
499 |
"!!a. [| b < a; f : bij(a, {Y: Pow(A) . Y eqpoll succ(k #+ m)}); \
|
|
500 |
\ fa : bij(a, {Y: Pow(A) . Y eqpoll succ(k)}); \
|
|
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)} & \
|
|
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))";
|
|
505 |
by (resolve_tac [impE] 1 THEN (REPEAT (assume_tac 2)));
|
|
506 |
by (eresolve_tac [lt_Ord RS trans_induct] 1);
|
|
507 |
by (resolve_tac [impI] 1);
|
|
508 |
by (eresolve_tac [Ord_cases] 1);
|
|
509 |
(* case 0 *)
|
|
510 |
by (asm_simp_tac (AC_ss addsimps [recfunAC16_0]) 1);
|
|
511 |
by (fast_tac (AC_cs addSEs [ltE]) 1);
|
|
512 |
(* case Limit *)
|
|
513 |
by (asm_simp_tac (AC_ss addsimps [recfunAC16_Limit]) 2);
|
|
514 |
by (eresolve_tac [lemma5] 2 THEN (REPEAT (assume_tac 2)));
|
|
515 |
by (fast_tac (FOL_cs addSEs [recfunAC16_mono]) 2);
|
|
516 |
(* case succ *)
|
|
517 |
by (hyp_subst_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);
|
|
520 |
by (resolve_tac [conjI RS (expand_if RS iffD2)] 1);
|
|
521 |
by (eresolve_tac [lemma7] 1 THEN (REPEAT (assume_tac 1)));
|
|
522 |
by (resolve_tac [impI] 1);
|
|
523 |
by (resolve_tac [ex_next_Ord RS oexE] 1
|
|
524 |
THEN REPEAT (ares_tac [le_refl RS lt_trans] 1));
|
|
525 |
by (eresolve_tac [lemma8] 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
|
|
528 |
THEN REPEAT (ares_tac [lt_Ord, succ_leI] 1));
|
|
529 |
by (eresolve_tac [lt_Ord RSN (2, LeastI)] 1 THEN (assume_tac 1));
|
|
530 |
val main_induct = result();
|
|
531 |
|
|
532 |
(* ********************************************************************** *)
|
|
533 |
(* Lemma to simplify the inductive proof *)
|
|
534 |
(* - the disired property is a consequence of the inductive assumption *)
|
|
535 |
(* ********************************************************************** *)
|
|
536 |
|
|
537 |
val [prem1, prem2, prem3, prem4] = goal thy
|
|
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))); \
|
|
540 |
\ f:a->f``(a); Limit(a); (!!i j. i le j ==> F(i) <= F(j)) |] \
|
|
541 |
\ ==> (UN j<a. F(j)) <= S & \
|
|
542 |
\ (ALL x:f``a. EX! Y. Y : (UN j<a. F(j)) & x <= Y)";
|
|
543 |
by (resolve_tac [conjI] 1);
|
|
544 |
by (resolve_tac [subsetI] 1);
|
|
545 |
by (eresolve_tac [OUN_E] 1);
|
|
546 |
by (dresolve_tac [prem1] 1);
|
|
547 |
by (fast_tac AC_cs 1);
|
|
548 |
by (resolve_tac [ballI] 1);
|
|
549 |
by (eresolve_tac [imageE] 1);
|
|
550 |
by (dresolve_tac [prem3 RS Limit_is_Ord RSN (2, ltI) RS
|
|
551 |
(prem3 RS Limit_has_succ)] 1);
|
|
552 |
by (forward_tac [prem1] 1);
|
|
553 |
by (eresolve_tac [conjE] 1);
|
|
554 |
by (dresolve_tac [leI RS succ_leE RSN (2, ospec)] 1 THEN (assume_tac 1));
|
|
555 |
by (eresolve_tac [impE] 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);
|
|
558 |
by (REPEAT (eresolve_tac [conjE, ex1E] 1));
|
|
559 |
by (resolve_tac [ex1I] 1);
|
|
560 |
by (fast_tac (AC_cs addSIs [OUN_I]) 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));
|
|
563 |
by (dresolve_tac [prem4 RS subsetD] 2 THEN (assume_tac 2));
|
|
564 |
by (fast_tac AC_cs 2);
|
|
565 |
by (forward_tac [prem1] 1);
|
|
566 |
by (forward_tac [succ_leE] 1);
|
|
567 |
by (dresolve_tac [prem4 RS subsetD] 1 THEN (assume_tac 1));
|
|
568 |
by (eresolve_tac [conjE] 1);
|
|
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));
|
|
571 |
by (eresolve_tac [ex1_two_eq] 1);
|
|
572 |
by (REPEAT (fast_tac AC_cs 1));
|
|
573 |
val lemma_simp_induct = result();
|
|
574 |
|
|
575 |
(* ********************************************************************** *)
|
|
576 |
(* The target theorem *)
|
|
577 |
(* ********************************************************************** *)
|
|
578 |
|
|
579 |
goalw thy [AC16_def]
|
|
580 |
"!!n k. [| WO2; 0<m; k:nat; m:nat |] ==> AC16(k #+ m,k)";
|
|
581 |
by (resolve_tac [allI] 1);
|
|
582 |
by (resolve_tac [impI] 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
|
|
585 |
THEN (REPEAT (ares_tac [add_type] 1)));
|
|
586 |
by (forward_tac [WO2_imp_ex_Card] 1);
|
|
587 |
by (REPEAT (eresolve_tac [exE,conjE] 1));
|
|
588 |
by (dresolve_tac [eqpoll_trans RS eqpoll_sym RS (eqpoll_def RS
|
|
589 |
def_imp_iff RS iffD1)] 1 THEN (assume_tac 1));
|
|
590 |
by (dresolve_tac [eqpoll_trans RS eqpoll_sym RS (eqpoll_def RS
|
|
591 |
def_imp_iff RS iffD1)] 1 THEN (assume_tac 1));
|
|
592 |
by (REPEAT (eresolve_tac [exE] 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))")]
|
|
595 |
(bij_is_surj RS surj_image_eq RS subst) 1
|
|
596 |
THEN (assume_tac 1));
|
|
597 |
by (resolve_tac [lemma_simp_induct] 1);
|
|
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
|
|
600 |
infinite_Card_is_InfCard RS InfCard_is_Limit] 2
|
|
601 |
THEN REPEAT (assume_tac 2));
|
|
602 |
by (eresolve_tac [recfunAC16_mono] 2);
|
|
603 |
by (resolve_tac [main_induct] 1
|
|
604 |
THEN REPEAT (ares_tac [eqpoll_imp_lepoll RS lepoll_infinite] 1));
|
|
605 |
qed "WO2_AC16";
|