src/ZF/Ordinal.thy
changeset 13162 660a71e712af
parent 13155 dcbf6cb95534
child 13172 03a5afa7b888
equal deleted inserted replaced
13161:a40db0418145 13162:660a71e712af
   454 lemma lt_subset_trans: "[| i <= j;  j<k;  Ord(i) |] ==> i<k"
   454 lemma lt_subset_trans: "[| i <= j;  j<k;  Ord(i) |] ==> i<k"
   455 apply (rule subset_imp_le [THEN lt_trans1]) 
   455 apply (rule subset_imp_le [THEN lt_trans1]) 
   456 apply (blast intro: elim: ltE) +
   456 apply (blast intro: elim: ltE) +
   457 done
   457 done
   458 
   458 
       
   459 lemma succ_lt_iff: "succ(i) < j \<longleftrightarrow> i<j & succ(i) \<noteq> j"
       
   460 apply auto 
       
   461 apply (blast intro: lt_trans le_refl dest: lt_Ord) 
       
   462 apply (frule lt_Ord) 
       
   463 apply (rule not_le_iff_lt [THEN iffD1]) 
       
   464   apply (blast intro: lt_Ord2)
       
   465  apply blast  
       
   466 apply (simp add: lt_Ord lt_Ord2 le_iff) 
       
   467 apply (blast dest: lt_asym) 
       
   468 done
       
   469 
   459 (** Union and Intersection **)
   470 (** Union and Intersection **)
   460 
   471 
   461 lemma Un_upper1_le: "[| Ord(i); Ord(j) |] ==> i le i Un j"
   472 lemma Un_upper1_le: "[| Ord(i); Ord(j) |] ==> i le i Un j"
   462 by (rule Un_upper1 [THEN subset_imp_le], auto)
   473 by (rule Un_upper1 [THEN subset_imp_le], auto)
   463 
   474 
   485 (*Replacing k by succ(k') yields the similar rule for le!*)
   496 (*Replacing k by succ(k') yields the similar rule for le!*)
   486 lemma Int_greatest_lt: "[| i<k;  j<k |] ==> i Int j < k"
   497 lemma Int_greatest_lt: "[| i<k;  j<k |] ==> i Int j < k"
   487 apply (rule_tac i = "i" and j = "j" in Ord_linear_le)
   498 apply (rule_tac i = "i" and j = "j" in Ord_linear_le)
   488 apply (auto simp add: Int_commute le_subset_iff subset_Int_iff lt_Ord) 
   499 apply (auto simp add: Int_commute le_subset_iff subset_Int_iff lt_Ord) 
   489 done
   500 done
       
   501 
       
   502 lemma Ord_Un_if:
       
   503      "[| Ord(i); Ord(j) |] ==> i \<union> j = (if j<i then i else j)"
       
   504 by (simp add: not_lt_iff_le le_imp_subset leI
       
   505               subset_Un_iff [symmetric]  subset_Un_iff2 [symmetric]) 
       
   506 
       
   507 lemma succ_Un_distrib:
       
   508      "[| Ord(i); Ord(j) |] ==> succ(i \<union> j) = succ(i) \<union> succ(j)"
       
   509 by (simp add: Ord_Un_if lt_Ord le_Ord2) 
       
   510 
       
   511 lemma lt_Un_iff:
       
   512      "[| Ord(i); Ord(j) |] ==> k < i \<union> j <-> k < i | k < j";
       
   513 apply (simp add: Ord_Un_if not_lt_iff_le) 
       
   514 apply (blast intro: leI lt_trans2)+ 
       
   515 done
       
   516 
       
   517 lemma le_Un_iff:
       
   518      "[| Ord(i); Ord(j) |] ==> k \<le> i \<union> j <-> k \<le> i | k \<le> j";
       
   519 by (simp add: succ_Un_distrib lt_Un_iff [symmetric]) 
       
   520 
   490 
   521 
   491 (*FIXME: the Intersection duals are missing!*)
   522 (*FIXME: the Intersection duals are missing!*)
   492 
   523 
   493 (*** Results about limits ***)
   524 (*** Results about limits ***)
   494 
   525 
   597          !!x. [| Limit(x);  ALL y:x. P(y) |] ==> P(x)    
   628          !!x. [| Limit(x);  ALL y:x. P(y) |] ==> P(x)    
   598       |] ==> P(i)"
   629       |] ==> P(i)"
   599 apply (erule trans_induct)
   630 apply (erule trans_induct)
   600 apply (erule Ord_cases, blast+)
   631 apply (erule Ord_cases, blast+)
   601 done
   632 done
       
   633 
       
   634 (*special induction rules for the "induct" method*)
       
   635 lemmas Ord_induct = Ord_induct [consumes 2]
       
   636   and Ord_induct_rule = Ord_induct [rule_format, consumes 2]
       
   637   and trans_induct = trans_induct [consumes 1]
       
   638   and trans_induct_rule = trans_induct [rule_format, consumes 1]
       
   639   and trans_induct3 = trans_induct3 [case_names 0 succ limit, consumes 1]
       
   640   and trans_induct3_rule = trans_induct3 [rule_format, case_names 0 succ limit, consumes 1]
   602 
   641 
   603 ML 
   642 ML 
   604 {*
   643 {*
   605 val Memrel_def = thm "Memrel_def";
   644 val Memrel_def = thm "Memrel_def";
   606 val Transset_def = thm "Transset_def";
   645 val Transset_def = thm "Transset_def";