src/ZF/Epsilon.ML
changeset 8127 68c6159440f1
parent 6163 be8234f37e48
child 8201 a81d18b0a9b1
equal deleted inserted replaced
8126:6244be18fa55 8127:68c6159440f1
   232 by (rtac ([UN_least, succI1 RS UN_upper] MRS equalityI) 1);
   232 by (rtac ([UN_least, succI1 RS UN_upper] MRS equalityI) 1);
   233 by (etac succE 1);
   233 by (etac succE 1);
   234 by (Blast_tac 1);
   234 by (Blast_tac 1);
   235 by (etac (rank_lt RS leI RS succ_leI RS le_imp_subset) 1);
   235 by (etac (rank_lt RS leI RS succ_leI RS le_imp_subset) 1);
   236 qed "rank_succ";
   236 qed "rank_succ";
       
   237 Addsimps [rank_0, rank_succ];
   237 
   238 
   238 Goal "rank(Union(A)) = (UN x:A. rank(x))";
   239 Goal "rank(Union(A)) = (UN x:A. rank(x))";
   239 by (rtac equalityI 1);
   240 by (rtac equalityI 1);
   240 by (rtac (rank_mono RS le_imp_subset RS UN_least) 2);
   241 by (rtac (rank_mono RS le_imp_subset RS UN_least) 2);
   241 by (etac Union_upper 2);
   242 by (etac Union_upper 2);
   262 
   263 
   263 Goalw [Pair_def] "rank(b) < rank(<a,b>)";
   264 Goalw [Pair_def] "rank(b) < rank(<a,b>)";
   264 by (rtac (consI1 RS consI2 RS rank_lt RS lt_trans) 1);
   265 by (rtac (consI1 RS consI2 RS rank_lt RS lt_trans) 1);
   265 by (rtac (consI1 RS consI2 RS rank_lt) 1);
   266 by (rtac (consI1 RS consI2 RS rank_lt) 1);
   266 qed "rank_pair2";
   267 qed "rank_pair2";
       
   268 
       
   269 (*Not clear how to remove the P(a) condition, since the "then" part
       
   270   must refer to "a"*)
       
   271 Goal "P(a) ==> (THE x. P(x)) = (if (EX!x. P(x)) then a else 0)";
       
   272 by (asm_simp_tac (simpset() addsimps [the_0, the_equality2]) 1);
       
   273 qed "the_equality_if";
       
   274 
       
   275 (*The premise is needed not just to fix i but to ensure f~=0*)
       
   276 Goalw [apply_def] "i : domain(f) ==> rank(f`i) < rank(f)";
       
   277 by (Clarify_tac 1);
       
   278 by (subgoal_tac "rank(y) < rank(f)" 1);
       
   279 by (blast_tac (claset() addIs [lt_trans, rank_lt, rank_pair2]) 2);
       
   280 by (subgoal_tac "0 < rank(f)" 1);
       
   281 by (etac (Ord_rank RS Ord_0_le RS lt_trans1) 2);
       
   282 by (asm_simp_tac (simpset() addsimps [the_equality_if]) 1);
       
   283 qed "rank_apply";
       
   284 
   267 
   285 
   268 (*** Corollaries of leastness ***)
   286 (*** Corollaries of leastness ***)
   269 
   287 
   270 Goal "A:B ==> eclose(A)<=eclose(B)";
   288 Goal "A:B ==> eclose(A)<=eclose(B)";
   271 by (rtac (Transset_eclose RS eclose_least) 1);
   289 by (rtac (Transset_eclose RS eclose_least) 1);