src/ZF/Zorn.ML
changeset 5116 8eb343ab5748
parent 5067 62b6288e6005
child 5137 60205b0de9b9
equal deleted inserted replaced
5115:caf39b7b7a12 5116:8eb343ab5748
   197 by (rtac beta 1);
   197 by (rtac beta 1);
   198 by (assume_tac 1);
   198 by (assume_tac 1);
   199 by (rewtac increasing_def);
   199 by (rewtac increasing_def);
   200 by (rtac CollectI 1);
   200 by (rtac CollectI 1);
   201 by (rtac lam_type 1);
   201 by (rtac lam_type 1);
   202 by (asm_simp_tac (simpset() setloop split_tac [expand_if]) 1);
   202 by (asm_simp_tac (simpset() addsplits [split_if]) 1);
   203 by (fast_tac (claset() addSIs [super_subset_chain RS subsetD,
   203 by (fast_tac (claset() addSIs [super_subset_chain RS subsetD,
   204 			      chain_subset_Pow RS subsetD,
   204 			      chain_subset_Pow RS subsetD,
   205 			      choice_super]) 1);
   205 			      choice_super]) 1);
   206 (*Now, verify that it increases*)
   206 (*Now, verify that it increases*)
   207 by (asm_simp_tac (simpset() addsimps [Pow_iff, subset_refl]
   207 by (asm_simp_tac (simpset() addsimps [Pow_iff, subset_refl]
   208                         setloop split_tac [expand_if]) 1);
   208                         addsplits [split_if]) 1);
   209 by Safe_tac;
   209 by Safe_tac;
   210 by (dtac choice_super 1);
   210 by (dtac choice_super 1);
   211 by (REPEAT (assume_tac 1));
   211 by (REPEAT (assume_tac 1));
   212 by (rewtac super_def);
   212 by (rewtac super_def);
   213 by (Blast_tac 1);
   213 by (Blast_tac 1);
   223 \      |] ==> c: chain(S)";
   223 \      |] ==> c: chain(S)";
   224 by (etac TFin_induct 1);
   224 by (etac TFin_induct 1);
   225 by (asm_simp_tac 
   225 by (asm_simp_tac 
   226     (simpset() addsimps [chain_subset_Pow RS subsetD, 
   226     (simpset() addsimps [chain_subset_Pow RS subsetD, 
   227                      choice_super RS (super_subset_chain RS subsetD)]
   227                      choice_super RS (super_subset_chain RS subsetD)]
   228            setloop split_tac [expand_if]) 1);
   228            addsplits [split_if]) 1);
   229 by (rewtac chain_def);
   229 by (rewtac chain_def);
   230 by (rtac CollectI 1 THEN Blast_tac 1);
   230 by (rtac CollectI 1 THEN Blast_tac 1);
   231 by Safe_tac;
   231 by Safe_tac;
   232 by (res_inst_tac  [("m1","B"), ("n1","Ba")] (TFin_subset_linear RS disjE) 1);
   232 by (res_inst_tac  [("m1","B"), ("n1","Ba")] (TFin_subset_linear RS disjE) 1);
   233 by (ALLGOALS Fast_tac);
   233 by (ALLGOALS Fast_tac);
   248 by (assume_tac 2);
   248 by (assume_tac 2);
   249 by (rtac refl 2);
   249 by (rtac refl 2);
   250 by (asm_full_simp_tac 
   250 by (asm_full_simp_tac 
   251     (simpset() addsimps [subset_refl RS TFin_UnionI RS
   251     (simpset() addsimps [subset_refl RS TFin_UnionI RS
   252                      (TFin.dom_subset RS subsetD)]
   252                      (TFin.dom_subset RS subsetD)]
   253            setloop split_tac [expand_if]) 1);
   253            addsplits [split_if]) 1);
   254 by (eresolve_tac [choice_not_equals RS notE] 1);
   254 by (eresolve_tac [choice_not_equals RS notE] 1);
   255 by (REPEAT (assume_tac 1));
   255 by (REPEAT (assume_tac 1));
   256 qed "Hausdorff";
   256 qed "Hausdorff";
   257 
   257 
   258 
   258 
   357 by (rtac lam_type 1);
   357 by (rtac lam_type 1);
   358 (*Verify that it increases*)
   358 (*Verify that it increases*)
   359 by (rtac allI 2);
   359 by (rtac allI 2);
   360 by (rtac impI 2);
   360 by (rtac impI 2);
   361 by (asm_simp_tac (simpset() addsimps [Pow_iff, subset_consI, subset_refl]
   361 by (asm_simp_tac (simpset() addsimps [Pow_iff, subset_consI, subset_refl]
   362                         setloop split_tac [expand_if]) 2);
   362                         addsplits [split_if]) 2);
   363 (*Type checking is surprisingly hard!*)
   363 (*Type checking is surprisingly hard!*)
   364 by (asm_simp_tac (simpset() addsimps [Pow_iff, cons_subset_iff, subset_refl]
   364 by (asm_simp_tac (simpset() addsimps [Pow_iff, cons_subset_iff, subset_refl]
   365                         setloop split_tac [expand_if]) 1);
   365                         addsplits [split_if]) 1);
   366 by (blast_tac (claset() addSIs [choice_Diff RS DiffD1]) 1);
   366 by (blast_tac (claset() addSIs [choice_Diff RS DiffD1]) 1);
   367 qed "Zermelo_next_exists";
   367 qed "Zermelo_next_exists";
   368 
   368 
   369 
   369 
   370 (*The construction of the injection*)
   370 (*The construction of the injection*)
   390 by (asm_simp_tac 
   390 by (asm_simp_tac 
   391     (simpset() delsimps [Union_iff]
   391     (simpset() delsimps [Union_iff]
   392               addsimps [Collect_subset RS TFin_UnionI RS TFin_is_subset,
   392               addsimps [Collect_subset RS TFin_UnionI RS TFin_is_subset,
   393                      Pow_iff, cons_subset_iff, subset_refl,
   393                      Pow_iff, cons_subset_iff, subset_refl,
   394                      choice_Diff RS DiffD2]
   394                      choice_Diff RS DiffD2]
   395            setloop split_tac [expand_if]) 2);
   395            addsplits [split_if]) 2);
   396 by (subgoal_tac "x : next ` Union({y: TFin(S,next). x~: y})" 1);
   396 by (subgoal_tac "x : next ` Union({y: TFin(S,next). x~: y})" 1);
   397 by (blast_tac (subset_cs addSIs [Collect_subset RS TFin_UnionI, TFin_nextI]) 2);
   397 by (blast_tac (subset_cs addSIs [Collect_subset RS TFin_UnionI, TFin_nextI]) 2);
   398 (*End of the lemmas!*)
   398 (*End of the lemmas!*)
   399 by (asm_full_simp_tac 
   399 by (asm_full_simp_tac 
   400     (simpset() addsimps [Collect_subset RS TFin_UnionI RS TFin_is_subset,
   400     (simpset() addsimps [Collect_subset RS TFin_UnionI RS TFin_is_subset,
   401                      Pow_iff, cons_subset_iff, subset_refl]
   401                      Pow_iff, cons_subset_iff, subset_refl]
   402            setloop split_tac [expand_if]) 1);
   402            addsplits [split_if]) 1);
   403 by (REPEAT (eresolve_tac [asm_rl, consE, sym, notE] 1));
   403 by (REPEAT (eresolve_tac [asm_rl, consE, sym, notE] 1));
   404 qed "choice_imp_injection";
   404 qed "choice_imp_injection";
   405 
   405 
   406 (*The wellordering theorem*)
   406 (*The wellordering theorem*)
   407 Goal "EX r. well_ord(S,r)";
   407 Goal "EX r. well_ord(S,r)";