| author | wenzelm | 
| Wed, 16 Apr 2014 11:52:26 +0200 | |
| changeset 56600 | 628e039cc34d | 
| parent 55102 | 761e40ce91bc | 
| permissions | -rw-r--r-- | 
| 49310 | 1 | (* Title: HOL/Cardinals/Constructions_on_Wellorders.thy | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 2 | Author: Andrei Popescu, TU Muenchen | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 3 | Copyright 2012 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 4 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 5 | Constructions on wellorders. | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 6 | *) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 7 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 8 | header {* Constructions on Wellorders *}
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 9 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 10 | theory Constructions_on_Wellorders | 
| 55075 | 11 | imports | 
| 55102 | 12 | BNF_Constructions_on_Wellorders Wellorder_Embedding Order_Union | 
| 13 | "../Library/Cardinal_Notations" | |
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 14 | begin | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 15 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 16 | declare | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 17 | ordLeq_Well_order_simp[simp] | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 18 | not_ordLeq_iff_ordLess[simp] | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 19 | not_ordLess_iff_ordLeq[simp] | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 20 | Func_empty[simp] | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 21 | Func_is_emp[simp] | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 22 | |
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 23 | lemma Func_emp2[simp]: "A \<noteq> {} \<Longrightarrow> Func A {} = {}" by auto
 | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 24 | |
| 55102 | 25 | |
| 26 | subsection {* Restriction to a set *}
 | |
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 27 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 28 | lemma Restr_incr2: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 29 | "r <= r' \<Longrightarrow> Restr r A <= Restr r' A" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 30 | by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 31 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 32 | lemma Restr_incr: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 33 | "\<lbrakk>r \<le> r'; A \<le> A'\<rbrakk> \<Longrightarrow> Restr r A \<le> Restr r' A'" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 34 | by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 35 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 36 | lemma Restr_Int: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 37 | "Restr (Restr r A) B = Restr r (A Int B)" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 38 | by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 39 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 40 | lemma Restr_iff: "(a,b) : Restr r A = (a : A \<and> b : A \<and> (a,b) : r)" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 41 | by (auto simp add: Field_def) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 42 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 43 | lemma Restr_subset1: "Restr r A \<le> r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 44 | by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 45 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 46 | lemma Restr_subset2: "Restr r A \<le> A \<times> A" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 47 | by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 48 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 49 | lemma wf_Restr: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 50 | "wf r \<Longrightarrow> wf(Restr r A)" | 
| 51764 | 51 | using Restr_subset by (elim wf_subset) simp | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 52 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 53 | lemma Restr_incr1: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 54 | "A \<le> B \<Longrightarrow> Restr r A \<le> Restr r B" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 55 | by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 56 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 57 | |
| 55102 | 58 | subsection {* Order filters versus restrictions and embeddings *}
 | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 59 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 60 | lemma ofilter_Restr: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 61 | assumes WELL: "Well_order r" and | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 62 | OFA: "ofilter r A" and OFB: "ofilter r B" and SUB: "A \<le> B" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 63 | shows "ofilter (Restr r B) A" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 64 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 65 | let ?rB = "Restr r B" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 66 | have Well: "wo_rel r" unfolding wo_rel_def using WELL . | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 67 | hence Refl: "Refl r" by (auto simp add: wo_rel.REFL) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 68 | hence Field: "Field ?rB = Field r Int B" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 69 | using Refl_Field_Restr by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 70 | have WellB: "wo_rel ?rB \<and> Well_order ?rB" using WELL | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 71 | by (auto simp add: Well_order_Restr wo_rel_def) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 72 | (* Main proof *) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 73 | show ?thesis | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 74 | proof(auto simp add: WellB wo_rel.ofilter_def) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 75 | fix a assume "a \<in> A" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 76 | hence "a \<in> Field r \<and> a \<in> B" using assms Well | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 77 | by (auto simp add: wo_rel.ofilter_def) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 78 | with Field show "a \<in> Field(Restr r B)" by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 79 | next | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 80 | fix a b assume *: "a \<in> A" and "b \<in> under (Restr r B) a" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 81 | hence "b \<in> under r a" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 82 | using WELL OFB SUB ofilter_Restr_under[of r B a] by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 83 | thus "b \<in> A" using * Well OFA by(auto simp add: wo_rel.ofilter_def) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 84 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 85 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 86 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 87 | lemma ofilter_subset_iso: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 88 | assumes WELL: "Well_order r" and | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 89 | OFA: "ofilter r A" and OFB: "ofilter r B" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 90 | shows "(A = B) = iso (Restr r A) (Restr r B) id" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 91 | using assms | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 92 | by (auto simp add: ofilter_subset_embedS_iso) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 93 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 94 | |
| 54476 | 95 | subsection {* Ordering the well-orders by existence of embeddings *}
 | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 96 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 97 | corollary ordLeq_refl_on: "refl_on {r. Well_order r} ordLeq"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 98 | using ordLeq_reflexive unfolding ordLeq_def refl_on_def | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 99 | by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 100 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 101 | corollary ordLeq_trans: "trans ordLeq" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 102 | using trans_def[of ordLeq] ordLeq_transitive by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 103 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 104 | corollary ordLeq_preorder_on: "preorder_on {r. Well_order r} ordLeq"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 105 | by(auto simp add: preorder_on_def ordLeq_refl_on ordLeq_trans) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 106 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 107 | corollary ordIso_refl_on: "refl_on {r. Well_order r} ordIso"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 108 | using ordIso_reflexive unfolding refl_on_def ordIso_def | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 109 | by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 110 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 111 | corollary ordIso_trans: "trans ordIso" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 112 | using trans_def[of ordIso] ordIso_transitive by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 113 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 114 | corollary ordIso_sym: "sym ordIso" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 115 | by (auto simp add: sym_def ordIso_symmetric) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 116 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 117 | corollary ordIso_equiv: "equiv {r. Well_order r} ordIso"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 118 | by (auto simp add: equiv_def ordIso_sym ordIso_refl_on ordIso_trans) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 119 | |
| 54476 | 120 | lemma ordLess_Well_order_simp[simp]: | 
| 121 | assumes "r <o r'" | |
| 122 | shows "Well_order r \<and> Well_order r'" | |
| 123 | using assms unfolding ordLess_def by simp | |
| 124 | ||
| 125 | lemma ordIso_Well_order_simp[simp]: | |
| 126 | assumes "r =o r'" | |
| 127 | shows "Well_order r \<and> Well_order r'" | |
| 128 | using assms unfolding ordIso_def by simp | |
| 129 | ||
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 130 | lemma ordLess_irrefl: "irrefl ordLess" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 131 | by(unfold irrefl_def, auto simp add: ordLess_irreflexive) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 132 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 133 | lemma ordLess_or_ordIso: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 134 | assumes WELL: "Well_order r" and WELL': "Well_order r'" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 135 | shows "r <o r' \<or> r' <o r \<or> r =o r'" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 136 | unfolding ordLess_def ordIso_def | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 137 | using assms embedS_or_iso[of r r'] by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 138 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 139 | corollary ordLeq_ordLess_Un_ordIso: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 140 | "ordLeq = ordLess \<union> ordIso" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 141 | by (auto simp add: ordLeq_iff_ordLess_or_ordIso) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 142 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 143 | lemma not_ordLeq_ordLess: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 144 | "r \<le>o r' \<Longrightarrow> \<not> r' <o r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 145 | using not_ordLess_ordLeq by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 146 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 147 | lemma ordIso_or_ordLess: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 148 | assumes WELL: "Well_order r" and WELL': "Well_order r'" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 149 | shows "r =o r' \<or> r <o r' \<or> r' <o r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 150 | using assms ordLess_or_ordLeq ordLeq_iff_ordLess_or_ordIso by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 151 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 152 | lemmas ord_trans = ordIso_transitive ordLeq_transitive ordLess_transitive | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 153 | ordIso_ordLeq_trans ordLeq_ordIso_trans | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 154 | ordIso_ordLess_trans ordLess_ordIso_trans | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 155 | ordLess_ordLeq_trans ordLeq_ordLess_trans | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 156 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 157 | lemma ofilter_ordLeq: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 158 | assumes "Well_order r" and "ofilter r A" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 159 | shows "Restr r A \<le>o r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 160 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 161 | have "A \<le> Field r" using assms by (auto simp add: wo_rel_def wo_rel.ofilter_def) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 162 | thus ?thesis using assms | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 163 | by (simp add: ofilter_subset_ordLeq wo_rel.Field_ofilter | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 164 | wo_rel_def Restr_Field) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 165 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 166 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 167 | corollary under_Restr_ordLeq: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 168 | "Well_order r \<Longrightarrow> Restr r (under r a) \<le>o r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 169 | by (auto simp add: ofilter_ordLeq wo_rel.under_ofilter wo_rel_def) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 170 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 171 | |
| 55102 | 172 | subsection {* Copy via direct images *}
 | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 173 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 174 | lemma Id_dir_image: "dir_image Id f \<le> Id" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 175 | unfolding dir_image_def by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 176 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 177 | lemma Un_dir_image: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 178 | "dir_image (r1 \<union> r2) f = (dir_image r1 f) \<union> (dir_image r2 f)" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 179 | unfolding dir_image_def by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 180 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 181 | lemma Int_dir_image: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 182 | assumes "inj_on f (Field r1 \<union> Field r2)" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 183 | shows "dir_image (r1 Int r2) f = (dir_image r1 f) Int (dir_image r2 f)" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 184 | proof | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 185 | show "dir_image (r1 Int r2) f \<le> (dir_image r1 f) Int (dir_image r2 f)" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 186 | using assms unfolding dir_image_def inj_on_def by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 187 | next | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 188 | show "(dir_image r1 f) Int (dir_image r2 f) \<le> dir_image (r1 Int r2) f" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 189 | proof(clarify) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 190 | fix a' b' | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 191 | assume "(a',b') \<in> dir_image r1 f" "(a',b') \<in> dir_image r2 f" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 192 | then obtain a1 b1 a2 b2 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 193 | where 1: "a' = f a1 \<and> b' = f b1 \<and> a' = f a2 \<and> b' = f b2" and | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 194 | 2: "(a1,b1) \<in> r1 \<and> (a2,b2) \<in> r2" and | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 195 |           3: "{a1,b1} \<le> Field r1 \<and> {a2,b2} \<le> Field r2"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 196 | unfolding dir_image_def Field_def by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 197 | hence "a1 = a2 \<and> b1 = b2" using assms unfolding inj_on_def by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 198 | hence "a' = f a1 \<and> b' = f b1 \<and> (a1,b1) \<in> r1 Int r2 \<and> (a2,b2) \<in> r1 Int r2" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 199 | using 1 2 by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 200 | thus "(a',b') \<in> dir_image (r1 \<inter> r2) f" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 201 | unfolding dir_image_def by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 202 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 203 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 204 | |
| 52203 
055c392e79cf
fixed broken Cardinals and BNF due to Order_Union
 popescua parents: 
52183diff
changeset | 205 | (* More facts on ordinal sum: *) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 206 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 207 | lemma Osum_embed: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 208 | assumes FLD: "Field r Int Field r' = {}" and
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 209 | WELL: "Well_order r" and WELL': "Well_order r'" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 210 | shows "embed r (r Osum r') id" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 211 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 212 | have 1: "Well_order (r Osum r')" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 213 | using assms by (auto simp add: Osum_Well_order) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 214 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 215 | have "compat r (r Osum r') id" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 216 | unfolding compat_def Osum_def by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 217 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 218 | have "inj_on id (Field r)" by simp | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 219 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 220 | have "ofilter (r Osum r') (Field r)" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 221 | using 1 proof(auto simp add: wo_rel_def wo_rel.ofilter_def | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 222 | Field_Osum under_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 223 | fix a b assume 2: "a \<in> Field r" and 3: "(b,a) \<in> r Osum r'" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 224 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 225 |     {assume "(b,a) \<in> r'"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 226 | hence "a \<in> Field r'" using Field_def[of r'] by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 227 | hence False using 2 FLD by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 228 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 229 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 230 |     {assume "a \<in> Field r'"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 231 | hence False using 2 FLD by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 232 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 233 | ultimately | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 234 | show "b \<in> Field r" by (auto simp add: Osum_def Field_def) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 235 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 236 | ultimately show ?thesis | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 237 | using assms by (auto simp add: embed_iff_compat_inj_on_ofilter) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 238 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 239 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 240 | corollary Osum_ordLeq: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 241 | assumes FLD: "Field r Int Field r' = {}" and
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 242 | WELL: "Well_order r" and WELL': "Well_order r'" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 243 | shows "r \<le>o r Osum r'" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 244 | using assms Osum_embed Osum_Well_order | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 245 | unfolding ordLeq_def by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 246 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 247 | lemma Well_order_embed_copy: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 248 | assumes WELL: "well_order_on A r" and | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 249 | INJ: "inj_on f A" and SUB: "f ` A \<le> B" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 250 | shows "\<exists>r'. well_order_on B r' \<and> r \<le>o r'" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 251 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 252 | have "bij_betw f A (f ` A)" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 253 | using INJ inj_on_imp_bij_betw by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 254 | then obtain r'' where "well_order_on (f ` A) r''" and 1: "r =o r''" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 255 | using WELL Well_order_iso_copy by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 256 | hence 2: "Well_order r'' \<and> Field r'' = (f ` A)" | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 257 | using well_order_on_Well_order by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 258 | (* *) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 259 | let ?C = "B - (f ` A)" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 260 | obtain r''' where "well_order_on ?C r'''" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 261 | using well_order_on by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 262 | hence 3: "Well_order r''' \<and> Field r''' = ?C" | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 263 | using well_order_on_Well_order by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 264 | (* *) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 265 | let ?r' = "r'' Osum r'''" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 266 |   have "Field r'' Int Field r''' = {}"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 267 | using 2 3 by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 268 | hence "r'' \<le>o ?r'" using Osum_ordLeq[of r'' r'''] 2 3 by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 269 | hence 4: "r \<le>o ?r'" using 1 ordIso_ordLeq_trans by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 270 | (* *) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 271 | hence "Well_order ?r'" unfolding ordLeq_def by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 272 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 273 | have "Field ?r' = B" using 2 3 SUB by (auto simp add: Field_Osum) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 274 | ultimately show ?thesis using 4 by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 275 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 276 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 277 | |
| 55102 | 278 | subsection {* The maxim among a finite set of ordinals *}
 | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 279 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 280 | text {* The correct phrasing would be ``a maxim of ...", as @{text "\<le>o"} is only a preorder. *}
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 281 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 282 | definition isOmax :: "'a rel set \<Rightarrow> 'a rel \<Rightarrow> bool" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 283 | where | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 284 | "isOmax R r == r \<in> R \<and> (ALL r' : R. r' \<le>o r)" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 285 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 286 | definition omax :: "'a rel set \<Rightarrow> 'a rel" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 287 | where | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 288 | "omax R == SOME r. isOmax R r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 289 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 290 | lemma exists_isOmax: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 291 | assumes "finite R" and "R \<noteq> {}" and "\<forall> r \<in> R. Well_order r"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 292 | shows "\<exists> r. isOmax R r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 293 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 294 |   have "finite R \<Longrightarrow> R \<noteq> {} \<longrightarrow> (\<forall> r \<in> R. Well_order r) \<longrightarrow> (\<exists> r. isOmax R r)"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 295 | apply(erule finite_induct) apply(simp add: isOmax_def) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 296 | proof(clarsimp) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 297 |     fix r :: "('a \<times> 'a) set" and R assume *: "finite R" and **: "r \<notin> R"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 298 | and ***: "Well_order r" and ****: "\<forall>r\<in>R. Well_order r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 299 |     and IH: "R \<noteq> {} \<longrightarrow> (\<exists>p. isOmax R p)"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 300 | let ?R' = "insert r R" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 301 | show "\<exists>p'. (isOmax ?R' p')" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 302 |     proof(cases "R = {}")
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 303 |       assume Case1: "R = {}"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 304 | thus ?thesis unfolding isOmax_def using *** | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 305 | by (simp add: ordLeq_reflexive) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 306 | next | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 307 |       assume Case2: "R \<noteq> {}"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 308 | then obtain p where p: "isOmax R p" using IH by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 309 | hence 1: "Well_order p" using **** unfolding isOmax_def by simp | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 310 |       {assume Case21: "r \<le>o p"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 311 | hence "isOmax ?R' p" using p unfolding isOmax_def by simp | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 312 | hence ?thesis by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 313 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 314 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 315 |       {assume Case22: "p \<le>o r"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 316 |        {fix r' assume "r' \<in> ?R'"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 317 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 318 |         {assume "r' \<in> R"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 319 | hence "r' \<le>o p" using p unfolding isOmax_def by simp | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 320 | hence "r' \<le>o r" using Case22 by(rule ordLeq_transitive) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 321 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 322 | moreover have "r \<le>o r" using *** by(rule ordLeq_reflexive) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 323 | ultimately have "r' \<le>o r" by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 324 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 325 | hence "isOmax ?R' r" unfolding isOmax_def by simp | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 326 | hence ?thesis by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 327 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 328 | moreover have "r \<le>o p \<or> p \<le>o r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 329 | using 1 *** ordLeq_total by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 330 | ultimately show ?thesis by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 331 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 332 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 333 | thus ?thesis using assms by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 334 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 335 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 336 | lemma omax_isOmax: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 337 | assumes "finite R" and "R \<noteq> {}" and "\<forall> r \<in> R. Well_order r"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 338 | shows "isOmax R (omax R)" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 339 | unfolding omax_def using assms | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 340 | by(simp add: exists_isOmax someI_ex) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 341 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 342 | lemma omax_in: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 343 | assumes "finite R" and "R \<noteq> {}" and "\<forall> r \<in> R. Well_order r"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 344 | shows "omax R \<in> R" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 345 | using assms omax_isOmax unfolding isOmax_def by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 346 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 347 | lemma Well_order_omax: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 348 | assumes "finite R" and "R \<noteq> {}" and "\<forall>r\<in>R. Well_order r"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 349 | shows "Well_order (omax R)" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 350 | using assms apply - apply(drule omax_in) by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 351 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 352 | lemma omax_maxim: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 353 | assumes "finite R" and "\<forall> r \<in> R. Well_order r" and "r \<in> R" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 354 | shows "r \<le>o omax R" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 355 | using assms omax_isOmax unfolding isOmax_def by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 356 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 357 | lemma omax_ordLeq: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 358 | assumes "finite R" and "R \<noteq> {}" and *: "\<forall> r \<in> R. r \<le>o p"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 359 | shows "omax R \<le>o p" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 360 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 361 | have "\<forall> r \<in> R. Well_order r" using * unfolding ordLeq_def by simp | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 362 | thus ?thesis using assms omax_in by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 363 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 364 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 365 | lemma omax_ordLess: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 366 | assumes "finite R" and "R \<noteq> {}" and *: "\<forall> r \<in> R. r <o p"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 367 | shows "omax R <o p" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 368 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 369 | have "\<forall> r \<in> R. Well_order r" using * unfolding ordLess_def by simp | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 370 | thus ?thesis using assms omax_in by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 371 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 372 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 373 | lemma omax_ordLeq_elim: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 374 | assumes "finite R" and "\<forall> r \<in> R. Well_order r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 375 | and "omax R \<le>o p" and "r \<in> R" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 376 | shows "r \<le>o p" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 377 | using assms omax_maxim[of R r] apply simp | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 378 | using ordLeq_transitive by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 379 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 380 | lemma omax_ordLess_elim: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 381 | assumes "finite R" and "\<forall> r \<in> R. Well_order r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 382 | and "omax R <o p" and "r \<in> R" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 383 | shows "r <o p" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 384 | using assms omax_maxim[of R r] apply simp | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 385 | using ordLeq_ordLess_trans by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 386 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 387 | lemma ordLeq_omax: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 388 | assumes "finite R" and "\<forall> r \<in> R. Well_order r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 389 | and "r \<in> R" and "p \<le>o r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 390 | shows "p \<le>o omax R" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 391 | using assms omax_maxim[of R r] apply simp | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 392 | using ordLeq_transitive by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 393 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 394 | lemma ordLess_omax: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 395 | assumes "finite R" and "\<forall> r \<in> R. Well_order r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 396 | and "r \<in> R" and "p <o r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 397 | shows "p <o omax R" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 398 | using assms omax_maxim[of R r] apply simp | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 399 | using ordLess_ordLeq_trans by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 400 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 401 | lemma omax_ordLeq_mono: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 402 | assumes P: "finite P" and R: "finite R" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 403 | and NE_P: "P \<noteq> {}" and Well_R: "\<forall> r \<in> R. Well_order r"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 404 | and LEQ: "\<forall> p \<in> P. \<exists> r \<in> R. p \<le>o r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 405 | shows "omax P \<le>o omax R" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 406 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 407 | let ?mp = "omax P" let ?mr = "omax R" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 408 |   {fix p assume "p : P"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 409 | then obtain r where r: "r : R" and "p \<le>o r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 410 | using LEQ by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 411 | moreover have "r <=o ?mr" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 412 | using r R Well_R omax_maxim by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 413 | ultimately have "p <=o ?mr" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 414 | using ordLeq_transitive by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 415 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 416 | thus "?mp <=o ?mr" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 417 | using NE_P P using omax_ordLeq by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 418 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 419 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 420 | lemma omax_ordLess_mono: | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 421 | assumes P: "finite P" and R: "finite R" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 422 | and NE_P: "P \<noteq> {}" and Well_R: "\<forall> r \<in> R. Well_order r"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 423 | and LEQ: "\<forall> p \<in> P. \<exists> r \<in> R. p <o r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 424 | shows "omax P <o omax R" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 425 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 426 | let ?mp = "omax P" let ?mr = "omax R" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 427 |   {fix p assume "p : P"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 428 | then obtain r where r: "r : R" and "p <o r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 429 | using LEQ by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 430 | moreover have "r <=o ?mr" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 431 | using r R Well_R omax_maxim by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 432 | ultimately have "p <o ?mr" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 433 | using ordLess_ordLeq_trans by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 434 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 435 | thus "?mp <o ?mr" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 436 | using NE_P P omax_ordLess by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 437 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 438 | |
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 439 | |
| 55102 | 440 | subsection {* Limit and succesor ordinals *}
 | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 441 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 442 | lemma embed_underS2: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 443 | assumes r: "Well_order r" and s: "Well_order s" and g: "embed r s g" and a: "a \<in> Field r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 444 | shows "g ` underS r a = underS s (g a)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 445 | using embed_underS[OF assms] unfolding bij_betw_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 446 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 447 | lemma bij_betw_insert: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 448 | assumes "b \<notin> A" and "f b \<notin> A'" and "bij_betw f A A'" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 449 | shows "bij_betw f (insert b A) (insert (f b) A')" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 450 | using notIn_Un_bij_betw[OF assms] by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 451 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 452 | context wo_rel | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 453 | begin | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 454 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 455 | lemma underS_induct: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 456 | assumes "\<And>a. (\<And> a1. a1 \<in> underS a \<Longrightarrow> P a1) \<Longrightarrow> P a" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 457 | shows "P a" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 458 | by (induct rule: well_order_induct) (rule assms, simp add: underS_def) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 459 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 460 | lemma suc_underS: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 461 | assumes B: "B \<subseteq> Field r" and A: "AboveS B \<noteq> {}" and b: "b \<in> B"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 462 | shows "b \<in> underS (suc B)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 463 | using suc_AboveS[OF B A] b unfolding underS_def AboveS_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 464 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 465 | lemma underS_supr: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 466 | assumes bA: "b \<in> underS (supr A)" and A: "A \<subseteq> Field r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 467 | shows "\<exists> a \<in> A. b \<in> underS a" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 468 | proof(rule ccontr, auto) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 469 | have bb: "b \<in> Field r" using bA unfolding underS_def Field_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 470 | assume "\<forall>a\<in>A. b \<notin> underS a" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 471 | hence 0: "\<forall>a \<in> A. (a,b) \<in> r" using A bA unfolding underS_def | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 472 | by simp (metis REFL in_mono max2_def max2_greater refl_on_domain) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 473 | have "(supr A, b) \<in> r" apply(rule supr_least[OF A bb]) using 0 by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 474 | thus False using bA unfolding underS_def by simp (metis ANTISYM antisymD) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 475 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 476 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 477 | lemma underS_suc: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 478 | assumes bA: "b \<in> underS (suc A)" and A: "A \<subseteq> Field r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 479 | shows "\<exists> a \<in> A. b \<in> under a" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 480 | proof(rule ccontr, auto) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 481 | have bb: "b \<in> Field r" using bA unfolding underS_def Field_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 482 | assume "\<forall>a\<in>A. b \<notin> under a" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 483 | hence 0: "\<forall>a \<in> A. a \<in> underS b" using A bA unfolding underS_def | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 484 | by simp (metis (lifting) bb max2_def max2_greater mem_Collect_eq under_def set_rev_mp) | 
| 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 485 | have "(suc A, b) \<in> r" apply(rule suc_least[OF A bb]) using 0 unfolding underS_def by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 486 | thus False using bA unfolding underS_def by simp (metis ANTISYM antisymD) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 487 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 488 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 489 | lemma (in wo_rel) in_underS_supr: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 490 | assumes j: "j \<in> underS i" and i: "i \<in> A" and A: "A \<subseteq> Field r" and AA: "Above A \<noteq> {}"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 491 | shows "j \<in> underS (supr A)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 492 | proof- | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 493 | have "(i,supr A) \<in> r" using supr_greater[OF A AA i] . | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 494 | thus ?thesis using j unfolding underS_def | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 495 | by simp (metis REFL TRANS max2_def max2_equals1 refl_on_domain transD) | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 496 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 497 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 498 | lemma inj_on_Field: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 499 | assumes A: "A \<subseteq> Field r" and f: "\<And> a b. \<lbrakk>a \<in> A; b \<in> A; a \<in> underS b\<rbrakk> \<Longrightarrow> f a \<noteq> f b" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 500 | shows "inj_on f A" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 501 | unfolding inj_on_def proof safe | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 502 | fix a b assume a: "a \<in> A" and b: "b \<in> A" and fab: "f a = f b" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 503 |   {assume "a \<in> underS b"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 504 | hence False using f[OF a b] fab by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 505 | } | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 506 | moreover | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 507 |   {assume "b \<in> underS a"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 508 | hence False using f[OF b a] fab by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 509 | } | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 510 | ultimately show "a = b" using TOTALS A a b unfolding underS_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 511 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 512 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 513 | lemma in_notinI: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 514 | assumes "(j,i) \<notin> r \<or> j = i" and "i \<in> Field r" and "j \<in> Field r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 515 | shows "(i,j) \<in> r" by (metis assms max2_def max2_greater_among) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 516 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 517 | lemma ofilter_init_seg_of: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 518 | assumes "ofilter F" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 519 | shows "Restr r F initial_segment_of r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 520 | using assms unfolding ofilter_def init_seg_of_def under_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 521 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 522 | lemma underS_init_seg_of_Collect: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 523 | assumes "\<And>j1 j2. \<lbrakk>j2 \<in> underS i; (j1, j2) \<in> r\<rbrakk> \<Longrightarrow> R j1 initial_segment_of R j2" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 524 | shows "{R j |j. j \<in> underS i} \<in> Chains init_seg_of"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 525 | unfolding Chains_def proof safe | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 526 | fix j ja assume jS: "j \<in> underS i" and jaS: "ja \<in> underS i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 527 | and init: "(R ja, R j) \<notin> init_seg_of" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 528 |   hence jja: "{j,ja} \<subseteq> Field r" and j: "j \<in> Field r" and ja: "ja \<in> Field r"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 529 | and jjai: "(j,i) \<in> r" "(ja,i) \<in> r" | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 530 |   and i: "i \<notin> {j,ja}" unfolding Field_def underS_def by auto
 | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 531 | have jj: "(j,j) \<in> r" and jaja: "(ja,ja) \<in> r" using j ja by (metis in_notinI)+ | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 532 | show "R j initial_segment_of R ja" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 533 | using jja init jjai i | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 534 | by (elim cases_Total3 disjE) (auto elim: cases_Total3 intro!: assms simp: underS_def) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 535 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 536 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 537 | lemma (in wo_rel) Field_init_seg_of_Collect: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 538 | assumes "\<And>j1 j2. \<lbrakk>j2 \<in> Field r; (j1, j2) \<in> r\<rbrakk> \<Longrightarrow> R j1 initial_segment_of R j2" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 539 | shows "{R j |j. j \<in> Field r} \<in> Chains init_seg_of"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 540 | unfolding Chains_def proof safe | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 541 | fix j ja assume jS: "j \<in> Field r" and jaS: "ja \<in> Field r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 542 | and init: "(R ja, R j) \<notin> init_seg_of" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 543 |   hence jja: "{j,ja} \<subseteq> Field r" and j: "j \<in> Field r" and ja: "ja \<in> Field r"
 | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 544 | unfolding Field_def underS_def by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 545 | have jj: "(j,j) \<in> r" and jaja: "(ja,ja) \<in> r" using j ja by (metis in_notinI)+ | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 546 | show "R j initial_segment_of R ja" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 547 | using jja init | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 548 | by (elim cases_Total3 disjE) (auto elim: cases_Total3 intro!: assms simp: Field_def) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 549 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 550 | |
| 55102 | 551 | subsubsection {* Successor and limit elements of an ordinal *}
 | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 552 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 553 | definition "succ i \<equiv> suc {i}"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 554 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 555 | definition "isSucc i \<equiv> \<exists> j. aboveS j \<noteq> {} \<and> i = succ j"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 556 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 557 | definition "zero = minim (Field r)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 558 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 559 | definition "isLim i \<equiv> \<not> isSucc i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 560 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 561 | lemma zero_smallest[simp]: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 562 | assumes "j \<in> Field r" shows "(zero, j) \<in> r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 563 | unfolding zero_def | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 564 | by (metis AboveS_Field assms subset_AboveS_UnderS subset_antisym subset_refl suc_def suc_least_AboveS) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 565 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 566 | lemma zero_in_Field: assumes "Field r \<noteq> {}"  shows "zero \<in> Field r"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 567 | using assms unfolding zero_def by (metis Field_ofilter minim_in ofilter_def) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 568 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 569 | lemma leq_zero_imp[simp]: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 570 | "(x, zero) \<in> r \<Longrightarrow> x = zero" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 571 | by (metis ANTISYM WELL antisymD well_order_on_domain zero_smallest) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 572 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 573 | lemma leq_zero[simp]: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 574 | assumes "Field r \<noteq> {}"  shows "(x, zero) \<in> r \<longleftrightarrow> x = zero"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 575 | using zero_in_Field[OF assms] in_notinI[of x zero] by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 576 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 577 | lemma under_zero[simp]: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 578 | assumes "Field r \<noteq> {}" shows "under zero = {zero}"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 579 | using assms unfolding under_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 580 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 581 | lemma underS_zero[simp,intro]: "underS zero = {}"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 582 | unfolding underS_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 583 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 584 | lemma isSucc_succ: "aboveS i \<noteq> {} \<Longrightarrow> isSucc (succ i)"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 585 | unfolding isSucc_def succ_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 586 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 587 | lemma succ_in_diff: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 588 | assumes "aboveS i \<noteq> {}"  shows "(i,succ i) \<in> r \<and> succ i \<noteq> i"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 589 | using assms suc_greater[of "{i}"] unfolding succ_def AboveS_def aboveS_def Field_def by auto
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 590 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 591 | lemmas succ_in[simp] = succ_in_diff[THEN conjunct1] | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 592 | lemmas succ_diff[simp] = succ_in_diff[THEN conjunct2] | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 593 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 594 | lemma succ_in_Field[simp]: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 595 | assumes "aboveS i \<noteq> {}"  shows "succ i \<in> Field r"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 596 | using succ_in[OF assms] unfolding Field_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 597 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 598 | lemma succ_not_in: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 599 | assumes "aboveS i \<noteq> {}" shows "(succ i, i) \<notin> r"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 600 | proof | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 601 | assume 1: "(succ i, i) \<in> r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 602 | hence "succ i \<in> Field r \<and> i \<in> Field r" unfolding Field_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 603 | hence "(i, succ i) \<in> r \<and> succ i \<noteq> i" using assms by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 604 | thus False using 1 by (metis ANTISYM antisymD) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 605 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 606 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 607 | lemma not_isSucc_zero: "\<not> isSucc zero" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 608 | proof | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 609 | assume "isSucc zero" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 610 | moreover | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 611 |   then obtain i where "aboveS i \<noteq> {}" and 1: "minim (Field r) = succ i"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 612 | unfolding isSucc_def zero_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 613 | hence "succ i \<in> Field r" by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 614 | ultimately show False by (metis REFL isSucc_def minim_least refl_on_domain | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 615 | subset_refl succ_in succ_not_in zero_def) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 616 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 617 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 618 | lemma isLim_zero[simp]: "isLim zero" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 619 | by (metis isLim_def not_isSucc_zero) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 620 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 621 | lemma succ_smallest: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 622 | assumes "(i,j) \<in> r" and "i \<noteq> j" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 623 | shows "(succ i, j) \<in> r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 624 | unfolding succ_def apply(rule suc_least) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 625 | using assms unfolding Field_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 626 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 627 | lemma isLim_supr: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 628 | assumes f: "i \<in> Field r" and l: "isLim i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 629 | shows "i = supr (underS i)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 630 | proof(rule equals_supr) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 631 | fix j assume j: "j \<in> Field r" and 1: "\<And> j'. j' \<in> underS i \<Longrightarrow> (j',j) \<in> r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 632 | show "(i,j) \<in> r" proof(intro in_notinI[OF _ f j], safe) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 633 | assume ji: "(j,i) \<in> r" "j \<noteq> i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 634 |     hence a: "aboveS j \<noteq> {}" unfolding aboveS_def by auto
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 635 | hence "i \<noteq> succ j" using l unfolding isLim_def isSucc_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 636 | moreover have "(succ j, i) \<in> r" using succ_smallest[OF ji] by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 637 | ultimately have "succ j \<in> underS i" unfolding underS_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 638 | hence "(succ j, j) \<in> r" using 1 by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 639 | thus False using succ_not_in[OF a] by simp | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 640 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 641 | qed(insert f, unfold underS_def Field_def, auto) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 642 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 643 | definition "pred i \<equiv> SOME j. j \<in> Field r \<and> aboveS j \<noteq> {} \<and> succ j = i"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 644 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 645 | lemma pred_Field_succ: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 646 | assumes "isSucc i" shows "pred i \<in> Field r \<and> aboveS (pred i) \<noteq> {} \<and> succ (pred i) = i"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 647 | proof- | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 648 |   obtain j where a: "aboveS j \<noteq> {}" and i: "i = succ j" using assms unfolding isSucc_def by auto
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 649 | have 1: "j \<in> Field r" "j \<noteq> i" unfolding Field_def i | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 650 | using succ_diff[OF a] a unfolding aboveS_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 651 | show ?thesis unfolding pred_def apply(rule someI_ex) using 1 i a by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 652 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 653 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 654 | lemmas pred_Field[simp] = pred_Field_succ[THEN conjunct1] | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 655 | lemmas aboveS_pred[simp] = pred_Field_succ[THEN conjunct2, THEN conjunct1] | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 656 | lemmas succ_pred[simp] = pred_Field_succ[THEN conjunct2, THEN conjunct2] | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 657 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 658 | lemma isSucc_pred_in: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 659 | assumes "isSucc i" shows "(pred i, i) \<in> r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 660 | proof- | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 661 | def j \<equiv> "pred i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 662 | have i: "i = succ j" using assms unfolding j_def by simp | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 663 |   have a: "aboveS j \<noteq> {}" unfolding j_def using assms by auto
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 664 | show ?thesis unfolding j_def[symmetric] unfolding i using succ_in[OF a] . | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 665 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 666 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 667 | lemma isSucc_pred_diff: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 668 | assumes "isSucc i" shows "pred i \<noteq> i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 669 | by (metis aboveS_pred assms succ_diff succ_pred) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 670 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 671 | (* todo: pred maximal, pred injective? *) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 672 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 673 | lemma succ_inj[simp]: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 674 | assumes "aboveS i \<noteq> {}" and "aboveS j \<noteq> {}"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 675 | shows "succ i = succ j \<longleftrightarrow> i = j" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 676 | proof safe | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 677 | assume s: "succ i = succ j" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 678 |   {assume "i \<noteq> j" and "(i,j) \<in> r"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 679 | hence "(succ i, j) \<in> r" using assms by (metis succ_smallest) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 680 | hence False using s assms by (metis succ_not_in) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 681 | } | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 682 | moreover | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 683 |   {assume "i \<noteq> j" and "(j,i) \<in> r"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 684 | hence "(succ j, i) \<in> r" using assms by (metis succ_smallest) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 685 | hence False using s assms by (metis succ_not_in) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 686 | } | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 687 | ultimately show "i = j" by (metis TOTALS WELL assms(1) assms(2) succ_in_diff well_order_on_domain) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 688 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 689 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 690 | lemma pred_succ[simp]: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 691 | assumes "aboveS j \<noteq> {}"  shows "pred (succ j) = j"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 692 | unfolding pred_def apply(rule some_equality) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 693 | using assms apply(force simp: Field_def aboveS_def) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 694 | by (metis assms succ_inj) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 695 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 696 | lemma less_succ[simp]: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 697 | assumes "aboveS i \<noteq> {}"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 698 | shows "(j, succ i) \<in> r \<longleftrightarrow> (j,i) \<in> r \<or> j = succ i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 699 | apply safe | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 700 | apply (metis WELL assms in_notinI well_order_on_domain suc_singl_pred succ_def succ_in_diff) | 
| 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 701 | apply (metis (hide_lams, full_types) REFL TRANS assms max2_def max2_equals1 refl_on_domain succ_in_Field succ_not_in transD) | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 702 | apply (metis assms in_notinI succ_in_Field) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 703 | done | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 704 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 705 | lemma underS_succ[simp]: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 706 | assumes "aboveS i \<noteq> {}"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 707 | shows "underS (succ i) = under i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 708 | unfolding underS_def under_def by (auto simp: assms succ_not_in) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 709 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 710 | lemma succ_mono: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 711 | assumes "aboveS j \<noteq> {}" and "(i,j) \<in> r"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 712 | shows "(succ i, succ j) \<in> r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 713 | by (metis (full_types) assms less_succ succ_smallest) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 714 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 715 | lemma under_succ[simp]: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 716 | assumes "aboveS i \<noteq> {}"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 717 | shows "under (succ i) = insert (succ i) (under i)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 718 | using less_succ[OF assms] unfolding under_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 719 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 720 | definition mergeSL :: "('a \<Rightarrow> 'b \<Rightarrow> 'b) \<Rightarrow> (('a \<Rightarrow> 'b) \<Rightarrow> 'a \<Rightarrow> 'b) \<Rightarrow> ('a \<Rightarrow> 'b) \<Rightarrow> 'a \<Rightarrow> 'b"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 721 | where | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 722 | "mergeSL S L f i \<equiv> | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 723 | if isSucc i then S (pred i) (f (pred i)) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 724 | else L f i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 725 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 726 | |
| 55102 | 727 | subsubsection {* Well-order recursion with (zero), succesor, and limit *}
 | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 728 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 729 | definition worecSL :: "('a \<Rightarrow> 'b \<Rightarrow> 'b) \<Rightarrow> (('a \<Rightarrow> 'b) \<Rightarrow> 'a \<Rightarrow> 'b) \<Rightarrow> 'a \<Rightarrow> 'b"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 730 | where "worecSL S L \<equiv> worec (mergeSL S L)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 731 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 732 | definition "adm_woL L \<equiv> \<forall>f g i. isLim i \<and> (\<forall>j\<in>underS i. f j = g j) \<longrightarrow> L f i = L g i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 733 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 734 | lemma mergeSL: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 735 | assumes "adm_woL L" shows "adm_wo (mergeSL S L)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 736 | unfolding adm_wo_def proof safe | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 737 | fix f g :: "'a => 'b" and i :: 'a | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 738 | assume 1: "\<forall>j\<in>underS i. f j = g j" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 739 | show "mergeSL S L f i = mergeSL S L g i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 740 | proof(cases "isSucc i") | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 741 | case True | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 742 | hence "pred i \<in> underS i" unfolding underS_def using isSucc_pred_in isSucc_pred_diff by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 743 | thus ?thesis using True 1 unfolding mergeSL_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 744 | next | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 745 | case False hence "isLim i" unfolding isLim_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 746 | thus ?thesis using assms False 1 unfolding mergeSL_def adm_woL_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 747 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 748 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 749 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 750 | lemma worec_fixpoint1: "adm_wo H \<Longrightarrow> worec H i = H (worec H) i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 751 | by (metis worec_fixpoint) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 752 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 753 | lemma worecSL_isSucc: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 754 | assumes a: "adm_woL L" and i: "isSucc i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 755 | shows "worecSL S L i = S (pred i) (worecSL S L (pred i))" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 756 | proof- | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 757 | let ?H = "mergeSL S L" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 758 | have "worecSL S L i = ?H (worec ?H) i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 759 | unfolding worecSL_def using worec_fixpoint1[OF mergeSL[OF a]] . | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 760 | also have "... = S (pred i) (worecSL S L (pred i))" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 761 | unfolding worecSL_def mergeSL_def using i by simp | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 762 | finally show ?thesis . | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 763 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 764 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 765 | lemma worecSL_succ: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 766 | assumes a: "adm_woL L" and i: "aboveS j \<noteq> {}"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 767 | shows "worecSL S L (succ j) = S j (worecSL S L j)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 768 | proof- | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 769 | def i \<equiv> "succ j" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 770 | have i: "isSucc i" by (metis i i_def isSucc_succ) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 771 | have ij: "j = pred i" unfolding i_def using assms by simp | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 772 | have 0: "succ (pred i) = i" using i by simp | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 773 | show ?thesis unfolding ij using worecSL_isSucc[OF a i] unfolding 0 . | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 774 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 775 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 776 | lemma worecSL_isLim: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 777 | assumes a: "adm_woL L" and i: "isLim i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 778 | shows "worecSL S L i = L (worecSL S L) i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 779 | proof- | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 780 | let ?H = "mergeSL S L" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 781 | have "worecSL S L i = ?H (worec ?H) i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 782 | unfolding worecSL_def using worec_fixpoint1[OF mergeSL[OF a]] . | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 783 | also have "... = L (worecSL S L) i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 784 | using i unfolding worecSL_def mergeSL_def isLim_def by simp | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 785 | finally show ?thesis . | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 786 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 787 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 788 | definition worecZSL :: "'b \<Rightarrow> ('a \<Rightarrow> 'b \<Rightarrow> 'b) \<Rightarrow> (('a \<Rightarrow> 'b) \<Rightarrow> 'a \<Rightarrow> 'b) \<Rightarrow> 'a \<Rightarrow> 'b"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 789 | where "worecZSL Z S L \<equiv> worecSL S (\<lambda> f a. if a = zero then Z else L f a)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 790 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 791 | lemma worecZSL_zero: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 792 | assumes a: "adm_woL L" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 793 | shows "worecZSL Z S L zero = Z" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 794 | proof- | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 795 | let ?L = "\<lambda> f a. if a = zero then Z else L f a" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 796 | have "worecZSL Z S L zero = ?L (worecZSL Z S L) zero" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 797 | unfolding worecZSL_def apply(rule worecSL_isLim) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 798 | using assms unfolding adm_woL_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 799 | also have "... = Z" by simp | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 800 | finally show ?thesis . | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 801 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 802 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 803 | lemma worecZSL_succ: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 804 | assumes a: "adm_woL L" and i: "aboveS j \<noteq> {}"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 805 | shows "worecZSL Z S L (succ j) = S j (worecZSL Z S L j)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 806 | unfolding worecZSL_def apply(rule worecSL_succ) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 807 | using assms unfolding adm_woL_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 808 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 809 | lemma worecZSL_isLim: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 810 | assumes a: "adm_woL L" and "isLim i" and "i \<noteq> zero" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 811 | shows "worecZSL Z S L i = L (worecZSL Z S L) i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 812 | proof- | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 813 | let ?L = "\<lambda> f a. if a = zero then Z else L f a" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 814 | have "worecZSL Z S L i = ?L (worecZSL Z S L) i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 815 | unfolding worecZSL_def apply(rule worecSL_isLim) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 816 | using assms unfolding adm_woL_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 817 | also have "... = L (worecZSL Z S L) i" using assms by simp | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 818 | finally show ?thesis . | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 819 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 820 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 821 | |
| 55102 | 822 | subsubsection {* Well-order succ-lim induction *}
 | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 823 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 824 | lemma ord_cases: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 825 | obtains j where "i = succ j" and "aboveS j \<noteq> {}"  | "isLim i"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 826 | by (metis isLim_def isSucc_def) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 827 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 828 | lemma well_order_inductSL[case_names Suc Lim]: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 829 | assumes SUCC: "\<And>i. \<lbrakk>aboveS i \<noteq> {}; P i\<rbrakk> \<Longrightarrow> P (succ i)" and
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 830 | LIM: "\<And>i. \<lbrakk>isLim i; \<And>j. j \<in> underS i \<Longrightarrow> P j\<rbrakk> \<Longrightarrow> P i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 831 | shows "P i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 832 | proof(induction rule: well_order_induct) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 833 | fix i assume 0: "\<forall>j. j \<noteq> i \<and> (j, i) \<in> r \<longrightarrow> P j" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 834 | show "P i" proof(cases i rule: ord_cases) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 835 |     fix j assume i: "i = succ j" and j: "aboveS j \<noteq> {}"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 836 | hence "j \<noteq> i \<and> (j, i) \<in> r" by (metis succ_diff succ_in) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 837 | hence 1: "P j" using 0 by simp | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 838 | show "P i" unfolding i apply(rule SUCC) using 1 j by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 839 | qed(insert 0 LIM, unfold underS_def, auto) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 840 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 841 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 842 | lemma well_order_inductZSL[case_names Zero Suc Lim]: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 843 | assumes ZERO: "P zero" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 844 | and SUCC: "\<And>i. \<lbrakk>aboveS i \<noteq> {}; P i\<rbrakk> \<Longrightarrow> P (succ i)" and
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 845 | LIM: "\<And>i. \<lbrakk>isLim i; i \<noteq> zero; \<And>j. j \<in> underS i \<Longrightarrow> P j\<rbrakk> \<Longrightarrow> P i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 846 | shows "P i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 847 | apply(induction rule: well_order_inductSL) using assms by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 848 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 849 | (* Succesor and limit ordinals *) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 850 | definition "isSuccOrd \<equiv> \<exists> j \<in> Field r. \<forall> i \<in> Field r. (i,j) \<in> r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 851 | definition "isLimOrd \<equiv> \<not> isSuccOrd" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 852 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 853 | lemma isLimOrd_succ: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 854 | assumes isLimOrd and "i \<in> Field r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 855 | shows "succ i \<in> Field r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 856 | using assms unfolding isLimOrd_def isSuccOrd_def | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 857 | by (metis REFL in_notinI refl_on_domain succ_smallest) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 858 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 859 | lemma isLimOrd_aboveS: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 860 | assumes l: isLimOrd and i: "i \<in> Field r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 861 | shows "aboveS i \<noteq> {}"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 862 | proof- | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 863 | obtain j where "j \<in> Field r" and "(j,i) \<notin> r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 864 | using assms unfolding isLimOrd_def isSuccOrd_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 865 | hence "(i,j) \<in> r \<and> j \<noteq> i" by (metis i max2_def max2_greater) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 866 | thus ?thesis unfolding aboveS_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 867 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 868 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 869 | lemma succ_aboveS_isLimOrd: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 870 | assumes "\<forall> i \<in> Field r. aboveS i \<noteq> {} \<and> succ i \<in> Field r"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 871 | shows isLimOrd | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 872 | unfolding isLimOrd_def isSuccOrd_def proof safe | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 873 | fix j assume j: "j \<in> Field r" "\<forall>i\<in>Field r. (i, j) \<in> r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 874 | hence "(succ j, j) \<in> r" using assms by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 875 |   moreover have "aboveS j \<noteq> {}" using assms j unfolding aboveS_def by auto
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 876 | ultimately show False by (metis succ_not_in) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 877 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 878 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 879 | lemma isLim_iff: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 880 | assumes l: "isLim i" and j: "j \<in> underS i" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 881 | shows "\<exists> k. k \<in> underS i \<and> j \<in> underS k" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 882 | proof- | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 883 |   have a: "aboveS j \<noteq> {}" using j unfolding underS_def aboveS_def by auto
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 884 | show ?thesis apply(rule exI[of _ "succ j"]) apply safe | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 885 | using assms a unfolding underS_def isLim_def | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 886 | apply (metis (lifting, full_types) isSucc_def mem_Collect_eq succ_smallest) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 887 | by (metis (lifting, full_types) a mem_Collect_eq succ_diff succ_in) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 888 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 889 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 890 | end (* context wo_rel *) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 891 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 892 | abbreviation "zero \<equiv> wo_rel.zero" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 893 | abbreviation "succ \<equiv> wo_rel.succ" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 894 | abbreviation "pred \<equiv> wo_rel.pred" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 895 | abbreviation "isSucc \<equiv> wo_rel.isSucc" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 896 | abbreviation "isLim \<equiv> wo_rel.isLim" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 897 | abbreviation "isLimOrd \<equiv> wo_rel.isLimOrd" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 898 | abbreviation "isSuccOrd \<equiv> wo_rel.isSuccOrd" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 899 | abbreviation "adm_woL \<equiv> wo_rel.adm_woL" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 900 | abbreviation "worecSL \<equiv> wo_rel.worecSL" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 901 | abbreviation "worecZSL \<equiv> wo_rel.worecZSL" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 902 | |
| 55102 | 903 | |
| 904 | subsection {* Projections of wellorders *}
 | |
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 905 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 906 | definition "oproj r s f \<equiv> Field s \<subseteq> f ` (Field r) \<and> compat r s f" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 907 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 908 | lemma oproj_in: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 909 | assumes "oproj r s f" and "(a,a') \<in> r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 910 | shows "(f a, f a') \<in> s" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 911 | using assms unfolding oproj_def compat_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 912 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 913 | lemma oproj_Field: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 914 | assumes f: "oproj r s f" and a: "a \<in> Field r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 915 | shows "f a \<in> Field s" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 916 | using oproj_in[OF f] a unfolding Field_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 917 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 918 | lemma oproj_Field2: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 919 | assumes f: "oproj r s f" and a: "b \<in> Field s" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 920 | shows "\<exists> a \<in> Field r. f a = b" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 921 | using assms unfolding oproj_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 922 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 923 | lemma oproj_under: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 924 | assumes f: "oproj r s f" and a: "a \<in> under r a'" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 925 | shows "f a \<in> under s (f a')" | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 926 | using oproj_in[OF f] a unfolding under_def by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 927 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 928 | (* An ordinal is embedded in another whenever it is embedded as an order | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 929 | (not necessarily as initial segment):*) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 930 | theorem embedI: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 931 | assumes r: "Well_order r" and s: "Well_order s" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 932 | and f: "\<And> a. a \<in> Field r \<Longrightarrow> f a \<in> Field s \<and> f ` underS r a \<subseteq> underS s (f a)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 933 | shows "\<exists> g. embed r s g" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 934 | proof- | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 935 | interpret r!: wo_rel r by unfold_locales (rule r) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 936 | interpret s!: wo_rel s by unfold_locales (rule s) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 937 | let ?G = "\<lambda> g a. suc s (g ` underS r a)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 938 | def g \<equiv> "worec r ?G" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 939 | have adm: "adm_wo r ?G" unfolding r.adm_wo_def image_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 940 | (* *) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 941 |   {fix a assume "a \<in> Field r"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 942 | hence "bij_betw g (under r a) (under s (g a)) \<and> | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 943 | g a \<in> under s (f a)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 944 | proof(induction a rule: r.underS_induct) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 945 | case (1 a) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 946 | hence a: "a \<in> Field r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 947 | and IH1a: "\<And> a1. a1 \<in> underS r a \<Longrightarrow> inj_on g (under r a1)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 948 | and IH1b: "\<And> a1. a1 \<in> underS r a \<Longrightarrow> g ` under r a1 = under s (g a1)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 949 | and IH2: "\<And> a1. a1 \<in> underS r a \<Longrightarrow> g a1 \<in> under s (f a1)" | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 950 | unfolding underS_def Field_def bij_betw_def by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 951 | have fa: "f a \<in> Field s" using f[OF a] by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 952 | have g: "g a = suc s (g ` underS r a)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 953 | using r.worec_fixpoint[OF adm] unfolding g_def fun_eq_iff by simp | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 954 | have A0: "g ` underS r a \<subseteq> Field s" | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 955 | using IH1b by (metis IH2 image_subsetI in_mono under_Field) | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 956 |      {fix a1 assume a1: "a1 \<in> underS r a"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 957 | from IH2[OF this] have "g a1 \<in> under s (f a1)" . | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 958 | moreover have "f a1 \<in> underS s (f a)" using f[OF a] a1 by auto | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 959 | ultimately have "g a1 \<in> underS s (f a)" by (metis s.ANTISYM s.TRANS under_underS_trans) | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 960 | } | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 961 | hence "f a \<in> AboveS s (g ` underS r a)" unfolding AboveS_def | 
| 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 962 | using fa by simp (metis (lifting, full_types) mem_Collect_eq underS_def) | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 963 |      hence A: "AboveS s (g ` underS r a) \<noteq> {}" by auto
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 964 | have B: "\<And> a1. a1 \<in> underS r a \<Longrightarrow> g a1 \<in> underS s (g a)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 965 | unfolding g apply(rule s.suc_underS[OF A0 A]) by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 966 |      {fix a1 a2 assume a2: "a2 \<in> underS r a" and 1: "a1 \<in> underS r a2"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 967 |       hence a12: "{a1,a2} \<subseteq> under r a2" and "a1 \<noteq> a2" using r.REFL a
 | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 968 | unfolding underS_def under_def refl_on_def Field_def by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 969 | hence "g a1 \<noteq> g a2" using IH1a[OF a2] unfolding inj_on_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 970 | hence "g a1 \<in> underS s (g a2)" using IH1b[OF a2] a12 | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 971 | unfolding underS_def under_def by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 972 | } note C = this | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 973 | have ga: "g a \<in> Field s" unfolding g using s.suc_inField[OF A0 A] . | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 974 | have aa: "a \<in> under r a" | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 975 | using a r.REFL unfolding under_def underS_def refl_on_def by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 976 | show ?case proof safe | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 977 | show "bij_betw g (under r a) (under s (g a))" unfolding bij_betw_def proof safe | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 978 | show "inj_on g (under r a)" proof(rule r.inj_on_Field) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 979 | fix a1 a2 assume "a1 \<in> under r a" and a2: "a2 \<in> under r a" and a1: "a1 \<in> underS r a2" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 980 | hence a22: "a2 \<in> under r a2" and a12: "a1 \<in> under r a2" "a1 \<noteq> a2" | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 981 | using a r.REFL unfolding under_def underS_def refl_on_def by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 982 | show "g a1 \<noteq> g a2" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 983 | proof(cases "a2 = a") | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 984 | case False hence "a2 \<in> underS r a" | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 985 | using a2 unfolding underS_def under_def by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 986 | from IH1a[OF this] show ?thesis using a12 a22 unfolding inj_on_def by auto | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 987 | qed(insert B a1, unfold underS_def, auto) | 
| 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 988 | qed(unfold under_def Field_def, auto) | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 989 | next | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 990 | fix a1 assume a1: "a1 \<in> under r a" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 991 | show "g a1 \<in> under s (g a)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 992 | proof(cases "a1 = a") | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 993 | case True thus ?thesis | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 994 | using ga s.REFL unfolding refl_on_def under_def by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 995 | next | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 996 | case False | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 997 | hence a1: "a1 \<in> underS r a" using a1 unfolding underS_def under_def by auto | 
| 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 998 | thus ?thesis using B unfolding underS_def under_def by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 999 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1000 | next | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1001 | fix b1 assume b1: "b1 \<in> under s (g a)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1002 | show "b1 \<in> g ` under r a" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1003 | proof(cases "b1 = g a") | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1004 | case True thus ?thesis using aa by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1005 | next | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1006 | case False | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 1007 | hence "b1 \<in> underS s (g a)" using b1 unfolding underS_def under_def by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1008 | from s.underS_suc[OF this[unfolded g] A0] | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1009 | obtain a1 where a1: "a1 \<in> underS r a" and b1: "b1 \<in> under s (g a1)" by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1010 | obtain a2 where "a2 \<in> under r a1" and b1: "b1 = g a2" using IH1b[OF a1] b1 by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1011 | hence "a2 \<in> under r a" using a1 | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 1012 | by (metis r.ANTISYM r.TRANS in_mono underS_subset_under under_underS_trans) | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1013 | thus ?thesis using b1 by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1014 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1015 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1016 | next | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1017 | have "(g a, f a) \<in> s" unfolding g proof(rule s.suc_least[OF A0]) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1018 | fix b1 assume "b1 \<in> g ` underS r a" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1019 | then obtain a1 where a1: "b1 = g a1" and a1: "a1 \<in> underS r a" by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1020 | hence "b1 \<in> underS s (f a)" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1021 | using a by (metis `\<And>a1. a1 \<in> underS r a \<Longrightarrow> g a1 \<in> underS s (f a)`) | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 1022 | thus "f a \<noteq> b1 \<and> (b1, f a) \<in> s" unfolding underS_def by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1023 | qed(insert fa, auto) | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 1024 | thus "g a \<in> under s (f a)" unfolding under_def by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1025 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1026 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1027 | } | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1028 | thus ?thesis unfolding embed_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1029 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1030 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1031 | corollary ordLeq_def2: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1032 | "r \<le>o s \<longleftrightarrow> Well_order r \<and> Well_order s \<and> | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1033 | (\<exists> f. \<forall> a \<in> Field r. f a \<in> Field s \<and> f ` underS r a \<subseteq> underS s (f a))" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1034 | using embed_in_Field[of r s] embed_underS2[of r s] embedI[of r s] | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1035 | unfolding ordLeq_def by fast | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1036 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1037 | lemma iso_oproj: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1038 | assumes r: "Well_order r" and s: "Well_order s" and f: "iso r s f" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1039 | shows "oproj r s f" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1040 | using assms unfolding oproj_def | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1041 | by (subst (asm) iso_iff3) (auto simp: bij_betw_def) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1042 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1043 | theorem oproj_embed: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1044 | assumes r: "Well_order r" and s: "Well_order s" and f: "oproj r s f" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1045 | shows "\<exists> g. embed s r g" | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 1046 | proof (rule embedI[OF s r, of "inv_into (Field r) f"], unfold underS_def, safe) | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1047 | fix b assume "b \<in> Field s" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1048 | thus "inv_into (Field r) f b \<in> Field r" using oproj_Field2[OF f] by (metis imageI inv_into_into) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1049 | next | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1050 | fix a b assume "b \<in> Field s" "a \<noteq> b" "(a, b) \<in> s" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1051 | "inv_into (Field r) f a = inv_into (Field r) f b" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1052 | with f show False by (auto dest!: inv_into_injective simp: Field_def oproj_def) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1053 | next | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1054 | fix a b assume *: "b \<in> Field s" "a \<noteq> b" "(a, b) \<in> s" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1055 |   { assume "(inv_into (Field r) f a, inv_into (Field r) f b) \<notin> r"
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1056 | moreover | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1057 | from *(3) have "a \<in> Field s" unfolding Field_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1058 | with *(1,2) have | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1059 | "inv_into (Field r) f a \<in> Field r" "inv_into (Field r) f b \<in> Field r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1060 | "inv_into (Field r) f a \<noteq> inv_into (Field r) f b" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1061 | by (auto dest!: oproj_Field2[OF f] inv_into_injective intro!: inv_into_into) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1062 | ultimately have "(inv_into (Field r) f b, inv_into (Field r) f a) \<in> r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1063 | using r by (auto simp: well_order_on_def linear_order_on_def total_on_def) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1064 | with f[unfolded oproj_def compat_def] *(1) `a \<in> Field s` | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1065 | f_inv_into_f[of b f "Field r"] f_inv_into_f[of a f "Field r"] | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1066 | have "(b, a) \<in> s" by (metis in_mono) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1067 | with *(2,3) s have False | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1068 | by (auto simp: well_order_on_def linear_order_on_def partial_order_on_def antisym_def) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1069 | } thus "(inv_into (Field r) f a, inv_into (Field r) f b) \<in> r" by blast | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1070 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1071 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1072 | corollary oproj_ordLeq: | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1073 | assumes r: "Well_order r" and s: "Well_order s" and f: "oproj r s f" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1074 | shows "s \<le>o r" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1075 | using oproj_embed[OF assms] r s unfolding ordLeq_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54545diff
changeset | 1076 | |
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1077 | end |