equal
deleted
inserted
replaced
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"; |