src/ZF/AC/WO2_AC16.ML
changeset 8123 a71686059be0
parent 7499 23e090051cb8
child 9491 1a36151ee2fc
equal deleted inserted replaced
8122:b43ad07660b9 8123:a71686059be0
    36 Goal "[| ALL y<x. ALL z<a. z<y | (EX Y: F(y). f(z)<=Y)  \
    36 Goal "[| ALL y<x. ALL z<a. z<y | (EX Y: F(y). f(z)<=Y)  \
    37 \               --> (EX! Y. Y:F(y) & f(z)<=Y);  \
    37 \               --> (EX! Y. Y:F(y) & f(z)<=Y);  \
    38 \               ALL i j. i le j --> F(i) <= F(j); i<x; j<x; z<a;  \
    38 \               ALL i j. i le j --> F(i) <= F(j); i<x; j<x; z<a;  \
    39 \               V: F(i); f(z)<=V; W:F(j); f(z)<=W |]  \
    39 \               V: F(i); f(z)<=V; W:F(j); f(z)<=W |]  \
    40 \               ==> V = W";
    40 \               ==> V = W";
    41 by (res_inst_tac [("j","j")] (lt_Ord RS (lt_Ord RSN (2, Ord_linear_le))) 1
    41 by (res_inst_tac [("j","j")] ([lt_Ord, lt_Ord] MRS Ord_linear_le) 1
    42         THEN (REPEAT (assume_tac 1)));
    42     THEN (REPEAT (assume_tac 1)));
    43 by (eresolve_tac [lemma3_1 RS sym] 1 THEN (REPEAT (assume_tac 1)));
    43 by (eresolve_tac [lemma3_1 RS sym] 1 THEN (REPEAT (assume_tac 1)));
    44 by (etac lemma3_1 1 THEN (REPEAT (assume_tac 1)));
    44 by (etac lemma3_1 1 THEN (REPEAT (assume_tac 1)));
    45 val lemma3 = result();
    45 val lemma3 = result();
    46 
    46 
    47 
    47 
   116 (* Case of finite ordinals                                                *)
   116 (* Case of finite ordinals                                                *)
   117 (* ********************************************************************** *)
   117 (* ********************************************************************** *)
   118 
   118 
   119 
   119 
   120 Goalw [lesspoll_def]
   120 Goalw [lesspoll_def]
   121         "!!X. [| Finite(X); ~Finite(a); Ord(a) |] ==> X lesspoll a";
   121         "[| Finite(X); ~Finite(a); Ord(a) |] ==> X lesspoll a";
   122 by (rtac conjI 1);
   122 by (rtac conjI 1);
   123 by (dresolve_tac [nat_le_infinite_Ord RS le_imp_lepoll] 1
   123 by (dresolve_tac [nat_le_infinite_Ord RS le_imp_lepoll] 1
   124         THEN (assume_tac 1));
   124         THEN (assume_tac 1));
   125 by (rewtac Finite_def);
   125 by (rewtac Finite_def);
   126 by (fast_tac (claset() addSEs [eqpoll_sym RS eqpoll_trans]) 2);
   126 by (fast_tac (claset() addSEs [eqpoll_sym RS eqpoll_trans]) 2);
   127 by (rtac lepoll_trans 1 THEN (assume_tac 2));
   127 by (rtac lepoll_trans 1 THEN (assume_tac 2));
   128 by (fast_tac (claset() addSEs [Ord_nat RSN (2, ltI) RS leI RS le_imp_subset RS 
   128 by (fast_tac (claset() addSEs [Ord_nat RSN (2, ltI) RS leI RS le_imp_subset RS 
   129         subset_imp_lepoll RSN (2, eqpoll_imp_lepoll RS lepoll_trans)]) 1);
   129         subset_imp_lepoll RSN (2, eqpoll_imp_lepoll RS lepoll_trans)]) 1);
   130 qed "Finite_lesspoll_infinite_Ord";
   130 qed "Finite_lesspoll_infinite_Ord";
   131 
   131 
   132 
       
   133 Goal "x:X ==> Union(X) = Union(X-{x}) Un x";
       
   134 by (Fast_tac 1);
       
   135 qed "Union_eq_Un_Diff";
       
   136 
       
   137 
       
   138 Goal "n:nat ==> ALL X. X eqpoll n --> (ALL x:X. Finite(x))  \
       
   139 \       --> Finite(Union(X))";
       
   140 by (induct_tac "n" 1);
       
   141 by (fast_tac (claset() addSDs [eqpoll_imp_lepoll RS lepoll_0_is_0]
       
   142         addSIs [nat_0I RS nat_into_Finite] addss (simpset())) 1);
       
   143 by (REPEAT (resolve_tac [allI, impI] 1));
       
   144 by (resolve_tac [eqpoll_succ_imp_not_empty RS not_emptyE] 1 THEN (assume_tac 1));
       
   145 by (res_inst_tac [("P","%z. Finite(z)")] (Union_eq_Un_Diff RS ssubst) 1
       
   146         THEN (assume_tac 1));
       
   147 by (rtac Finite_Un 1);
       
   148 by (Fast_tac 2);
       
   149 by (fast_tac (claset() addSIs [Diff_sing_eqpoll]) 1);
       
   150 qed "Finite_Union_lemma";
       
   151 
       
   152 
       
   153 Goal "[| ALL x:X. Finite(x); Finite(X) |] ==> Finite(Union(X))";
       
   154 by (eresolve_tac [Finite_def RS def_imp_iff RS iffD1 RS bexE] 1);
       
   155 by (dtac Finite_Union_lemma 1);
       
   156 by (Fast_tac 1);
       
   157 qed "Finite_Union";
       
   158 
       
   159 
       
   160 Goalw [Finite_def] "[| x lepoll n; n:nat |] ==> Finite(x)";
       
   161 by (fast_tac (claset()
       
   162         addEs [nat_into_Ord RSN (2, lepoll_imp_ex_le_eqpoll) RS exE,
       
   163         Ord_nat RSN (2, ltI) RSN (2, lt_trans1) RS ltD]) 1);
       
   164 qed "lepoll_nat_num_imp_Finite";
       
   165 
       
   166 
       
   167 Goal "[| ALL x:X. x lepoll n & x <= T; well_ord(T, R); X lepoll b;  \
   132 Goal "[| ALL x:X. x lepoll n & x <= T; well_ord(T, R); X lepoll b;  \
   168 \       b<a; ~Finite(a); Card(a); n:nat |]  \
   133 \       b<a; ~Finite(a); Card(a); n:nat |]  \
   169 \       ==> Union(X) lesspoll a";
   134 \       ==> Union(X) lesspoll a";
   170 by (excluded_middle_tac "Finite(X)" 1);
   135 by (excluded_middle_tac "Finite(X)" 1);
   171 by (resolve_tac [Card_is_Ord RSN (3, Finite_lesspoll_infinite_Ord)] 2
   136 by (resolve_tac [Card_is_Ord RSN (3, Finite_lesspoll_infinite_Ord)] 2
   172         THEN (REPEAT (assume_tac 3)));
   137         THEN (REPEAT (assume_tac 3)));
   173 by (fast_tac (claset() addSEs [lepoll_nat_num_imp_Finite]
   138 by (fast_tac (claset() addSEs [lepoll_nat_imp_Finite]
   174                 addSIs [Finite_Union]) 2);
   139                 addSIs [Finite_Union]) 2);
   175 by (dresolve_tac [lt_Ord RSN (2, lepoll_imp_ex_le_eqpoll)] 1 THEN (assume_tac 1));
   140 by (dresolve_tac [lt_Ord RSN (2, lepoll_imp_ex_le_eqpoll)] 1 THEN (assume_tac 1));
   176 by (REPEAT (eresolve_tac [exE, conjE] 1));
   141 by (REPEAT (eresolve_tac [exE, conjE] 1));
   177 by (forward_tac [eqpoll_imp_lepoll RS lepoll_infinite] 1 THEN (assume_tac 1));
   142 by (forward_tac [eqpoll_imp_lepoll RS lepoll_infinite] 1 THEN (assume_tac 1));
   178 by (eresolve_tac [eqpoll_sym RS (eqpoll_def RS def_imp_iff RS iffD1) RS
   143 by (eresolve_tac [eqpoll_sym RS (eqpoll_def RS def_imp_iff RS iffD1) RS
   309 \       fa : bij(a, {Y: Pow(A). Y eqpoll succ(k)}) |]  \
   274 \       fa : bij(a, {Y: Pow(A). Y eqpoll succ(k)}) |]  \
   310 \       ==> A - Union(recfunAC16(f, fa, y, a)) - fa`y eqpoll a";
   275 \       ==> A - Union(recfunAC16(f, fa, y, a)) - fa`y eqpoll a";
   311 by (rtac dbl_Diff_eqpoll_Card 1 THEN (TRYALL assume_tac));
   276 by (rtac dbl_Diff_eqpoll_Card 1 THEN (TRYALL assume_tac));
   312 by (rtac Union_recfunAC16_lesspoll 1 THEN (REPEAT (assume_tac 1)));
   277 by (rtac Union_recfunAC16_lesspoll 1 THEN (REPEAT (assume_tac 1)));
   313 by (eresolve_tac [add_type RS nat_succI] 1 THEN (assume_tac 1));
   278 by (eresolve_tac [add_type RS nat_succI] 1 THEN (assume_tac 1));
   314 by (resolve_tac [nat_succI RSN (2, bexI RS (Finite_def RS def_imp_iff RS
   279 by (resolve_tac [nat_succI RSN 
   315         iffD2)) RS (Card_is_Ord RSN (3, Finite_lesspoll_infinite_Ord))] 1
   280 		 (2, bexI RS (Finite_def RS def_imp_iff RS iffD2)) RS 
       
   281 		 (Card_is_Ord RSN (3, Finite_lesspoll_infinite_Ord))] 1
   316         THEN (TRYALL assume_tac));
   282         THEN (TRYALL assume_tac));
   317 by (eresolve_tac [ltD RSN (2, bij_is_fun RS apply_type) RS CollectE] 1
   283 by (eresolve_tac [ltD RSN (2, bij_is_fun RS apply_type) RS CollectE] 1
   318         THEN (TRYALL assume_tac));
   284         THEN (TRYALL assume_tac));
   319 qed "dbl_Diff_eqpoll";
   285 qed "dbl_Diff_eqpoll";
   320 
   286 
   321 (* back to the proof *)
   287 (* back to the proof *)
   322 
   288 
   323 val disj_Un_eqpoll_nat_sum = disj_Un_eqpoll_sum RS (
   289 val disj_Un_eqpoll_nat_sum = 
   324                              sum_eqpoll_cong RSN (2, 
   290     [disj_Un_eqpoll_sum, sum_eqpoll_cong, nat_sum_eqpoll_sum] MRS 
   325                              nat_sum_eqpoll_sum RSN (3, 
   291     (eqpoll_trans RS eqpoll_trans) |> standard;
   326                              eqpoll_trans RS eqpoll_trans))) |> standard;
       
   327 
   292 
   328 
   293 
   329 Goal "[| x : Pow(A - B - fa`i); x eqpoll m;  \
   294 Goal "[| x : Pow(A - B - fa`i); x eqpoll m;  \
   330 \       fa : bij(a, {x: Pow(A) . x eqpoll k}); i<a; k:nat; m:nat |]  \
   295 \       fa : bij(a, {x: Pow(A) . x eqpoll k}); i<a; k:nat; m:nat |]  \
   331 \       ==> fa ` i Un x : {x: Pow(A) . x eqpoll k #+ m}";
   296 \       ==> fa ` i Un x : {x: Pow(A) . x eqpoll k #+ m}";
   332 by (rtac CollectI 1);
   297 by (rtac CollectI 1);
   333 by (fast_tac (claset() addSIs [PowD RS (PowD RSN (2, Un_least RS PowI))] 
   298 by (fast_tac (claset() 
   334         addSEs [ltD RSN (2, bij_is_fun RS apply_type RS CollectE)]) 1);
   299         addSEs [ltD RSN (2, bij_is_fun RS apply_type RS CollectE)]) 1);
   335 by (rtac disj_Un_eqpoll_nat_sum 1
   300 by (rtac disj_Un_eqpoll_nat_sum 1
   336         THEN (TRYALL assume_tac));
   301         THEN (TRYALL assume_tac));
   337 by (fast_tac (claset() addSIs [equals0I]) 1);
   302 by (fast_tac (claset() addSIs [equals0I]) 1);
   338 by (eresolve_tac [ltD RSN (2, bij_is_fun RS apply_type RS CollectE)] 1
   303 by (eresolve_tac [ltD RSN (2, bij_is_fun RS apply_type RS CollectE)] 1