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); |