src/ZF/AC/AC16_WO4.ML
changeset 5314 c061e6f9d546
parent 5284 c77e9dd9bafc
child 5470 855654b691db
equal deleted inserted replaced
5313:1861a564d7e2 5314:c061e6f9d546
    61 by (fast_tac (claset()
    61 by (fast_tac (claset()
    62         addSIs [subset_imp_lepoll RS (prem RSN (2, lepoll_infinite))]) 1);
    62         addSIs [subset_imp_lepoll RS (prem RSN (2, lepoll_infinite))]) 1);
    63 qed "infinite_Un";
    63 qed "infinite_Un";
    64 
    64 
    65 (* ********************************************************************** *)
    65 (* ********************************************************************** *)
    66 (* There is a v : s_u such that k lepoll x Int y (in our case succ(k))    *)
    66 (* There is a v : s(u) such that k lepoll x Int y (in our case succ(k))    *)
    67 (* The idea of the proof is the following :                               *)
    67 (* The idea of the proof is the following :                               *)
    68 (* Suppose not, i.e. every element of s_u has exactly k-1 elements of y   *)
    68 (* Suppose not, i.e. every element of s(u) has exactly k-1 elements of y   *)
    69 (* Thence y is less than or equipollent to {v:Pow(x). v eqpoll n#-k}      *)
    69 (* Thence y is less than or equipollent to {v:Pow(x). v eqpoll n#-k}      *)
    70 (*   We have obtained this result in two steps :                          *)
    70 (*   We have obtained this result in two steps :                          *)
    71 (*   1. y is less than or equipollent to {v:s_u. a <= v}                  *)
    71 (*   1. y is less than or equipollent to {v:s(u). a <= v}                  *)
    72 (*      where a is certain k-2 element subset of y                        *)
    72 (*      where a is certain k-2 element subset of y                        *)
    73 (*   2. {v:s_u. a <= v} is less than or equipollent                       *)
    73 (*   2. {v:s(u). a <= v} is less than or equipollent                       *)
    74 (*      to {v:Pow(x). v eqpoll n-k}                                       *)
    74 (*      to {v:Pow(x). v eqpoll n-k}                                       *)
    75 (* ********************************************************************** *)
    75 (* ********************************************************************** *)
    76 
    76 
    77 (*Proof simplified by LCP*)
    77 (*Proof simplified by LCP*)
    78 Goal "[| ~(EX x:A. f`x=y); f : inj(A, B); y:B |]  \
    78 Goal "[| ~(EX x:A. f`x=y); f : inj(A, B); y:B |]  \
    79 \       ==> (lam a:succ(A). if(a=A, y, f`a)) : inj(succ(A), B)";
    79 \     ==> (lam a:succ(A). if(a=A, y, f`a)) : inj(succ(A), B)";
    80 by (res_inst_tac [("d","%z. if(z=y, A, converse(f)`z)")] lam_injective 1);
    80 by (res_inst_tac [("d","%z. if(z=y, A, converse(f)`z)")] lam_injective 1);
    81 by (ALLGOALS
    81 by (ALLGOALS
    82     (asm_simp_tac 
    82     (asm_simp_tac 
    83      (simpset() addsimps [inj_is_fun RS apply_type, left_inverse] 
    83      (simpset() addsimps [inj_is_fun RS apply_type, left_inverse] 
    84       setloop (split_tac [split_if] ORELSE' Step_tac))));
    84       setloop (split_tac [split_if] ORELSE' Step_tac))));
    87 Goalw [lepoll_def, eqpoll_def, bij_def, surj_def]
    87 Goalw [lepoll_def, eqpoll_def, bij_def, surj_def]
    88         "[| ~A eqpoll B; A lepoll B |] ==> succ(A) lepoll B";
    88         "[| ~A eqpoll B; A lepoll B |] ==> succ(A) lepoll B";
    89 by (fast_tac (claset() addSEs [succ_not_lepoll_lemma, inj_is_fun]) 1);
    89 by (fast_tac (claset() addSEs [succ_not_lepoll_lemma, inj_is_fun]) 1);
    90 qed "succ_not_lepoll_imp_eqpoll";
    90 qed "succ_not_lepoll_imp_eqpoll";
    91 
    91 
    92 val [prem] = Goalw [s_u_def]
       
    93         "(ALL v:s_u(u, t_n, k, y). k eqpoll v Int y ==> False)  \
       
    94 \       ==> EX v : s_u(u, t_n, k, y). succ(k) lepoll v Int y";
       
    95 by (rtac ccontr 1);
       
    96 by (resolve_tac [prem RS FalseE] 1);
       
    97 by (fast_tac (claset() addSEs [succ_not_lepoll_imp_eqpoll]) 1);
       
    98 qed "suppose_not";
       
    99 
       
   100 
    92 
   101 (* ********************************************************************** *)
    93 (* ********************************************************************** *)
   102 (* There is a k-2 element subset of y                                     *)
    94 (* There is a k-2 element subset of y                                     *)
   103 (* ********************************************************************** *)
    95 (* ********************************************************************** *)
   104 
    96 
   124 
   116 
   125 Goal "[| a eqpoll k; a<=y; b:y-a; u:x; x Int y = 0  \
   117 Goal "[| a eqpoll k; a<=y; b:y-a; u:x; x Int y = 0  \
   126 \       |] ==> cons(b, cons(u, a)) eqpoll succ(succ(k))";
   118 \       |] ==> cons(b, cons(u, a)) eqpoll succ(succ(k))";
   127 by (fast_tac (claset() addSIs [cons_eqpoll_succ]) 1);
   119 by (fast_tac (claset() addSIs [cons_eqpoll_succ]) 1);
   128 qed "cons_cons_eqpoll";
   120 qed "cons_cons_eqpoll";
   129 
       
   130 Goalw [s_u_def] "s_u(u, t_n, k, y) <= t_n";
       
   131 by (Fast_tac 1);
       
   132 qed "s_u_subset";
       
   133 
       
   134 Goalw [s_u_def, succ_def]
       
   135       "[| w:t_n; cons(b,cons(u,a)) <= w; a <= y; b : y-a; k eqpoll a  \
       
   136 \      |] ==> w: s_u(u, t_n, succ(k), y)";
       
   137 by (fast_tac (claset() addDs [eqpoll_imp_lepoll RS cons_lepoll_cong]
       
   138                 addSEs [subset_imp_lepoll RSN (2, lepoll_trans)]) 1);
       
   139 qed "s_uI";
       
   140 
       
   141 Goalw [s_u_def] "v : s_u(u, t_n, k, y) ==> u : v";
       
   142 by (Fast_tac 1);
       
   143 qed "in_s_u_imp_u_in";
       
   144 
   121 
   145 Goal "[| succ(k) eqpoll A; k eqpoll B; B <= A; a : A-B; k:nat  \
   122 Goal "[| succ(k) eqpoll A; k eqpoll B; B <= A; a : A-B; k:nat  \
   146 \       |] ==> A = cons(a, B)";
   123 \       |] ==> A = cons(a, B)";
   147 by (rtac equalityI 1);
   124 by (rtac equalityI 1);
   148 by (Fast_tac 2);
   125 by (Fast_tac 2);
   254 
   231 
   255 val all_ex = thm "all_ex";
   232 val all_ex = thm "all_ex";
   256 val disjoint = thm "disjoint";
   233 val disjoint = thm "disjoint";
   257 val includes = thm "includes";
   234 val includes = thm "includes";
   258 val WO_R = thm "WO_R";
   235 val WO_R = thm "WO_R";
   259 val knat = thm "knat";
   236 val k_def = thm "k_def";
   260 val kpos = thm "kpos";
       
   261 val lnat = thm "lnat";
   237 val lnat = thm "lnat";
   262 val mnat = thm "mnat";
   238 val mnat = thm "mnat";
   263 val mpos = thm "mpos";
   239 val mpos = thm "mpos";
   264 val Infinite = thm "Infinite";
   240 val Infinite = thm "Infinite";
   265 val noLepoll = thm "noLepoll";
   241 val noLepoll = thm "noLepoll";
   266 
   242 
   267 val LL_def = thm "LL_def";
   243 val LL_def = thm "LL_def";
   268 val MM_def = thm "MM_def";
   244 val MM_def = thm "MM_def";
   269 val GG_def = thm "GG_def";
   245 val GG_def = thm "GG_def";
   270 
   246 val s_def = thm "s_def";
   271 Addsimps [disjoint, WO_R, knat, lnat, mnat, mpos, Infinite];
   247 
   272 
   248 Addsimps [disjoint, WO_R, lnat, mnat, mpos, Infinite];
   273 AddSIs [disjoint, WO_R, knat, lnat, mnat, mpos];
   249 AddSIs [disjoint, WO_R, lnat, mnat, mpos];
       
   250 
       
   251 Goalw [k_def] "k: nat";
       
   252 by Auto_tac;
       
   253 qed "knat";
       
   254 Addsimps [knat];  AddSIs [knat];
   274 
   255 
   275 AddSIs [Infinite];   (*if notI is removed!*)
   256 AddSIs [Infinite];   (*if notI is removed!*)
   276 AddSEs [Infinite RS notE];
   257 AddSEs [Infinite RS notE];
   277 
   258 
   278 AddEs [IntI RS (disjoint RS equals0E)];
   259 AddEs [IntI RS (disjoint RS equals0E)];
   279 
   260 
   280 (*use k = succ(l) *)
   261 (*use k = succ(l) *)
   281 val includes_l = simplify (FOL_ss addsimps [kpos]) includes;
   262 val includes_l = simplify (FOL_ss addsimps [k_def]) includes;
   282 val all_ex_l = simplify (FOL_ss addsimps [kpos]) all_ex;
   263 val all_ex_l = simplify (FOL_ss addsimps [k_def]) all_ex;
   283 
   264 
   284 (* ********************************************************************** *)
   265 (* ********************************************************************** *)
   285 (*   1. y is less than or equipollent to {v:s_u. a <= v}                  *)
   266 (*   1. y is less than or equipollent to {v:s(u). a <= v}                  *)
   286 (*      where a is certain k-2 element subset of y                        *)
   267 (*      where a is certain k-2 element subset of y                        *)
   287 (* ********************************************************************** *)
   268 (* ********************************************************************** *)
   288 
   269 
   289 Goal "[| l eqpoll a; a <= y |] ==> y - a eqpoll y";
   270 Goal "[| l eqpoll a; a <= y |] ==> y - a eqpoll y";
   290 by (cut_facts_tac [WO_R, Infinite, lnat] 1);
   271 by (cut_facts_tac [WO_R, Infinite, lnat] 1);
   298                 n_lesspoll_nat RS lesspoll_lepoll_lesspoll,
   279                 n_lesspoll_nat RS lesspoll_lepoll_lesspoll,
   299                 well_ord_cardinal_eqpoll RS eqpoll_sym RS eqpoll_imp_lepoll
   280                 well_ord_cardinal_eqpoll RS eqpoll_sym RS eqpoll_imp_lepoll
   300                 RS lepoll_infinite]) 1);
   281                 RS lepoll_infinite]) 1);
   301 qed "Diff_Finite_eqpoll";
   282 qed "Diff_Finite_eqpoll";
   302 
   283 
       
   284 Goalw [s_def] "s(u) <= t_n";
       
   285 by (Fast_tac 1);
       
   286 qed "s_subset";
       
   287 
       
   288 Goalw [s_def, succ_def, k_def]
       
   289       "[| w:t_n; cons(b,cons(u,a)) <= w; a <= y; b : y-a; l eqpoll a  \
       
   290 \      |] ==> w: s(u)";
       
   291 by (fast_tac (claset() addDs [eqpoll_imp_lepoll RS cons_lepoll_cong]
       
   292                 addSEs [subset_imp_lepoll RSN (2, lepoll_trans)]) 1);
       
   293 qed "sI";
       
   294 
       
   295 Goalw [s_def] "v : s(u) ==> u : v";
       
   296 by (Fast_tac 1);
       
   297 qed "in_s_imp_u_in";
       
   298 
       
   299 
   303 Goal "[| l eqpoll a;  a <= y;  b : y - a;  u : x |]  \
   300 Goal "[| l eqpoll a;  a <= y;  b : y - a;  u : x |]  \
   304 \     ==> EX! c. c: s_u(u, t_n, succ(l), y) & a <= c & b:c";
   301 \     ==> EX! c. c: s(u) & a <= c & b:c";
   305 by (rtac (all_ex_l RS ballE) 1);
   302 by (rtac (all_ex_l RS ballE) 1);
   306 by (blast_tac (claset() delrules [PowI]
   303 by (blast_tac (claset() delrules [PowI]
   307 		        addSIs [cons_cons_subset,
   304 		        addSIs [cons_cons_subset,
   308 				eqpoll_sym RS cons_cons_eqpoll]) 2);
   305 				eqpoll_sym RS cons_cons_eqpoll]) 2);
   309 by (etac ex1E 1);
   306 by (etac ex1E 1);
   310 by (res_inst_tac [("a","w")] ex1I 1);
   307 by (res_inst_tac [("a","w")] ex1I 1);
   311 by (blast_tac (claset() addIs [s_uI]) 1);
   308 by (blast_tac (claset() addIs [sI]) 1);
   312 by (etac allE 1);
   309 by (etac allE 1);
   313 by (etac impE 1);
   310 by (etac impE 1);
   314 by (assume_tac 2);
   311 by (assume_tac 2);
   315 by (fast_tac (claset() addSEs [s_u_subset RS subsetD, in_s_u_imp_u_in]) 1);
   312 by (fast_tac (claset() addSEs [s_subset RS subsetD, in_s_imp_u_in]) 1);
   316 qed "ex1_superset_a";
   313 qed "ex1_superset_a";
   317 
   314 
   318 Goal "[| ALL v:s_u(u, t_n, succ(l), y). succ(l) eqpoll v Int y;  \
   315 Goal "[| ALL v:s(u). succ(l) eqpoll v Int y;  \
   319 \        l eqpoll a;  a <= y;  b : y - a;  u : x |]   \
   316 \        l eqpoll a;  a <= y;  b : y - a;  u : x |]   \
   320 \     ==> (THE c. c: s_u(u, t_n, succ(l), y) & a <= c & b:c)  \
   317 \     ==> (THE c. c: s(u) & a <= c & b:c)  \
   321 \              Int y = cons(b, a)";
   318 \              Int y = cons(b, a)";
   322 by (forward_tac [ex1_superset_a RS theI] 1 THEN REPEAT (assume_tac 1));
   319 by (forward_tac [ex1_superset_a RS theI] 1 THEN REPEAT (assume_tac 1));
   323 by (rtac set_eq_cons 1);
   320 by (rtac set_eq_cons 1);
   324 by (REPEAT (Fast_tac 1));
   321 by (REPEAT (Fast_tac 1));
   325 qed "the_eq_cons";
   322 qed "the_eq_cons";
   326 
   323 
   327 Goal "[| ALL v:s_u(u, t_n, succ(l), y). succ(l) eqpoll v Int y;  \
   324 Goal "[| ALL v:s(u). succ(l) eqpoll v Int y;  \
   328 \        l eqpoll a;  a <= y;  u:x |]  \
   325 \        l eqpoll a;  a <= y;  u:x |]  \
   329 \     ==> y lepoll {v:s_u(u, t_n, succ(l), y). a <= v}";
   326 \     ==> y lepoll {v:s(u). a <= v}";
   330 by (resolve_tac [Diff_Finite_eqpoll RS eqpoll_sym RS 
   327 by (resolve_tac [Diff_Finite_eqpoll RS eqpoll_sym RS 
   331 		 eqpoll_imp_lepoll RS lepoll_trans] 1
   328 		 eqpoll_imp_lepoll RS lepoll_trans] 1
   332     THEN REPEAT (Fast_tac 1));
   329     THEN REPEAT (Fast_tac 1));
   333 by (res_inst_tac 
   330 by (res_inst_tac 
   334      [("f3", "lam b:y-a. THE c. c: s_u(u, t_n, succ(l), y) & a <= c & b:c")]
   331      [("f3", "lam b:y-a. THE c. c: s(u) & a <= c & b:c")]
   335      (exI RS (lepoll_def RS def_imp_iff RS iffD2)) 1);
   332      (exI RS (lepoll_def RS def_imp_iff RS iffD2)) 1);
   336 by (resolve_tac [inj_def RS def_imp_eq RS ssubst] 1);
   333 by (resolve_tac [inj_def RS def_imp_eq RS ssubst] 1);
   337 by (rtac CollectI 1);
   334 by (rtac CollectI 1);
   338 by (rtac lam_type 1);
   335 by (rtac lam_type 1);
   339 by (forward_tac [ex1_superset_a RS theI] 1
   336 by (forward_tac [ex1_superset_a RS theI] 1
   342 by (Clarify_tac 1);
   339 by (Clarify_tac 1);
   343 by (rtac cons_eqE 1);
   340 by (rtac cons_eqE 1);
   344 by (Fast_tac 2);
   341 by (Fast_tac 2);
   345 by (dres_inst_tac [("A","THE c. ?P(c)"), ("C","y")] eq_imp_Int_eq 1);
   342 by (dres_inst_tac [("A","THE c. ?P(c)"), ("C","y")] eq_imp_Int_eq 1);
   346 by (asm_full_simp_tac (simpset() addsimps [the_eq_cons]) 1);
   343 by (asm_full_simp_tac (simpset() addsimps [the_eq_cons]) 1);
   347 qed "y_lepoll_subset_s_u";
   344 qed "y_lepoll_subset_s";
   348 
   345 
   349 
   346 
   350 (* ********************************************************************** *)
   347 (* ********************************************************************** *)
   351 (* back to the second part                                                *)
   348 (* back to the second part                                                *)
   352 (* ********************************************************************** *)
   349 (* ********************************************************************** *)
   353 
   350 
   354 Goal "w <= x Un y ==> w Int (x - {u}) = w - cons(u, w Int y)";
   351 Goal "w <= x Un y ==> w Int (x - {u}) = w - cons(u, w Int y)";
   355 by (Fast_tac 1);
   352 by (Fast_tac 1);
   356 qed "w_Int_eq_w_Diff";
   353 qed "w_Int_eq_w_Diff";
   357 
   354 
   358 Goal "[| w:{v:s_u(u, t_n, succ(l), y). a <= v};  \
   355 Goal "[| w:{v:s(u). a <= v};  \
   359 \        l eqpoll a;  u : x;  \
   356 \        l eqpoll a;  u : x;  \
   360 \        ALL v:s_u(u, t_n, succ(l), y). succ(l) eqpoll v Int y  \
   357 \        ALL v:s(u). succ(l) eqpoll v Int y  \
   361 \     |] ==> w Int (x - {u}) eqpoll m";
   358 \     |] ==> w Int (x - {u}) eqpoll m";
   362 by (etac CollectE 1);
   359 by (etac CollectE 1);
   363 by (stac w_Int_eq_w_Diff 1);
   360 by (stac w_Int_eq_w_Diff 1);
   364 by (fast_tac (claset() addSDs [s_u_subset RS subsetD,
   361 by (fast_tac (claset() addSDs [s_subset RS subsetD,
   365 			       includes_l RS subsetD]) 1);
   362 			       includes_l RS subsetD]) 1);
   366 by (fast_tac (claset() addSDs [bspec]
   363 by (fast_tac (claset() addSDs [bspec]
   367         addDs [s_u_subset RS subsetD,
   364         addDs [s_subset RS subsetD, includes_l RS subsetD]
   368 	       includes_l RS subsetD]
   365         addSEs [eqpoll_sym RS cons_eqpoll_succ RS eqpoll_sym, in_s_imp_u_in]
   369         addSEs [eqpoll_sym RS cons_eqpoll_succ RS eqpoll_sym, in_s_u_imp_u_in]
       
   370         addSIs [eqpoll_sum_imp_Diff_eqpoll]) 1);
   366         addSIs [eqpoll_sum_imp_Diff_eqpoll]) 1);
   371 qed "w_Int_eqpoll_m";
   367 qed "w_Int_eqpoll_m";
   372 
   368 
   373 (* ********************************************************************** *)
   369 (* ********************************************************************** *)
   374 (*   2. {v:s_u. a <= v} is less than or equipollent                       *)
   370 (*   2. {v:s(u). a <= v} is less than or equipollent                       *)
   375 (*      to {v:Pow(x). v eqpoll n-k}                                       *)
   371 (*      to {v:Pow(x). v eqpoll n-k}                                       *)
   376 (* ********************************************************************** *)
   372 (* ********************************************************************** *)
   377 
   373 
   378 Goal "x eqpoll m ==> x ~= 0";
   374 Goal "x eqpoll m ==> x ~= 0";
   379 by (cut_facts_tac [mpos] 1);
   375 by (cut_facts_tac [mpos] 1);
   381 		       addSDs [eqpoll_succ_imp_not_empty]) 1);
   377 		       addSDs [eqpoll_succ_imp_not_empty]) 1);
   382 qed "eqpoll_m_not_empty";
   378 qed "eqpoll_m_not_empty";
   383 
   379 
   384 Goal "[| z : xa Int (x - {u}); l eqpoll a; a <= y; u:x |]  \
   380 Goal "[| z : xa Int (x - {u}); l eqpoll a; a <= y; u:x |]  \
   385 \     ==> EX! w. w : t_n & cons(z, cons(u, a)) <= w";
   381 \     ==> EX! w. w : t_n & cons(z, cons(u, a)) <= w";
   386 by (cut_facts_tac [kpos] 1);
   382 by (rtac (all_ex RS bspec) 1);
   387 br (all_ex RS bspec) 1;
   383 by (rewtac k_def);
   388 by (fast_tac (claset() addSIs [cons_eqpoll_succ] addEs [eqpoll_sym]) 1);
   384 by (fast_tac (claset() addSIs [cons_eqpoll_succ] addEs [eqpoll_sym]) 1);
   389 qed "cons_cons_in";
   385 qed "cons_cons_in";
   390 
   386 
   391 Goal "[| ALL v:s_u(u, t_n, succ(l), y). succ(l) eqpoll v Int y;  \
   387 Goal "[| ALL v:s(u). succ(l) eqpoll v Int y;  \
   392 \        a <= y; l eqpoll a; u : x |]  \
   388 \        a <= y; l eqpoll a; u : x |]  \
   393 \     ==> {v:s_u(u, t_n, succ(l), y). a <= v} lepoll {v:Pow(x). v eqpoll m}";
   389 \     ==> {v:s(u). a <= v} lepoll {v:Pow(x). v eqpoll m}";
   394 by (res_inst_tac [("f3","lam w:{v:s_u(u, t_n, succ(l), y). a <= v}.  \
   390 by (res_inst_tac [("f3","lam w:{v:s(u). a <= v}. w Int (x - {u})")] 
   395 \       w Int (x - {u})")] 
       
   396         (exI RS (lepoll_def RS def_imp_iff RS iffD2)) 1);
   391         (exI RS (lepoll_def RS def_imp_iff RS iffD2)) 1);
   397 by (resolve_tac [inj_def RS def_imp_eq RS ssubst] 1);
   392 by (resolve_tac [inj_def RS def_imp_eq RS ssubst] 1);
   398 by (rtac CollectI 1);
   393 by (rtac CollectI 1);
   399 by (rtac lam_type 1);
   394 by (rtac lam_type 1);
   400 by (rtac CollectI 1);
   395 by (rtac CollectI 1);
   407         THEN REPEAT (assume_tac 1));
   402         THEN REPEAT (assume_tac 1));
   408 by (dresolve_tac [equalityD1 RS subsetD] 1 THEN (assume_tac 1));
   403 by (dresolve_tac [equalityD1 RS subsetD] 1 THEN (assume_tac 1));
   409 by (forward_tac [cons_cons_in] 1 THEN REPEAT (assume_tac 1));
   404 by (forward_tac [cons_cons_in] 1 THEN REPEAT (assume_tac 1));
   410 by (etac ex1_two_eq 1);
   405 by (etac ex1_two_eq 1);
   411 by (REPEAT (blast_tac
   406 by (REPEAT (blast_tac
   412 	    (claset() addDs [s_u_subset RS subsetD, in_s_u_imp_u_in]) 1));
   407 	    (claset() addDs [s_subset RS subsetD, in_s_imp_u_in]) 1));
   413 qed "subset_s_u_lepoll_w";
   408 qed "subset_s_lepoll_w";
   414 
   409 
   415 
   410 
   416 (* ********************************************************************** *)
   411 (* ********************************************************************** *)
   417 (* well_ord_subsets_lepoll_n                                              *)
   412 (* well_ord_subsets_lepoll_n                                              *)
   418 (* ********************************************************************** *)
   413 (* ********************************************************************** *)
   443 			      RS (eqpoll_imp_lepoll
   438 			      RS (eqpoll_imp_lepoll
   444 				  RSN (2, lepoll_trans))]) 1);
   439 				  RSN (2, lepoll_trans))]) 1);
   445 qed "LL_subset";
   440 qed "LL_subset";
   446 
   441 
   447 Goal "EX S. well_ord(LL,S)";
   442 Goal "EX S. well_ord(LL,S)";
   448 br (well_ord_subsets_lepoll_n RS exE) 1;
   443 by (rtac (well_ord_subsets_lepoll_n RS exE) 1);
   449 by (blast_tac (claset() addIs [LL_subset RSN (2,  well_ord_subset)]) 2);
   444 by (blast_tac (claset() addIs [LL_subset RSN (2, well_ord_subset)]) 2);
   450 by Auto_tac;
   445 by Auto_tac;
   451 qed "well_ord_LL";
   446 qed "well_ord_LL";
   452 
   447 
   453 (* ********************************************************************** *)
   448 (* ********************************************************************** *)
   454 (* every element of LL is a contained in exactly one element of MM        *)
   449 (* every element of LL is a contained in exactly one element of MM        *)
   485 by (stac unique_superset2 1);
   480 by (stac unique_superset2 1);
   486 by (auto_tac (claset(), simpset() addsimps [Int_in_LL]));
   481 by (auto_tac (claset(), simpset() addsimps [Int_in_LL]));
   487 qed "in_LL_eq_Int";
   482 qed "in_LL_eq_Int";
   488 
   483 
   489 Goal "v : LL ==> (THE x. x : MM & v <= x) <= x Un y";
   484 Goal "v : LL ==> (THE x. x : MM & v <= x) <= x Un y";
   490 bd unique_superset1 1;
   485 by (dtac unique_superset1 1);
   491 bw MM_def;
   486 by (rewtac MM_def);
   492 by (fast_tac (claset() addSDs [unique_superset1, includes RS subsetD]) 1);
   487 by (fast_tac (claset() addSDs [unique_superset1, includes RS subsetD]) 1);
   493 qed "the_in_MM_subset";
   488 qed "the_in_MM_subset";
   494 
   489 
   495 Goalw [GG_def] "v : LL ==> GG ` v <= x";
   490 Goalw [GG_def] "v : LL ==> GG ` v <= x";
   496 by (forward_tac [the_in_MM_subset] 1);
   491 by (forward_tac [the_in_MM_subset] 1);
   501 
   496 
   502 Goal "n:nat ==> EX z. z<=y & n eqpoll z";
   497 Goal "n:nat ==> EX z. z<=y & n eqpoll z";
   503 by (etac nat_lepoll_imp_ex_eqpoll_n 1);
   498 by (etac nat_lepoll_imp_ex_eqpoll_n 1);
   504 by (resolve_tac [ordertype_eqpoll RS eqpoll_sym RS eqpoll_imp_lepoll
   499 by (resolve_tac [ordertype_eqpoll RS eqpoll_sym RS eqpoll_imp_lepoll
   505         RSN (2, lepoll_trans)] 1);
   500         RSN (2, lepoll_trans)] 1);
   506 br WO_R 2;
   501 by (rtac WO_R 2);
   507 by (fast_tac 
   502 by (fast_tac 
   508     (claset() delrules [notI]
   503     (claset() delrules [notI]
   509               addSIs [nat_le_infinite_Ord RS le_imp_lepoll]
   504               addSIs [nat_le_infinite_Ord RS le_imp_lepoll]
   510 	      addIs [Ord_ordertype, 
   505 	      addIs [Ord_ordertype, 
   511 		     ordertype_eqpoll RS eqpoll_imp_lepoll
   506 		     ordertype_eqpoll RS eqpoll_imp_lepoll
   512 		     RS lepoll_infinite]) 1);
   507 		     RS lepoll_infinite]) 1);
   513 qed "ex_subset_eqpoll_n";
   508 qed "ex_subset_eqpoll_n";
   514 
   509 
   515 
   510 
   516 Goal "u:x ==> EX v : s_u(u, t_n, k, y). succ(k) lepoll v Int y";
   511 Goal "u:x ==> EX v : s(u). succ(k) lepoll v Int y";
   517 by (rtac suppose_not 1);
   512 by (rtac ccontr 1);
   518 by (cut_facts_tac [all_ex, includes, kpos, lnat] 1);
   513 by (subgoal_tac "ALL v:s(u). k eqpoll v Int y" 1);
   519 by (hyp_subst_tac 1);
   514 by (full_simp_tac (simpset() addsimps [s_def]) 2);
       
   515 by (blast_tac (claset() addIs [succ_not_lepoll_imp_eqpoll]) 2);
       
   516 by (rewtac k_def);
       
   517 by (cut_facts_tac [all_ex, includes, lnat] 1);
   520 by (rtac (ex_subset_eqpoll_n RS exE) 1 THEN assume_tac 1);
   518 by (rtac (ex_subset_eqpoll_n RS exE) 1 THEN assume_tac 1);
   521 br (noLepoll RS notE) 1;
   519 by (rtac (noLepoll RS notE) 1);
   522 by (blast_tac (claset() addIs
   520 by (blast_tac (claset() addIs
   523 	   [[y_lepoll_subset_s_u, subset_s_u_lepoll_w] MRS lepoll_trans]) 1);
   521 	   [[y_lepoll_subset_s, subset_s_lepoll_w] MRS lepoll_trans]) 1);
   524 qed "exists_proper_in_s_u";
   522 qed "exists_proper_in_s";
   525 
   523 
   526 Goal "u:x ==> EX w:MM. u:w";
   524 Goal "u:x ==> EX w:MM. u:w";
   527 by (eresolve_tac [exists_proper_in_s_u RS bexE] 1);
   525 by (eresolve_tac [exists_proper_in_s RS bexE] 1);
   528 by (rewrite_goals_tac [MM_def, s_u_def]);
   526 by (rewrite_goals_tac [MM_def, s_def]);
   529 by (Fast_tac 1);
   527 by (Fast_tac 1);
   530 qed "exists_in_MM";
   528 qed "exists_in_MM";
   531 
   529 
   532 Goal "u:x ==> EX w:LL. u:GG`w";
   530 Goal "u:x ==> EX w:LL. u:GG`w";
   533 by (rtac (exists_in_MM RS bexE) 1);
   531 by (rtac (exists_in_MM RS bexE) 1);
   534 ba 1;
   532 by (assume_tac 1);
   535 by (rtac bexI 1);
   533 by (rtac bexI 1);
   536 by (etac Int_in_LL 2);
   534 by (etac Int_in_LL 2);
   537 by (rewtac GG_def);
   535 by (rewtac GG_def);
   538 by (asm_simp_tac (simpset() addsimps [Int_in_LL]) 1);
   536 by (asm_simp_tac (simpset() addsimps [Int_in_LL]) 1);
   539 by (stac unique_superset2 1);
   537 by (stac unique_superset2 1);
   545 \     (UN b<ordertype(LL,S). GG ` (converse(ordermap(LL,S)) ` b)) = x";
   543 \     (UN b<ordertype(LL,S). GG ` (converse(ordermap(LL,S)) ` b)) = x";
   546 by (rtac equalityI 1);
   544 by (rtac equalityI 1);
   547 by (rtac subsetI 1);
   545 by (rtac subsetI 1);
   548 by (etac OUN_E 1);
   546 by (etac OUN_E 1);
   549 by (resolve_tac [GG_subset RS subsetD] 1);
   547 by (resolve_tac [GG_subset RS subsetD] 1);
   550 ba 2;
   548 by (assume_tac 2);
   551 by (blast_tac (claset() addIs [ordermap_bij RS bij_converse_bij RS
   549 by (blast_tac (claset() addIs [ordermap_bij RS bij_converse_bij RS
   552 			       bij_is_fun RS apply_type, ltD]) 1);
   550 			       bij_is_fun RS apply_type, ltD]) 1);
   553 by (rtac subsetI 1);
   551 by (rtac subsetI 1);
   554 by (eresolve_tac [exists_in_LL RS bexE] 1);
   552 by (eresolve_tac [exists_in_LL RS bexE] 1);
   555 by (force_tac (claset() addIs [Ord_ordertype RSN (2, ltI),
   553 by (force_tac (claset() addIs [Ord_ordertype RSN (2, ltI),
   599 by (res_inst_tac [("x",
   597 by (res_inst_tac [("x",
   600         "lam b:ordertype(LL,S). GG ` (converse(ordermap(LL,S)) ` b)")] 
   598         "lam b:ordertype(LL,S). GG ` (converse(ordermap(LL,S)) ` b)")] 
   601     exI 1);
   599     exI 1);
   602 by (Simp_tac 1);
   600 by (Simp_tac 1);
   603 by (REPEAT (ares_tac [conjI, lam_funtype RS domain_of_fun,
   601 by (REPEAT (ares_tac [conjI, lam_funtype RS domain_of_fun,
   604 			   Ord_ordertype, 
   602 		      Ord_ordertype, 
   605 			   all_in_lepoll_m, OUN_eq_x] 1));
   603 		      all_in_lepoll_m, OUN_eq_x] 1));
   606 qed "conclusion";
   604 qed "conclusion";
   607 
   605 
   608 Close_locale ();
   606 Close_locale ();
   609 
   607 
   610 
   608 
   620 by (rtac lemma1 1 THEN REPEAT (assume_tac 1));
   618 by (rtac lemma1 1 THEN REPEAT (assume_tac 1));
   621 by (cut_facts_tac [lemma2] 1);
   619 by (cut_facts_tac [lemma2] 1);
   622 by (REPEAT (eresolve_tac [exE, conjE] 1));
   620 by (REPEAT (eresolve_tac [exE, conjE] 1));
   623 by (eres_inst_tac [("x","A Un y")] allE 1);
   621 by (eres_inst_tac [("x","A Un y")] allE 1);
   624 by (forward_tac [infinite_Un] 1 THEN (mp_tac 1));
   622 by (forward_tac [infinite_Un] 1 THEN (mp_tac 1));
       
   623 by (etac zero_lt_natE 1); by (assume_tac 1);
   625 by (Clarify_tac 1);
   624 by (Clarify_tac 1);
   626 be zero_lt_natE 1;
       
   627 by (DEPTH_SOLVE (ares_tac [export conclusion] 1));
   625 by (DEPTH_SOLVE (ares_tac [export conclusion] 1));
   628 qed "AC16_WO4";
   626 qed "AC16_WO4";