src/ZF/Univ.thy
changeset 13203 fac77a839aa2
parent 13185 da61bfa0a391
child 13220 62c899c77151
--- a/src/ZF/Univ.thy	Wed Jun 05 12:24:14 2002 +0200
+++ b/src/ZF/Univ.thy	Wed Jun 05 15:34:55 2002 +0200
@@ -53,6 +53,9 @@
 apply (erule UN_mono, blast) 
 done
 
+lemma VfromI: "[| a: Vfrom(A,j);  j<i |] ==> a : Vfrom(A,i)"
+by (blast dest: Vfrom_mono [OF subset_refl le_imp_subset [OF leI]]) 
+
 
 subsubsection{* A fundamental equality: Vfrom does not require ordinals! *}
 
@@ -178,20 +181,15 @@
 apply (simp add: Limit_Union_eq) 
 done
 
-lemma Limit_VfromI: "[| a: Vfrom(A,j);  Limit(i);  j<i |] ==> a : Vfrom(A,i)"
-apply (rule Limit_Vfrom_eq [THEN equalityD2, THEN subsetD], assumption)
-apply (blast intro: ltD) 
-done
-
 lemma Limit_VfromE:
     "[| a: Vfrom(A,i);  ~R ==> Limit(i);
         !!x. [| x<i;  a: Vfrom(A,x) |] ==> R
      |] ==> R"
 apply (rule classical)
 apply (rule Limit_Vfrom_eq [THEN equalityD1, THEN subsetD, THEN UN_E])
-prefer 2 apply assumption
-apply blast 
-apply (blast intro: ltI  Limit_is_Ord)
+  prefer 2 apply assumption
+ apply blast 
+apply (blast intro: ltI Limit_is_Ord)
 done
 
 lemmas zero_in_VLimit = Limit_has_0 [THEN ltD, THEN zero_in_Vfrom, standard]
@@ -199,7 +197,7 @@
 lemma singleton_in_VLimit:
     "[| a: Vfrom(A,i);  Limit(i) |] ==> {a} : Vfrom(A,i)"
 apply (erule Limit_VfromE, assumption)
-apply (erule singleton_in_Vfrom [THEN Limit_VfromI], assumption)
+apply (erule singleton_in_Vfrom [THEN VfromI])
 apply (blast intro: Limit_has_succ) 
 done
 
@@ -213,7 +211,7 @@
     "[| a: Vfrom(A,i);  b: Vfrom(A,i);  Limit(i) |] ==> {a,b} : Vfrom(A,i)"
 apply (erule Limit_VfromE, assumption)
 apply (erule Limit_VfromE, assumption)
-apply (blast intro:  Limit_VfromI [OF doubleton_in_Vfrom]
+apply (blast intro:  VfromI [OF doubleton_in_Vfrom]
                      Vfrom_UnI1 Vfrom_UnI2 Limit_has_succ Un_least_lt)
 done
 
@@ -223,8 +221,8 @@
 apply (erule Limit_VfromE, assumption)
 apply (erule Limit_VfromE, assumption)
 txt{*Infer that succ(succ(x Un xa)) < i *}
-apply (blast intro:  Limit_VfromI [OF Pair_in_Vfrom]
-                     Vfrom_UnI1 Vfrom_UnI2 Limit_has_succ Un_least_lt)
+apply (blast intro: VfromI [OF Pair_in_Vfrom]
+                    Vfrom_UnI1 Vfrom_UnI2 Limit_has_succ Un_least_lt)
 done
 
 lemma product_VLimit: "Limit(i) ==> Vfrom(A,i) * Vfrom(A,i) <= Vfrom(A,i)"
@@ -303,7 +301,7 @@
 lemma Union_in_VLimit:
      "[| X: Vfrom(A,i);  Limit(i);  Transset(A) |] ==> Union(X) : Vfrom(A,i)"
 apply (rule Limit_VfromE, assumption+)
-apply (blast intro: Limit_has_succ Limit_VfromI Union_in_Vfrom)
+apply (blast intro: Limit_has_succ VfromI Union_in_Vfrom)
 done
 
 
@@ -324,9 +322,8 @@
 apply (drule_tac x=a in spec) 
 apply (drule_tac x=b in spec) 
 apply (drule_tac x="x Un xa Un 2" in spec) 
-txt{*FIXME: can do better using simprule about Un and <*}
-apply (simp add: Vfrom_UnI2 [THEN Vfrom_UnI1] Vfrom_UnI1 [THEN Vfrom_UnI1]) 
-apply (blast intro: Limit_has_0 Limit_has_succ Un_least_lt Limit_VfromI)
+apply (simp add: Un_least_lt_iff lt_Ord Vfrom_UnI1 Vfrom_UnI2) 
+apply (blast intro: Limit_has_0 Limit_has_succ VfromI)
 done
 
 subsubsection{* products *}
@@ -401,7 +398,7 @@
 
 lemma Pow_in_VLimit:
      "[| a: Vfrom(A,i);  Limit(i);  Transset(A) |] ==> Pow(a) : Vfrom(A,i)"
-by (blast elim: Limit_VfromE intro: Limit_has_succ Pow_in_Vfrom Limit_VfromI)
+by (blast elim: Limit_VfromE intro: Limit_has_succ Pow_in_Vfrom VfromI)
 
 
 subsection{* The set Vset(i) *}
@@ -684,7 +681,7 @@
 apply (rule Limit_nat [THEN Fin_VLimit])
 done
 
-subsubsection{* Closure under finite powers (functions from a fixed natural number) *}
+subsubsection{* Closure under finite powers: functions from a natural number *}
 
 lemma nat_fun_VLimit:
      "[| n: nat;  Limit(i) |] ==> n -> Vfrom(A,i) <= Vfrom(A,i)"
@@ -793,8 +790,6 @@
 val Vfrom_succ = thm "Vfrom_succ";
 val Vfrom_Union = thm "Vfrom_Union";
 val Limit_Vfrom_eq = thm "Limit_Vfrom_eq";
-val Limit_VfromI = thm "Limit_VfromI";
-val Limit_VfromE = thm "Limit_VfromE";
 val zero_in_VLimit = thm "zero_in_VLimit";
 val singleton_in_VLimit = thm "singleton_in_VLimit";
 val Vfrom_UnI1 = thm "Vfrom_UnI1";
@@ -814,7 +809,6 @@
 val Transset_Vfrom = thm "Transset_Vfrom";
 val Transset_Vfrom_succ = thm "Transset_Vfrom_succ";
 val Transset_Pair_subset = thm "Transset_Pair_subset";
-val Transset_Pair_subset_VLimit = thm "Transset_Pair_subset_VLimit";
 val Union_in_Vfrom = thm "Union_in_Vfrom";
 val Union_in_VLimit = thm "Union_in_VLimit";
 val in_VLimit = thm "in_VLimit";