src/ZF/Epsilon.ML
changeset 2033 639de962ded4
parent 1461 6bcb44e4d6e5
child 2469 b50b8c0eec01
equal deleted inserted replaced
2032:1bbf1bdcaf56 2033:639de962ded4
   152 
   152 
   153 val prems = goal Epsilon.thy
   153 val prems = goal Epsilon.thy
   154     "[| !!x u. [| x:eclose({a});  u: Pi(x,B) |] ==> H(x,u) : B(x)   \
   154     "[| !!x u. [| x:eclose({a});  u: Pi(x,B) |] ==> H(x,u) : B(x)   \
   155 \    |]  ==> transrec(a,H) : B(a)";
   155 \    |]  ==> transrec(a,H) : B(a)";
   156 by (res_inst_tac [("i", "a")] (arg_in_eclose_sing RS eclose_induct) 1);
   156 by (res_inst_tac [("i", "a")] (arg_in_eclose_sing RS eclose_induct) 1);
   157 by (rtac (transrec RS ssubst) 1);
   157 by (stac transrec 1);
   158 by (REPEAT (ares_tac (prems @ [lam_type]) 1 ORELSE etac bspec 1));
   158 by (REPEAT (ares_tac (prems @ [lam_type]) 1 ORELSE etac bspec 1));
   159 qed "transrec_type";
   159 qed "transrec_type";
   160 
   160 
   161 goal Epsilon.thy "!!i. Ord(i) ==> eclose({i}) <= succ(i)";
   161 goal Epsilon.thy "!!i. Ord(i) ==> eclose({i}) <= succ(i)";
   162 by (etac (Ord_is_Transset RS Transset_succ RS eclose_least) 1);
   162 by (etac (Ord_is_Transset RS Transset_succ RS eclose_least) 1);
   175 
   175 
   176 (*** Rank ***)
   176 (*** Rank ***)
   177 
   177 
   178 (*NOT SUITABLE FOR REWRITING -- RECURSIVE!*)
   178 (*NOT SUITABLE FOR REWRITING -- RECURSIVE!*)
   179 goal Epsilon.thy "rank(a) = (UN y:a. succ(rank(y)))";
   179 goal Epsilon.thy "rank(a) = (UN y:a. succ(rank(y)))";
   180 by (rtac (rank_def RS def_transrec RS ssubst) 1);
   180 by (stac (rank_def RS def_transrec) 1);
   181 by (simp_tac ZF_ss 1);
   181 by (simp_tac ZF_ss 1);
   182 qed "rank";
   182 qed "rank";
   183 
   183 
   184 goal Epsilon.thy "Ord(rank(a))";
   184 goal Epsilon.thy "Ord(rank(a))";
   185 by (eps_ind_tac "a" 1);
   185 by (eps_ind_tac "a" 1);
   186 by (rtac (rank RS ssubst) 1);
   186 by (stac rank 1);
   187 by (rtac (Ord_succ RS Ord_UN) 1);
   187 by (rtac (Ord_succ RS Ord_UN) 1);
   188 by (etac bspec 1);
   188 by (etac bspec 1);
   189 by (assume_tac 1);
   189 by (assume_tac 1);
   190 qed "Ord_rank";
   190 qed "Ord_rank";
   191 
   191 
   192 val [major] = goal Epsilon.thy "Ord(i) ==> rank(i) = i";
   192 val [major] = goal Epsilon.thy "Ord(i) ==> rank(i) = i";
   193 by (rtac (major RS trans_induct) 1);
   193 by (rtac (major RS trans_induct) 1);
   194 by (rtac (rank RS ssubst) 1);
   194 by (stac rank 1);
   195 by (asm_simp_tac (ZF_ss addsimps [Ord_equality]) 1);
   195 by (asm_simp_tac (ZF_ss addsimps [Ord_equality]) 1);
   196 qed "rank_of_Ord";
   196 qed "rank_of_Ord";
   197 
   197 
   198 goal Epsilon.thy "!!a b. a:b ==> rank(a) < rank(b)";
   198 goal Epsilon.thy "!!a b. a:b ==> rank(a) < rank(b)";
   199 by (res_inst_tac [("a1","b")] (rank RS ssubst) 1);
   199 by (res_inst_tac [("a1","b")] (rank RS ssubst) 1);
   209 by (assume_tac 1);
   209 by (assume_tac 1);
   210 qed "eclose_rank_lt";
   210 qed "eclose_rank_lt";
   211 
   211 
   212 goal Epsilon.thy "!!a b. a<=b ==> rank(a) le rank(b)";
   212 goal Epsilon.thy "!!a b. a<=b ==> rank(a) le rank(b)";
   213 by (rtac subset_imp_le 1);
   213 by (rtac subset_imp_le 1);
   214 by (rtac (rank RS ssubst) 1);
   214 by (stac rank 1);
   215 by (rtac (rank RS ssubst) 1);
   215 by (stac rank 1);
   216 by (etac UN_mono 1);
   216 by (etac UN_mono 1);
   217 by (REPEAT (resolve_tac [subset_refl, Ord_rank] 1));
   217 by (REPEAT (resolve_tac [subset_refl, Ord_rank] 1));
   218 qed "rank_mono";
   218 qed "rank_mono";
   219 
   219 
   220 goal Epsilon.thy "rank(Pow(a)) = succ(rank(a))";
   220 goal Epsilon.thy "rank(Pow(a)) = succ(rank(a))";
   241 
   241 
   242 goal Epsilon.thy "rank(Union(A)) = (UN x:A. rank(x))";
   242 goal Epsilon.thy "rank(Union(A)) = (UN x:A. rank(x))";
   243 by (rtac equalityI 1);
   243 by (rtac equalityI 1);
   244 by (rtac (rank_mono RS le_imp_subset RS UN_least) 2);
   244 by (rtac (rank_mono RS le_imp_subset RS UN_least) 2);
   245 by (etac Union_upper 2);
   245 by (etac Union_upper 2);
   246 by (rtac (rank RS ssubst) 1);
   246 by (stac rank 1);
   247 by (rtac UN_least 1);
   247 by (rtac UN_least 1);
   248 by (etac UnionE 1);
   248 by (etac UnionE 1);
   249 by (rtac subset_trans 1);
   249 by (rtac subset_trans 1);
   250 by (etac (RepFunI RS Union_upper) 2);
   250 by (etac (RepFunI RS Union_upper) 2);
   251 by (etac (rank_lt RS succ_leI RS le_imp_subset) 1);
   251 by (etac (rank_lt RS succ_leI RS le_imp_subset) 1);