src/ZF/Univ.ML
changeset 6 8ce8c4d13d4d
parent 0 a5a9c433f639
child 15 6c6d2f6e3185
equal deleted inserted replaced
5:75e163863e16 6:8ce8c4d13d4d
     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)";