src/ZF/AC/WO2_AC16.ML
changeset 1208 bc3093616ba4
parent 1200 d4551b1a6da7
child 1461 6bcb44e4d6e5
equal deleted inserted replaced
1207:3f460842e919 1208:bc3093616ba4
     1 (*  Title: 	ZF/AC/WO2_AC16.ML
     1 (*  Title: 	ZF/AC/WO2_AC16.ML
     2     ID:         $Id$
     2     ID:         $Id$
     3     Author: 	Krzysztof Gr`abczewski
     3     Author: 	Krzysztof Grabczewski
     4 
     4 
     5   The proof of WO2 ==> AC16(k #+ m, k)
     5   The proof of WO2 ==> AC16(k #+ m, k)
     6   
     6   
     7   The main part of the proof is the inductive reasoning concerning
     7   The main part of the proof is the inductive reasoning concerning
     8   properties of constructed family T_gamma.
     8   properties of constructed family T_gamma.
    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
   171 		exE] 1);
   171 		exE] 1);
   172 by (forward_tac [bij_is_surj RS surj_image_eq] 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);
   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));
   174 by (dresolve_tac [sym RS trans] 1 THEN (assume_tac 1));
   175 by (hyp_subst_tac 1);
   175 by (hyp_subst_tac 1);
   176 by (resolve_tac [lepoll_lesspoll_lesspoll] 1);
   176 by (rtac lepoll_lesspoll_lesspoll 1);
   177 by (eresolve_tac [lt_trans1 RSN (2, lt_Card_imp_lesspoll)] 1
   177 by (eresolve_tac [lt_trans1 RSN (2, lt_Card_imp_lesspoll)] 1
   178 	THEN REPEAT (assume_tac 1));
   178 	THEN REPEAT (assume_tac 1));
   179 by (resolve_tac [UN_lepoll] 1
   179 by (rtac UN_lepoll 1
   180 	THEN (TRYALL (fast_tac (AC_cs addSEs [lt_Ord]))));
   180 	THEN (TRYALL (fast_tac (AC_cs addSEs [lt_Ord]))));
   181 val Union_lesspoll = result();
   181 val Union_lesspoll = result();
   182 
   182 
   183 (* ********************************************************************** *)
   183 (* ********************************************************************** *)
   184 (* recfunAC16_lepoll_index						  *)
   184 (* recfunAC16_lepoll_index						  *)
   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();
   325 
   325 
   326 goal thy "!!j. [| ALL y:succ(j). y<a --> F(y)<=X & (ALL x<a. x<y | P(x,y)  \
   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 |]  \
   327 \	--> Q(x,y)); succ(j)<a |]  \
   328 \	==> F(j)<=X & (ALL x<a. x<j | P(x,j) --> Q(x,j))";
   328 \	==> F(j)<=X & (ALL x<a. x<j | P(x,j) --> Q(x,j))";
   329 by (dresolve_tac [succI1 RSN (2, bspec)] 1);
   329 by (dresolve_tac [succI1 RSN (2, bspec)] 1);
   330 by (eresolve_tac [impE] 1);
   330 by (etac impE 1);
   331 by (resolve_tac [lt_Ord RS (succI1 RS ltI RS lt_Ord RS le_refl) RS lt_trans] 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)));
   332 	THEN (REPEAT (assume_tac 1)));
   333 val lemma6 = result();
   333 val lemma6 = result();
   334 
   334 
   335 goal thy "!!j. [| F(j)<=X; (ALL x<a. x<j | P(x,j) --> Q(x,j)); succ(j)<a |]  \
   335 goal thy "!!j. [| F(j)<=X; (ALL x<a. x<j | P(x,j) --> Q(x,j)); succ(j)<a |]  \
   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";