9 open Univ; |
9 open Univ; |
10 |
10 |
11 (*NOT SUITABLE FOR REWRITING -- RECURSIVE!*) |
11 (*NOT SUITABLE FOR REWRITING -- RECURSIVE!*) |
12 goal Univ.thy "Vfrom(A,i) = A Un (UN j:i. Pow(Vfrom(A,j)))"; |
12 goal Univ.thy "Vfrom(A,i) = A Un (UN j:i. Pow(Vfrom(A,j)))"; |
13 by (rtac (Vfrom_def RS def_transrec RS ssubst) 1); |
13 by (rtac (Vfrom_def RS def_transrec RS ssubst) 1); |
14 by (SIMP_TAC ZF_ss 1); |
14 by (simp_tac ZF_ss 1); |
15 val Vfrom = result(); |
15 val Vfrom = result(); |
16 |
16 |
17 (** Monotonicity **) |
17 (** Monotonicity **) |
18 |
18 |
19 goal Univ.thy "!!A B. A<=B ==> ALL j. i<=j --> Vfrom(A,i) <= Vfrom(B,j)"; |
19 goal Univ.thy "!!A B. A<=B ==> ALL j. i<=j --> Vfrom(A,i) <= Vfrom(B,j)"; |
120 by (fast_tac eq_cs 1); |
120 by (fast_tac eq_cs 1); |
121 val Vfrom_0 = result(); |
121 val Vfrom_0 = result(); |
122 |
122 |
123 goal Univ.thy "!!i. Ord(i) ==> Vfrom(A,succ(i)) = A Un Pow(Vfrom(A,i))"; |
123 goal Univ.thy "!!i. Ord(i) ==> Vfrom(A,succ(i)) = A Un Pow(Vfrom(A,i))"; |
124 by (rtac (Vfrom RS trans) 1); |
124 by (rtac (Vfrom RS trans) 1); |
125 brs ([refl] RL ZF_congs) 1; |
125 by (rtac (succI1 RS RepFunI RS Union_upper RSN |
126 by (rtac equalityI 1); |
126 (2, equalityI RS subst_context)) 1); |
127 by (rtac (succI1 RS RepFunI RS Union_upper) 2); |
|
128 by (rtac UN_least 1); |
127 by (rtac UN_least 1); |
129 by (rtac (subset_refl RS Vfrom_mono RS Pow_mono) 1); |
128 by (rtac (subset_refl RS Vfrom_mono RS Pow_mono) 1); |
130 by (etac member_succD 1); |
129 by (etac member_succD 1); |
131 by (assume_tac 1); |
130 by (assume_tac 1); |
132 val Vfrom_succ_lemma = result(); |
131 val Vfrom_succ_lemma = result(); |
471 |
470 |
472 val rank_rls = [rank_Inl, rank_Inr, rank_pair1, rank_pair2]; |
471 val rank_rls = [rank_Inl, rank_Inr, rank_pair1, rank_pair2]; |
473 val rank_trans_rls = rank_rls @ (rank_rls RLN (2, [rank_trans])); |
472 val rank_trans_rls = rank_rls @ (rank_rls RLN (2, [rank_trans])); |
474 |
473 |
475 val rank_ss = ZF_ss |
474 val rank_ss = ZF_ss |
476 addrews [split, case_Inl, case_Inr, Vset_rankI] |
475 addsimps [case_Inl, case_Inr, Vset_rankI] |
477 addrews rank_trans_rls; |
476 addsimps rank_trans_rls; |
478 |
477 |
479 (** Recursion over Vset levels! **) |
478 (** Recursion over Vset levels! **) |
480 |
479 |
481 (*NOT SUITABLE FOR REWRITING: recursive!*) |
480 (*NOT SUITABLE FOR REWRITING: recursive!*) |
482 goalw Univ.thy [Vrec_def] "Vrec(a,H) = H(a, lam x:Vset(rank(a)). Vrec(x,H))"; |
481 goalw Univ.thy [Vrec_def] "Vrec(a,H) = H(a, lam x:Vset(rank(a)). Vrec(x,H))"; |
483 by (rtac (transrec RS ssubst) 1); |
482 by (rtac (transrec RS ssubst) 1); |
484 by (SIMP_TAC (wf_ss addrews [Ord_rank, Ord_succ, Vset_D RS beta, |
483 by (simp_tac (ZF_ss addsimps [Ord_rank, Ord_succ, Vset_D RS beta, |
485 VsetI RS beta]) 1); |
484 VsetI RS beta]) 1); |
486 val Vrec = result(); |
485 val Vrec = result(); |
487 |
486 |
488 (*This form avoids giant explosions in proofs. NOTE USE OF == *) |
487 (*This form avoids giant explosions in proofs. NOTE USE OF == *) |
489 val rew::prems = goal Univ.thy |
488 val rew::prems = goal Univ.thy |
490 "[| !!x. h(x)==Vrec(x,H) |] ==> \ |
489 "[| !!x. h(x)==Vrec(x,H) |] ==> \ |
491 \ h(a) = H(a, lam x: Vset(rank(a)). h(x))"; |
490 \ h(a) = H(a, lam x: Vset(rank(a)). h(x))"; |
492 by (rewtac rew); |
491 by (rewtac rew); |
493 by (rtac Vrec 1); |
492 by (rtac Vrec 1); |
494 val def_Vrec = result(); |
493 val def_Vrec = result(); |
495 |
|
496 val prems = goalw Univ.thy [Vrec_def] |
|
497 "[| a=a'; !!x u. H(x,u)=H'(x,u) |] ==> Vrec(a,H)=Vrec(a',H')"; |
|
498 val Vrec_ss = ZF_ss addcongs ([transrec_cong] @ mk_congs Univ.thy ["rank"]) |
|
499 addrews (prems RL [sym]); |
|
500 by (SIMP_TAC Vrec_ss 1); |
|
501 val Vrec_cong = result(); |
|
502 |
494 |
503 |
495 |
504 (*** univ(A) ***) |
496 (*** univ(A) ***) |
505 |
497 |
506 goalw Univ.thy [univ_def] "!!A B. A<=B ==> univ(A) <= univ(B)"; |
498 goalw Univ.thy [univ_def] "!!A B. A<=B ==> univ(A) <= univ(B)"; |