| author | desharna | 
| Fri, 21 Mar 2025 14:21:44 +0100 | |
| changeset 82313 | df99e867c63e | 
| parent 82299 | a0693649e9c6 | 
| child 82802 | 547335b41005 | 
| permissions | -rw-r--r-- | 
| 58127 
b7cab82f488e
renamed '(BNF_)Constructions_on_Wellorders' to '(BNF_)Wellorder_Constructions'
 blanchet parents: 
56191diff
changeset | 1 | (* Title: HOL/BNF_Wellorder_Constructions.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 | |
| 55059 | 5 | Constructions on wellorders as needed by bounded natural functors. | 
| 48975 
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 | |
| 60758 | 8 | section \<open>Constructions on Wellorders as Needed by Bounded Natural Functors\<close> | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 9 | |
| 58127 
b7cab82f488e
renamed '(BNF_)Constructions_on_Wellorders' to '(BNF_)Wellorder_Constructions'
 blanchet parents: 
56191diff
changeset | 10 | theory BNF_Wellorder_Constructions | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 11 | imports BNF_Wellorder_Embedding | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 12 | begin | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 13 | |
| 60758 | 14 | text \<open>In this section, we study basic constructions on well-orders, such as restriction to | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 15 | a set/order filter, copy via direct images, ordinal-like sum of disjoint well-orders, | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 16 | and bounded square. We also define between well-orders | 
| 61799 | 17 | the relations \<open>ordLeq\<close>, of being embedded (abbreviated \<open>\<le>o\<close>), | 
| 18 | \<open>ordLess\<close>, of being strictly embedded (abbreviated \<open><o\<close>), and | |
| 19 | \<open>ordIso\<close>, of being isomorphic (abbreviated \<open>=o\<close>). We study the | |
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 20 | connections between these relations, order filters, and the aforementioned constructions. | 
| 61799 | 21 | A main result of this section is that \<open><o\<close> is well-founded.\<close> | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 22 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 23 | |
| 60758 | 24 | subsection \<open>Restriction to a set\<close> | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 25 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 26 | abbreviation Restr :: "'a rel \<Rightarrow> 'a set \<Rightarrow> 'a rel" | 
| 72127 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 27 | where "Restr r A \<equiv> r Int (A \<times> A)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 28 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 29 | lemma Restr_subset: | 
| 72127 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 30 | "A \<le> B \<Longrightarrow> Restr (Restr r B) A = Restr r A" | 
| 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 31 | by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 32 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 33 | lemma Restr_Field: "Restr r (Field r) = r" | 
| 72127 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 34 | unfolding Field_def by auto | 
| 48975 
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 Refl_Restr: "Refl r \<Longrightarrow> Refl(Restr r A)" | 
| 72127 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 37 | unfolding refl_on_def Field_def by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 38 | |
| 63561 
fba08009ff3e
add lemmas contributed by Peter Gammie
 Andreas Lochbihler parents: 
63092diff
changeset | 39 | lemma linear_order_on_Restr: | 
| 
fba08009ff3e
add lemmas contributed by Peter Gammie
 Andreas Lochbihler parents: 
63092diff
changeset | 40 | "linear_order_on A r \<Longrightarrow> linear_order_on (A \<inter> above r x) (Restr r (above r x))" | 
| 72127 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 41 | by(simp add: order_on_defs refl_on_def trans_def antisym_def total_on_def)(safe; blast) | 
| 63561 
fba08009ff3e
add lemmas contributed by Peter Gammie
 Andreas Lochbihler parents: 
63092diff
changeset | 42 | |
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 43 | lemma antisym_Restr: | 
| 72127 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 44 | "antisym r \<Longrightarrow> antisym(Restr r A)" | 
| 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 45 | unfolding antisym_def Field_def by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 46 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 47 | lemma Total_Restr: | 
| 72127 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 48 | "Total r \<Longrightarrow> Total(Restr r A)" | 
| 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 49 | unfolding total_on_def Field_def by auto | 
| 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 50 | |
| 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 51 | lemma total_on_imp_Total_Restr: "total_on A r \<Longrightarrow> Total (Restr r A)" | 
| 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 52 | by (auto simp: Field_def total_on_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 53 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 54 | lemma trans_Restr: | 
| 72127 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 55 | "trans r \<Longrightarrow> trans(Restr r A)" | 
| 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 56 | unfolding trans_def Field_def by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 57 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 58 | lemma Preorder_Restr: | 
| 82248 | 59 | assumes "Preorder r" | 
| 60 | shows "Preorder(Restr r A)" | |
| 61 | unfolding preorder_on_def | |
| 62 | proof (intro conjI) | |
| 63 | have "r \<subseteq> Field r \<times> Field r" and "Refl r" and "trans r" | |
| 64 | using \<open>Preorder r\<close> | |
| 65 | by (simp_all only: preorder_on_def) | |
| 66 | ||
| 67 | show "Restr r A \<subseteq> Field (Restr r A) \<times> Field (Restr r A)" | |
| 68 | using \<open>r \<subseteq> Field r \<times> Field r\<close> | |
| 69 | by (auto simp add: Field_def) | |
| 70 | ||
| 71 | show "Refl (Restr r A)" | |
| 72 | using Refl_Restr[OF \<open>Refl r\<close>] . | |
| 73 | ||
| 74 | show "trans (Restr r A)" | |
| 75 | using trans_Restr[OF \<open>trans r\<close>] . | |
| 76 | qed | |
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 77 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 78 | lemma Partial_order_Restr: | 
| 72127 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 79 | "Partial_order r \<Longrightarrow> Partial_order(Restr r A)" | 
| 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 80 | unfolding partial_order_on_def by (simp add: Preorder_Restr antisym_Restr) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 81 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 82 | lemma Linear_order_Restr: | 
| 72127 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 83 | "Linear_order r \<Longrightarrow> Linear_order(Restr r A)" | 
| 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 84 | unfolding linear_order_on_def by (simp add: Partial_order_Restr Total_Restr) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 85 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 86 | lemma Well_order_Restr: | 
| 72127 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 87 | assumes "Well_order r" | 
| 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 88 | shows "Well_order(Restr r A)" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 89 | using assms | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 90 | by (auto simp: well_order_on_def Linear_order_Restr elim: wf_subset) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 91 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 92 | lemma Field_Restr_subset: "Field(Restr r A) \<le> A" | 
| 72127 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 93 | by (auto simp add: Field_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 94 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 95 | lemma Refl_Field_Restr: | 
| 72127 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 96 | "Refl r \<Longrightarrow> Field(Restr r A) = (Field r) Int A" | 
| 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 97 | unfolding refl_on_def Field_def by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 98 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 99 | lemma Refl_Field_Restr2: | 
| 72127 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 100 | "\<lbrakk>Refl r; A \<le> Field r\<rbrakk> \<Longrightarrow> Field(Restr r A) = A" | 
| 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 101 | by (auto simp add: Refl_Field_Restr) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 102 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 103 | lemma well_order_on_Restr: | 
| 72127 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 104 | assumes WELL: "Well_order r" and SUB: "A \<le> Field r" | 
| 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 105 | shows "well_order_on A (Restr r A)" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 106 | using assms | 
| 72127 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 107 | using Well_order_Restr[of r A] Refl_Field_Restr2[of r A] | 
| 
a0768f16bccd
one last lemma about Total and Restr
 paulson <lp15@cam.ac.uk> parents: 
67613diff
changeset | 108 | order_on_defs[of "Field r" r] by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 109 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 110 | |
| 60758 | 111 | subsection \<open>Order filters versus restrictions and embeddings\<close> | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 112 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 113 | lemma Field_Restr_ofilter: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 114 | "\<lbrakk>Well_order r; wo_rel.ofilter r A\<rbrakk> \<Longrightarrow> Field(Restr r A) = A" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 115 | by (auto simp add: wo_rel_def wo_rel.ofilter_def wo_rel.REFL Refl_Field_Restr2) | 
| 48975 
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 | lemma ofilter_Restr_under: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 118 | assumes WELL: "Well_order r" and OF: "wo_rel.ofilter r A" and IN: "a \<in> A" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 119 | shows "under (Restr r A) a = under r a" | 
| 75669 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 120 | unfolding wo_rel.ofilter_def under_def | 
| 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 121 | proof | 
| 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 122 |   show "{b. (b, a) \<in> Restr r A} \<subseteq> {b. (b, a) \<in> r}"
 | 
| 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 123 | by auto | 
| 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 124 | next | 
| 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 125 | have "under r a \<subseteq> A" | 
| 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 126 | proof | 
| 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 127 | fix x | 
| 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 128 | assume *: "x \<in> under r a" | 
| 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 129 | then have "a \<in> Field r" | 
| 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 130 | unfolding under_def using Field_def by fastforce | 
| 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 131 | then show "x \<in> A" using IN assms * | 
| 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 132 | by (auto simp add: wo_rel_def wo_rel.ofilter_def) | 
| 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 133 | qed | 
| 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 134 |   then show "{b. (b, a) \<in> r} \<subseteq> {b. (b, a) \<in> Restr r A}"
 | 
| 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 135 | unfolding under_def using assms by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 136 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 137 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 138 | lemma ofilter_embed: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 139 | assumes "Well_order r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 140 | shows "wo_rel.ofilter r A = (A \<le> Field r \<and> embed (Restr r A) r id)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 141 | proof | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 142 | assume *: "wo_rel.ofilter r A" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 143 | show "A \<le> Field r \<and> embed (Restr r A) r id" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 144 | unfolding embed_def | 
| 75669 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 145 | proof safe | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 146 | fix a assume "a \<in> A" thus "a \<in> Field r" using assms * | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 147 | by (auto simp add: wo_rel_def wo_rel.ofilter_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 148 | next | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 149 | fix a assume "a \<in> Field (Restr r A)" | 
| 75669 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 150 | thus "bij_betw id (under (Restr r A) a) (under r (id a))" using assms * | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 151 | by (simp add: ofilter_Restr_under Field_Restr_ofilter) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 152 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 153 | next | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 154 | assume *: "A \<le> Field r \<and> embed (Restr r A) r id" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 155 | hence "Field(Restr r A) \<le> Field r" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 156 | using assms embed_Field[of "Restr r A" r id] id_def | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 157 | Well_order_Restr[of r] by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 158 |   {fix a assume "a \<in> A"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 159 | hence "a \<in> Field(Restr r A)" using * assms | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 160 | by (simp add: order_on_defs Refl_Field_Restr2) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 161 | hence "bij_betw id (under (Restr r A) a) (under r a)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 162 | using * unfolding embed_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 163 | hence "under r a \<le> under (Restr r A) a" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 164 | unfolding bij_betw_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 165 | also have "\<dots> \<le> Field(Restr r A)" by (simp add: under_Field) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 166 | also have "\<dots> \<le> A" by (simp add: Field_Restr_subset) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 167 | finally have "under r a \<le> A" . | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 168 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 169 | thus "wo_rel.ofilter r A" using assms * by (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 | 170 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 171 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 172 | lemma ofilter_Restr_Int: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 173 | assumes WELL: "Well_order r" and OFA: "wo_rel.ofilter r A" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 174 | shows "wo_rel.ofilter (Restr r B) (A Int B)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 175 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 176 | let ?rB = "Restr r B" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 177 | 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 | 178 | hence Refl: "Refl r" by (simp add: wo_rel.REFL) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 179 | hence Field: "Field ?rB = Field r Int B" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 180 | using Refl_Field_Restr by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 181 | have WellB: "wo_rel ?rB \<and> Well_order ?rB" using WELL | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 182 | by (simp add: Well_order_Restr wo_rel_def) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 183 | (* Main proof *) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 184 | show ?thesis using WellB assms | 
| 75669 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 185 | unfolding wo_rel.ofilter_def under_def ofilter_def | 
| 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 186 | proof safe | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 187 | fix a assume "a \<in> A" and *: "a \<in> B" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 188 | hence "a \<in> Field r" using OFA Well 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 | 189 | with * show "a \<in> Field ?rB" using Field by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 190 | next | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 191 | fix a b assume "a \<in> A" and "(b,a) \<in> r" | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 192 | thus "b \<in> A" using Well OFA by (auto simp add: wo_rel.ofilter_def under_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 193 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 194 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 195 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 196 | lemma ofilter_Restr_subset: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 197 | assumes WELL: "Well_order r" and OFA: "wo_rel.ofilter r A" and SUB: "A \<le> B" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 198 | shows "wo_rel.ofilter (Restr r B) A" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 199 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 200 | have "A Int B = A" using SUB by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 201 | thus ?thesis using assms ofilter_Restr_Int[of r A B] by auto | 
| 
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 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 204 | lemma ofilter_subset_embed: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 205 | assumes WELL: "Well_order r" and | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 206 | OFA: "wo_rel.ofilter r A" and OFB: "wo_rel.ofilter r B" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 207 | shows "(A \<le> B) = (embed (Restr r A) (Restr r B) id)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 208 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 209 | let ?rA = "Restr r A" let ?rB = "Restr r B" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 210 | 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 | 211 | hence Refl: "Refl r" by (simp add: wo_rel.REFL) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 212 | hence FieldA: "Field ?rA = Field r Int A" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 213 | using Refl_Field_Restr by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 214 | have FieldB: "Field ?rB = Field r Int B" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 215 | using Refl Refl_Field_Restr by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 216 | have WellA: "wo_rel ?rA \<and> Well_order ?rA" using WELL | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 217 | by (simp add: Well_order_Restr wo_rel_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 218 | have WellB: "wo_rel ?rB \<and> Well_order ?rB" using WELL | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 219 | by (simp add: Well_order_Restr wo_rel_def) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 220 | (* Main proof *) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 221 | show ?thesis | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 222 | proof | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 223 | assume *: "A \<le> B" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 224 | hence "wo_rel.ofilter (Restr r B) A" using assms | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 225 | by (simp add: ofilter_Restr_subset) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 226 | hence "embed (Restr ?rB A) (Restr r B) id" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 227 | using WellB ofilter_embed[of "?rB" A] by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 228 | thus "embed (Restr r A) (Restr r B) id" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 229 | using * by (simp add: Restr_subset) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 230 | next | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 231 | assume *: "embed (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 | 232 |     {fix a assume **: "a \<in> A"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 233 | hence "a \<in> Field r" using Well OFA by (auto simp add: wo_rel.ofilter_def) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 234 | with ** FieldA have "a \<in> Field ?rA" by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 235 | hence "a \<in> Field ?rB" using * WellA embed_Field[of ?rA ?rB id] by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 236 | hence "a \<in> B" using FieldB by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 237 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 238 | thus "A \<le> B" by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 239 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 240 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 241 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 242 | lemma ofilter_subset_embedS_iso: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 243 | assumes WELL: "Well_order r" and | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 244 | OFA: "wo_rel.ofilter r A" and OFB: "wo_rel.ofilter r B" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 245 | shows "((A < B) = (embedS (Restr r A) (Restr r B) id)) \<and> | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 246 | ((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 | 247 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 248 | let ?rA = "Restr r A" let ?rB = "Restr r B" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 249 | 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 | 250 | hence Refl: "Refl r" by (simp add: wo_rel.REFL) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 251 | hence "Field ?rA = Field r Int A" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 252 | using Refl_Field_Restr by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 253 | hence FieldA: "Field ?rA = A" using OFA Well | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 254 | by (auto simp add: wo_rel.ofilter_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 255 | have "Field ?rB = Field r Int B" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 256 | using Refl Refl_Field_Restr by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 257 | hence FieldB: "Field ?rB = B" using OFB Well | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 258 | by (auto simp add: wo_rel.ofilter_def) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 259 | (* Main proof *) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 260 | show ?thesis unfolding embedS_def iso_def | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 261 | using assms ofilter_subset_embed[of r A B] | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 262 | FieldA FieldB bij_betw_id_iff[of A B] by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 263 | qed | 
| 
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 | lemma ofilter_subset_embedS: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 266 | assumes WELL: "Well_order r" and | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 267 | OFA: "wo_rel.ofilter r A" and OFB: "wo_rel.ofilter r B" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 268 | shows "(A < B) = embedS (Restr r A) (Restr r B) id" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 269 | using assms by (simp add: ofilter_subset_embedS_iso) | 
| 48975 
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 | lemma embed_implies_iso_Restr: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 272 | assumes WELL: "Well_order r" and WELL': "Well_order r'" and | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 273 | EMB: "embed r' r f" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 274 | shows "iso r' (Restr r (f ` (Field r'))) f" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 275 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 276 | let ?A' = "Field r'" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 277 | let ?r'' = "Restr r (f ` ?A')" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 278 | have 0: "Well_order ?r''" using WELL Well_order_Restr by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 279 | have 1: "wo_rel.ofilter r (f ` ?A')" using assms embed_Field_ofilter by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 280 | hence "Field ?r'' = f ` (Field r')" using WELL Field_Restr_ofilter by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 281 | hence "bij_betw f ?A' (Field ?r'')" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 282 | using EMB embed_inj_on WELL' unfolding bij_betw_def by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 283 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 284 |   {have "\<forall>a b. (a,b) \<in> r' \<longrightarrow> a \<in> Field r' \<and> b \<in> Field r'"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 285 | unfolding Field_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 286 | hence "compat r' ?r'' f" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 287 | using assms embed_iff_compat_inj_on_ofilter | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 288 | unfolding compat_def by blast | 
| 48975 
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 | ultimately show ?thesis using WELL' 0 iso_iff3 by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 291 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 292 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 293 | |
| 60758 | 294 | subsection \<open>The strict inclusion on proper ofilters is well-founded\<close> | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 295 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 296 | definition ofilterIncl :: "'a rel \<Rightarrow> 'a set rel" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 297 | where | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 298 |     "ofilterIncl r \<equiv> {(A,B). wo_rel.ofilter r A \<and> A \<noteq> Field r \<and>
 | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 299 | wo_rel.ofilter r B \<and> B \<noteq> Field r \<and> A < B}" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 300 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 301 | lemma wf_ofilterIncl: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 302 | assumes WELL: "Well_order r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 303 | shows "wf(ofilterIncl r)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 304 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 305 | have Well: "wo_rel r" using WELL by (simp add: wo_rel_def) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 306 | hence Lo: "Linear_order r" by (simp add: wo_rel.LIN) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 307 | let ?h = "(\<lambda> A. wo_rel.suc r A)" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 308 | let ?rS = "r - Id" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 309 | have "wf ?rS" using WELL by (simp add: order_on_defs) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 310 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 311 | have "compat (ofilterIncl r) ?rS ?h" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 312 | proof(unfold compat_def ofilterIncl_def, | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 313 | intro allI impI, simp, elim conjE) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 314 | fix A B | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 315 | assume *: "wo_rel.ofilter r A" "A \<noteq> Field r" and | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 316 | **: "wo_rel.ofilter r B" "B \<noteq> Field r" and ***: "A < B" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 317 | then obtain a and b where 0: "a \<in> Field r \<and> b \<in> Field r" and | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 318 | 1: "A = underS r a \<and> B = underS r b" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 319 | using Well by (auto simp add: wo_rel.ofilter_underS_Field) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 320 | hence "a \<noteq> b" using *** by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 321 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 322 | have "(a,b) \<in> r" using 0 1 Lo *** | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 323 | by (auto simp add: underS_incl_iff) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 324 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 325 | have "a = wo_rel.suc r A \<and> b = wo_rel.suc r B" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 326 | using Well 0 1 by (simp add: wo_rel.suc_underS) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 327 | ultimately | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 328 | show "(wo_rel.suc r A, wo_rel.suc r B) \<in> r \<and> wo_rel.suc r A \<noteq> wo_rel.suc r B" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 329 | by simp | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 330 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 331 | ultimately show "wf (ofilterIncl r)" by (simp add: compat_wf) | 
| 
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 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 334 | |
| 60758 | 335 | subsection \<open>Ordering the well-orders by existence of embeddings\<close> | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 336 | |
| 60758 | 337 | text \<open>We define three relations between well-orders: | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 338 | \begin{itemize}
 | 
| 61799 | 339 | \item \<open>ordLeq\<close>, of being embedded (abbreviated \<open>\<le>o\<close>); | 
| 340 | \item \<open>ordLess\<close>, of being strictly embedded (abbreviated \<open><o\<close>); | |
| 341 | \item \<open>ordIso\<close>, of being isomorphic (abbreviated \<open>=o\<close>). | |
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 342 | \end{itemize}
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 343 | % | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 344 | The prefix "ord" and the index "o" in these names stand for "ordinal-like". | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 345 | These relations shall be proved to be inter-connected in a similar fashion as the trio | 
| 61799 | 346 | \<open>\<le>\<close>, \<open><\<close>, \<open>=\<close> associated to a total order on a set. | 
| 60758 | 347 | \<close> | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 348 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 349 | definition ordLeq :: "('a rel * 'a' rel) set"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 350 | where | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 351 |     "ordLeq = {(r,r'). Well_order r \<and> Well_order r' \<and> (\<exists>f. embed r r' f)}"
 | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 352 | |
| 80932 
261cd8722677
standardize mixfix annotations via "isabelle update -u mixfix_cartouches -l Pure HOL" --- to simplify systematic editing;
 wenzelm parents: 
76950diff
changeset | 353 | abbreviation ordLeq2 :: "'a rel \<Rightarrow> 'a' rel \<Rightarrow> bool" (infix \<open><=o\<close> 50) | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 354 | where "r <=o r' \<equiv> (r,r') \<in> ordLeq" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 355 | |
| 80932 
261cd8722677
standardize mixfix annotations via "isabelle update -u mixfix_cartouches -l Pure HOL" --- to simplify systematic editing;
 wenzelm parents: 
76950diff
changeset | 356 | abbreviation ordLeq3 :: "'a rel \<Rightarrow> 'a' rel \<Rightarrow> bool" (infix \<open>\<le>o\<close> 50) | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 357 | where "r \<le>o r' \<equiv> r <=o r'" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 358 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 359 | definition ordLess :: "('a rel * 'a' rel) set"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 360 | where | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 361 |     "ordLess = {(r,r'). Well_order r \<and> Well_order r' \<and> (\<exists>f. embedS r r' f)}"
 | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 362 | |
| 80932 
261cd8722677
standardize mixfix annotations via "isabelle update -u mixfix_cartouches -l Pure HOL" --- to simplify systematic editing;
 wenzelm parents: 
76950diff
changeset | 363 | abbreviation ordLess2 :: "'a rel \<Rightarrow> 'a' rel \<Rightarrow> bool" (infix \<open><o\<close> 50) | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 364 | where "r <o r' \<equiv> (r,r') \<in> ordLess" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 365 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 366 | definition ordIso :: "('a rel * 'a' rel) set"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 367 | where | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 368 |     "ordIso = {(r,r'). Well_order r \<and> Well_order r' \<and> (\<exists>f. iso r r' f)}"
 | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 369 | |
| 80932 
261cd8722677
standardize mixfix annotations via "isabelle update -u mixfix_cartouches -l Pure HOL" --- to simplify systematic editing;
 wenzelm parents: 
76950diff
changeset | 370 | abbreviation ordIso2 :: "'a rel \<Rightarrow> 'a' rel \<Rightarrow> bool" (infix \<open>=o\<close> 50) | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 371 | where "r =o r' \<equiv> (r,r') \<in> ordIso" | 
| 48975 
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 | lemmas ordRels_def = ordLeq_def ordLess_def ordIso_def | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 374 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 375 | lemma ordLeq_Well_order_simp: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 376 | assumes "r \<le>o r'" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 377 | shows "Well_order r \<and> Well_order r'" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 378 | using assms unfolding ordLeq_def by simp | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 379 | |
| 61799 | 380 | text\<open>Notice that the relations \<open>\<le>o\<close>, \<open><o\<close>, \<open>=o\<close> connect well-orders | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 381 | on potentially {\em distinct} types. However, some of the lemmas below, including the next one,
 | 
| 61799 | 382 | restrict implicitly the type of these relations to \<open>(('a rel) * ('a rel)) set\<close> , i.e.,
 | 
| 383 | to \<open>'a rel rel\<close>.\<close> | |
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 384 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 385 | lemma ordLeq_reflexive: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 386 | "Well_order r \<Longrightarrow> r \<le>o r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 387 | unfolding ordLeq_def using id_embed[of r] by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 388 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 389 | lemma ordLeq_transitive[trans]: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 390 | assumes "r \<le>o r'" and "r' \<le>o r''" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 391 | shows "r \<le>o r''" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 392 | using assms by (auto simp: ordLeq_def intro: comp_embed) | 
| 48975 
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 ordLeq_total: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 395 | "\<lbrakk>Well_order r; Well_order r'\<rbrakk> \<Longrightarrow> r \<le>o r' \<or> r' \<le>o r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 396 | unfolding ordLeq_def using wellorders_totally_ordered by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 397 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 398 | lemma ordIso_reflexive: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 399 | "Well_order r \<Longrightarrow> r =o r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 400 | unfolding ordIso_def using id_iso[of r] by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 401 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 402 | lemma ordIso_transitive[trans]: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 403 | assumes *: "r =o r'" and **: "r' =o r''" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 404 | shows "r =o r''" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 405 | using assms by (auto simp: ordIso_def intro: comp_iso) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 406 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 407 | lemma ordIso_symmetric: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 408 | assumes *: "r =o r'" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 409 | shows "r' =o r" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 410 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 411 | obtain f where 1: "Well_order r \<and> Well_order r'" and | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 412 | 2: "embed r r' f \<and> bij_betw f (Field r) (Field r')" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 413 | using * by (auto simp add: ordIso_def iso_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 414 | let ?f' = "inv_into (Field r) f" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 415 | have "embed r' r ?f' \<and> bij_betw ?f' (Field r') (Field r)" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 416 | using 1 2 by (simp add: bij_betw_inv_into inv_into_Field_embed_bij_betw) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 417 | thus "r' =o r" unfolding ordIso_def using 1 by (auto simp add: iso_def) | 
| 
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 ordLeq_ordLess_trans[trans]: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 421 | assumes "r \<le>o r'" and " r' <o r''" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 422 | shows "r <o r''" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 423 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 424 | have "Well_order r \<and> Well_order r''" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 425 | using assms unfolding ordLeq_def ordLess_def by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 426 | thus ?thesis using assms unfolding ordLeq_def ordLess_def | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 427 | using embed_comp_embedS by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 428 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 429 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 430 | lemma ordLess_ordLeq_trans[trans]: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 431 | assumes "r <o r'" and " r' \<le>o r''" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 432 | shows "r <o r''" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 433 | using embedS_comp_embed assms by (force simp: ordLeq_def ordLess_def) | 
| 48975 
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 | lemma ordLeq_ordIso_trans[trans]: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 436 | assumes "r \<le>o r'" and " r' =o r''" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 437 | shows "r \<le>o r''" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 438 | using embed_comp_iso assms by (force simp: ordLeq_def ordIso_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 439 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 440 | lemma ordIso_ordLeq_trans[trans]: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 441 | assumes "r =o r'" and " r' \<le>o r''" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 442 | shows "r \<le>o r''" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 443 | using iso_comp_embed assms by (force simp: ordLeq_def ordIso_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 444 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 445 | lemma ordLess_ordIso_trans[trans]: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 446 | assumes "r <o r'" and " r' =o r''" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 447 | shows "r <o r''" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 448 | using embedS_comp_iso assms by (force simp: ordLess_def ordIso_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 449 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 450 | lemma ordIso_ordLess_trans[trans]: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 451 | assumes "r =o r'" and " r' <o r''" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 452 | shows "r <o r''" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 453 | using iso_comp_embedS assms by (force simp: ordLess_def ordIso_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 454 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 455 | lemma ordLess_not_embed: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 456 | assumes "r <o r'" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 457 | shows "\<not>(\<exists>f'. embed r' r f')" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 458 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 459 | obtain f where 1: "Well_order r \<and> Well_order r'" and 2: "embed r r' f" and | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 460 | 3: " \<not> bij_betw f (Field r) (Field r')" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 461 | using assms unfolding ordLess_def by (auto simp add: embedS_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 462 |   {fix f' assume *: "embed r' r f'"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 463 | hence "bij_betw f (Field r) (Field r')" using 1 2 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 464 | by (simp add: embed_bothWays_Field_bij_betw) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 465 | with 3 have False by contradiction | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 466 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 467 | thus ?thesis by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 468 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 469 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 470 | lemma ordLess_Field: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 471 | assumes OL: "r1 <o r2" and EMB: "embed r1 r2 f" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 472 | shows "\<not> (f`(Field r1) = Field r2)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 473 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 474 | let ?A1 = "Field r1" let ?A2 = "Field r2" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 475 | obtain g where | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 476 | 0: "Well_order r1 \<and> Well_order r2" and | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 477 | 1: "embed r1 r2 g \<and> \<not>(bij_betw g ?A1 ?A2)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 478 | using OL unfolding ordLess_def by (auto simp add: embedS_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 479 | hence "\<forall>a \<in> ?A1. f a = g a" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 480 | using 0 EMB embed_unique[of r1] by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 481 | hence "\<not>(bij_betw f ?A1 ?A2)" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 482 | using 1 bij_betw_cong[of ?A1] by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 483 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 484 | have "inj_on f ?A1" using EMB 0 by (simp add: embed_inj_on) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 485 | ultimately show ?thesis by (simp add: bij_betw_def) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 486 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 487 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 488 | lemma ordLess_iff: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 489 | "r <o r' = (Well_order r \<and> Well_order r' \<and> \<not>(\<exists>f'. embed r' r f'))" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 490 | proof | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 491 | assume *: "r <o r'" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 492 | hence "\<not>(\<exists>f'. embed r' r f')" using ordLess_not_embed[of r r'] by simp | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 493 | with * show "Well_order r \<and> Well_order r' \<and> \<not> (\<exists>f'. embed r' r f')" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 494 | unfolding ordLess_def by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 495 | next | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 496 | assume *: "Well_order r \<and> Well_order r' \<and> \<not> (\<exists>f'. embed r' r f')" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 497 | then obtain f where 1: "embed r r' f" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 498 | using wellorders_totally_ordered[of r r'] by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 499 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 500 |   {assume "bij_betw f (Field r) (Field r')"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 501 | with * 1 have "embed r' r (inv_into (Field r) f) " | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 502 | using inv_into_Field_embed_bij_betw[of r r' f] by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 503 | with * have False by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 504 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 505 | ultimately show "(r,r') \<in> ordLess" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 506 | unfolding ordLess_def using * by (fastforce simp add: embedS_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 507 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 508 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 509 | lemma ordLess_irreflexive: "\<not> r <o r" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 510 | using id_embed[of r] by (auto simp: ordLess_iff) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 511 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 512 | lemma ordLeq_iff_ordLess_or_ordIso: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 513 | "r \<le>o r' = (r <o r' \<or> r =o r')" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 514 | unfolding ordRels_def embedS_defs iso_defs by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 515 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 516 | lemma ordIso_iff_ordLeq: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 517 | "(r =o r') = (r \<le>o r' \<and> r' \<le>o r)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 518 | proof | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 519 | assume "r =o r'" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 520 | then obtain f where 1: "Well_order r \<and> Well_order r' \<and> | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 521 | embed r r' f \<and> bij_betw f (Field r) (Field r')" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 522 | unfolding ordIso_def iso_defs by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 523 | hence "embed r r' f \<and> embed r' r (inv_into (Field r) f)" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 524 | by (simp add: inv_into_Field_embed_bij_betw) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 525 | thus "r \<le>o r' \<and> r' \<le>o r" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 526 | unfolding ordLeq_def using 1 by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 527 | next | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 528 | assume "r \<le>o 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 | 529 | then obtain f and g where 1: "Well_order r \<and> Well_order r' \<and> | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 530 | embed r r' f \<and> embed r' r g" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 531 | unfolding ordLeq_def by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 532 | hence "iso r r' f" by (auto simp add: embed_bothWays_iso) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 533 | thus "r =o r'" unfolding ordIso_def using 1 by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 534 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 535 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 536 | lemma not_ordLess_ordLeq: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 537 | "r <o r' \<Longrightarrow> \<not> r' \<le>o r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 538 | using ordLess_ordLeq_trans ordLess_irreflexive by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 539 | |
| 75624 | 540 | lemma not_ordLeq_ordLess: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 541 | "r \<le>o r' \<Longrightarrow> \<not> r' <o r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 542 | using not_ordLess_ordLeq by blast | 
| 75624 | 543 | |
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 544 | lemma ordLess_or_ordLeq: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 545 | assumes WELL: "Well_order r" and WELL': "Well_order r'" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 546 | shows "r <o r' \<or> r' \<le>o r" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 547 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 548 | have "r \<le>o r' \<or> r' \<le>o r" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 549 | using assms by (simp add: ordLeq_total) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 550 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 551 |   {assume "\<not> r <o r' \<and> r \<le>o r'"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 552 | hence "r =o r'" using ordLeq_iff_ordLess_or_ordIso by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 553 | hence "r' \<le>o r" using ordIso_symmetric ordIso_iff_ordLeq by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 554 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 555 | ultimately show ?thesis by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 556 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 557 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 558 | lemma not_ordLess_ordIso: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 559 | "r <o r' \<Longrightarrow> \<not> r =o r'" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 560 | using ordLess_ordIso_trans ordIso_symmetric ordLess_irreflexive by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 561 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 562 | lemma not_ordLeq_iff_ordLess: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 563 | assumes WELL: "Well_order r" and WELL': "Well_order r'" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 564 | shows "(\<not> r' \<le>o r) = (r <o r')" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 565 | using assms not_ordLess_ordLeq ordLess_or_ordLeq by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 566 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 567 | lemma not_ordLess_iff_ordLeq: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 568 | assumes WELL: "Well_order r" and WELL': "Well_order r'" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 569 | shows "(\<not> r' <o r) = (r \<le>o r')" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 570 | using assms not_ordLess_ordLeq ordLess_or_ordLeq by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 571 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 572 | lemma ordLess_transitive[trans]: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 573 | "\<lbrakk>r <o r'; r' <o r''\<rbrakk> \<Longrightarrow> r <o r''" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 574 | using ordLess_ordLeq_trans ordLeq_iff_ordLess_or_ordIso by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 575 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 576 | corollary ordLess_trans: "trans ordLess" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 577 | unfolding trans_def using ordLess_transitive by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 578 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 579 | lemmas ordIso_equivalence = ordIso_transitive ordIso_reflexive ordIso_symmetric | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 580 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 581 | lemma ordIso_imp_ordLeq: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 582 | "r =o r' \<Longrightarrow> r \<le>o r'" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 583 | using ordIso_iff_ordLeq by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 584 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 585 | lemma ordLess_imp_ordLeq: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 586 | "r <o r' \<Longrightarrow> r \<le>o r'" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 587 | using ordLeq_iff_ordLess_or_ordIso by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 588 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 589 | lemma ofilter_subset_ordLeq: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 590 | assumes WELL: "Well_order r" and | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 591 | OFA: "wo_rel.ofilter r A" and OFB: "wo_rel.ofilter r B" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 592 | shows "(A \<le> B) = (Restr r A \<le>o Restr r B)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 593 | proof | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 594 | assume "A \<le> B" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 595 | thus "Restr r A \<le>o Restr r B" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 596 | unfolding ordLeq_def using assms | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 597 | Well_order_Restr Well_order_Restr ofilter_subset_embed by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 598 | next | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 599 | assume *: "Restr r A \<le>o Restr r B" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 600 | then obtain f where "embed (Restr r A) (Restr r B) f" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 601 | unfolding ordLeq_def by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 602 |   {assume "B < A"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 603 | hence "Restr r B <o Restr r A" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 604 | unfolding ordLess_def using assms | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 605 | Well_order_Restr Well_order_Restr ofilter_subset_embedS by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 606 | hence False using * not_ordLess_ordLeq by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 607 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 608 | thus "A \<le> B" using OFA OFB WELL | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 609 | wo_rel_def[of r] wo_rel.ofilter_linord[of r A B] by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 610 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 611 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 612 | lemma ofilter_subset_ordLess: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 613 | assumes WELL: "Well_order r" and | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 614 | OFA: "wo_rel.ofilter r A" and OFB: "wo_rel.ofilter r B" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 615 | shows "(A < B) = (Restr r A <o Restr r B)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 616 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 617 | let ?rA = "Restr r A" let ?rB = "Restr r B" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 618 | have 1: "Well_order ?rA \<and> Well_order ?rB" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 619 | using WELL Well_order_Restr by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 620 | have "(A < B) = (\<not> B \<le> A)" using assms | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 621 | wo_rel_def wo_rel.ofilter_linord[of r A B] by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 622 | also have "\<dots> = (\<not> Restr r B \<le>o Restr r A)" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 623 | using assms ofilter_subset_ordLeq by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 624 | also have "\<dots> = (Restr r A <o Restr r B)" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 625 | using 1 not_ordLeq_iff_ordLess by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 626 | finally show ?thesis . | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 627 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 628 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 629 | lemma ofilter_ordLess: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 630 | "\<lbrakk>Well_order r; wo_rel.ofilter r A\<rbrakk> \<Longrightarrow> (A < Field r) = (Restr r A <o r)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 631 | by (simp add: ofilter_subset_ordLess wo_rel.Field_ofilter | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 632 | wo_rel_def Restr_Field) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 633 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 634 | corollary underS_Restr_ordLess: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 635 |   assumes "Well_order r" and "Field r \<noteq> {}"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 636 | shows "Restr r (underS r a) <o r" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 637 | proof- | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 638 | have "underS r a < Field r" using assms | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 639 | by (simp add: underS_Field3) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 640 | thus ?thesis using assms | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 641 | by (simp add: ofilter_ordLess wo_rel.underS_ofilter wo_rel_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 642 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 643 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 644 | lemma embed_ordLess_ofilterIncl: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 645 | assumes | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 646 | OL12: "r1 <o r2" and OL23: "r2 <o r3" and | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 647 | EMB13: "embed r1 r3 f13" and EMB23: "embed r2 r3 f23" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 648 | shows "(f13`(Field r1), f23`(Field r2)) \<in> (ofilterIncl r3)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 649 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 650 | have OL13: "r1 <o r3" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 651 | using OL12 OL23 using ordLess_transitive by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 652 | let ?A1 = "Field r1" let ?A2 ="Field r2" let ?A3 ="Field r3" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 653 | obtain f12 g23 where | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 654 | 0: "Well_order r1 \<and> Well_order r2 \<and> Well_order r3" and | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 655 | 1: "embed r1 r2 f12 \<and> \<not>(bij_betw f12 ?A1 ?A2)" and | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 656 | 2: "embed r2 r3 g23 \<and> \<not>(bij_betw g23 ?A2 ?A3)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 657 | using OL12 OL23 by (auto simp add: ordLess_def embedS_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 658 | hence "\<forall>a \<in> ?A2. f23 a = g23 a" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 659 | using EMB23 embed_unique[of r2 r3] by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 660 | hence 3: "\<not>(bij_betw f23 ?A2 ?A3)" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 661 | using 2 bij_betw_cong[of ?A2 f23 g23] by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 662 | (* *) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 663 | have 4: "wo_rel.ofilter r2 (f12 ` ?A1) \<and> f12 ` ?A1 \<noteq> ?A2" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 664 | using 0 1 OL12 by (simp add: embed_Field_ofilter ordLess_Field) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 665 | have 5: "wo_rel.ofilter r3 (f23 ` ?A2) \<and> f23 ` ?A2 \<noteq> ?A3" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 666 | using 0 EMB23 OL23 by (simp add: embed_Field_ofilter ordLess_Field) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 667 | have 6: "wo_rel.ofilter r3 (f13 ` ?A1) \<and> f13 ` ?A1 \<noteq> ?A3" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 668 | using 0 EMB13 OL13 by (simp add: embed_Field_ofilter ordLess_Field) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 669 | (* *) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 670 | have "f12 ` ?A1 < ?A2" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 671 | using 0 4 by (auto simp add: wo_rel_def wo_rel.ofilter_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 672 | moreover have "inj_on f23 ?A2" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 673 | using EMB23 0 by (simp add: wo_rel_def embed_inj_on) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 674 | ultimately | 
| 76281 
457f1cba78fb
renamed lemma inj_on_strict_subset to image_strict_mono for symmetry with image_mono and to distinguish from inj_on_subset
 desharna parents: 
75669diff
changeset | 675 | have "f23 ` (f12 ` ?A1) < f23 ` ?A2" by (simp add: image_strict_mono) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 676 | moreover | 
| 67091 | 677 |   {have "embed r1 r3 (f23 \<circ> f12)"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 678 | using 1 EMB23 0 by (auto simp add: comp_embed) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 679 | hence "\<forall>a \<in> ?A1. f23(f12 a) = f13 a" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 680 | using EMB13 0 embed_unique[of r1 r3 "f23 \<circ> f12" f13] by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 681 | hence "f23 ` (f12 ` ?A1) = f13 ` ?A1" by force | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 682 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 683 | ultimately | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 684 | have "f13 ` ?A1 < f23 ` ?A2" by simp | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 685 | (* *) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 686 | with 5 6 show ?thesis | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 687 | unfolding ofilterIncl_def by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 688 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 689 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 690 | lemma ordLess_iff_ordIso_Restr: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 691 | assumes WELL: "Well_order r" and WELL': "Well_order r'" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 692 | shows "(r' <o r) = (\<exists>a \<in> Field r. r' =o Restr r (underS r a))" | 
| 75669 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 693 | proof safe | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 694 | fix a assume *: "a \<in> Field r" and **: "r' =o Restr r (underS r a)" | 
| 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 695 | hence "Restr r (underS r a) <o r" using WELL underS_Restr_ordLess[of r] by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 696 | thus "r' <o r" using ** ordIso_ordLess_trans by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 697 | next | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 698 | assume "r' <o r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 699 | then obtain f where 1: "Well_order r \<and> Well_order r'" and | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 700 | 2: "embed r' r f \<and> f ` (Field r') \<noteq> Field r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 701 | unfolding ordLess_def embedS_def[abs_def] bij_betw_def using embed_inj_on by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 702 | hence "wo_rel.ofilter r (f ` (Field r'))" using embed_Field_ofilter by blast | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 703 | then obtain a where 3: "a \<in> Field r" and 4: "underS r a = f ` (Field r')" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 704 | using 1 2 by (auto simp add: wo_rel.ofilter_underS_Field wo_rel_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 705 | have "iso r' (Restr r (f ` (Field r'))) f" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 706 | using embed_implies_iso_Restr 2 assms by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 707 | moreover have "Well_order (Restr r (f ` (Field r')))" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 708 | using WELL Well_order_Restr by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 709 | ultimately have "r' =o Restr r (f ` (Field r'))" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 710 | using WELL' unfolding ordIso_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 | 711 | hence "r' =o Restr r (underS r a)" using 4 by auto | 
| 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 712 | thus "\<exists>a \<in> Field r. r' =o Restr r (underS r a)" using 3 by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 713 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 714 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 715 | lemma internalize_ordLess: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 716 | "(r' <o r) = (\<exists>p. Field p < Field r \<and> r' =o p \<and> p <o r)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 717 | proof | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 718 | assume *: "r' <o r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 719 | hence 0: "Well_order r \<and> Well_order r'" unfolding ordLess_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 | 720 | with * obtain a where 1: "a \<in> Field r" and 2: "r' =o Restr r (underS r a)" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 721 | using ordLess_iff_ordIso_Restr by blast | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 722 | let ?p = "Restr r (underS r a)" | 
| 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 723 | have "wo_rel.ofilter r (underS r a)" using 0 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 724 | by (simp add: wo_rel_def wo_rel.underS_ofilter) | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 725 | hence "Field ?p = underS r a" using 0 Field_Restr_ofilter by blast | 
| 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 726 | hence "Field ?p < Field r" using underS_Field2 1 by fast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 727 | moreover have "?p <o r" using underS_Restr_ordLess[of r a] 0 1 by blast | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 728 | ultimately show "\<exists>p. Field p < Field r \<and> r' =o p \<and> p <o r" using 2 by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 729 | next | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 730 | assume "\<exists>p. Field p < Field r \<and> r' =o p \<and> p <o r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 731 | thus "r' <o r" using ordIso_ordLess_trans by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 732 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 733 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 734 | lemma internalize_ordLeq: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 735 | "(r' \<le>o r) = (\<exists>p. Field p \<le> Field r \<and> r' =o p \<and> p \<le>o r)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 736 | proof | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 737 | assume *: "r' \<le>o r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 738 | moreover | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 739 | have "r' <o r \<Longrightarrow> \<exists>p. Field p \<le> Field r \<and> r' =o p \<and> p \<le>o r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 740 | using ordLeq_iff_ordLess_or_ordIso internalize_ordLess[of r' r] by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 741 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 742 | have "r \<le>o r" using * ordLeq_def ordLeq_reflexive by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 743 | ultimately show "\<exists>p. Field p \<le> Field r \<and> r' =o p \<and> p \<le>o r" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 744 | using ordLeq_iff_ordLess_or_ordIso by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 745 | next | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 746 | assume "\<exists>p. Field p \<le> Field r \<and> r' =o p \<and> p \<le>o r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 747 | thus "r' \<le>o r" using ordIso_ordLeq_trans by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 748 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 749 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 750 | lemma ordLeq_iff_ordLess_Restr: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 751 | assumes WELL: "Well_order r" and WELL': "Well_order r'" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 752 | shows "(r \<le>o r') = (\<forall>a \<in> Field r. Restr r (underS r a) <o r')" | 
| 75669 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 753 | proof safe | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 754 | assume *: "r \<le>o r'" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 755 | fix a assume "a \<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 | 756 | hence "Restr r (underS r a) <o r" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 757 | using WELL underS_Restr_ordLess[of r] by blast | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 758 | thus "Restr r (underS r a) <o r'" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 759 | using * ordLess_ordLeq_trans by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 760 | next | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 761 | assume *: "\<forall>a \<in> Field r. Restr r (underS r a) <o r'" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 762 |   {assume "r' <o r"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 763 | then obtain a where "a \<in> Field r \<and> r' =o Restr r (underS r a)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 764 | using assms ordLess_iff_ordIso_Restr by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 765 | hence False using * not_ordLess_ordIso ordIso_symmetric by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 766 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 767 | thus "r \<le>o r'" using ordLess_or_ordLeq assms by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 768 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 769 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 770 | lemma finite_ordLess_infinite: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 771 | assumes WELL: "Well_order r" and WELL': "Well_order r'" and | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 772 | FIN: "finite(Field r)" and INF: "\<not>finite(Field r')" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 773 | shows "r <o r'" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 774 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 775 |   {assume "r' \<le>o r"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 776 | then obtain h where "inj_on h (Field r') \<and> h ` (Field r') \<le> Field r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 777 | unfolding ordLeq_def using assms embed_inj_on embed_Field by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 778 | hence False using finite_imageD finite_subset FIN INF by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 779 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 780 | thus ?thesis using WELL WELL' ordLess_or_ordLeq by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 781 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 782 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 783 | lemma finite_well_order_on_ordIso: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 784 | assumes FIN: "finite A" and | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 785 | WELL: "well_order_on A r" and WELL': "well_order_on A r'" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 786 | shows "r =o r'" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 787 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 788 | have 0: "Well_order r \<and> Well_order r' \<and> Field r = A \<and> Field r' = A" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 789 | using assms 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 | 790 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 791 | have "\<forall>r r'. well_order_on A r \<and> well_order_on A 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 | 792 | \<longrightarrow> r =o r'" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 793 | proof(clarify) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 794 | fix r r' assume *: "well_order_on A r" and **: "well_order_on A r'" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 795 | have 2: "Well_order r \<and> Well_order r' \<and> Field r = A \<and> Field r' = A" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 796 | 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 | 797 | assume "r \<le>o r'" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 798 | then obtain f where 1: "embed r r' f" and | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 799 | "inj_on f A \<and> f ` A \<le> A" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 800 | unfolding ordLeq_def using 2 embed_inj_on embed_Field by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 801 | hence "bij_betw f A A" unfolding bij_betw_def using FIN endo_inj_surj by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 802 | thus "r =o r'" unfolding ordIso_def iso_def[abs_def] using 1 2 by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 803 | qed | 
| 55811 | 804 | ultimately show ?thesis using assms ordLeq_total ordIso_symmetric by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 805 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 806 | |
| 61799 | 807 | subsection\<open>\<open><o\<close> is well-founded\<close> | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 808 | |
| 61799 | 809 | text \<open>Of course, it only makes sense to state that the \<open><o\<close> is well-founded | 
| 810 | on the restricted type \<open>'a rel rel\<close>. We prove this by first showing that, for any set | |
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 811 | of well-orders all embedded in a fixed well-order, the function mapping each well-order | 
| 61799 | 812 | in the set to an order filter of the fixed well-order is compatible w.r.t. to \<open><o\<close> versus | 
| 60758 | 813 | {\em strict inclusion}; and we already know that strict inclusion of order filters is well-founded.\<close>
 | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 814 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 815 | definition ord_to_filter :: "'a rel \<Rightarrow> 'a rel \<Rightarrow> 'a set" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 816 | where "ord_to_filter r0 r \<equiv> (SOME f. embed r r0 f) ` (Field r)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 817 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 818 | lemma ord_to_filter_compat: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 819 |   "compat (ordLess Int (ordLess\<inverse>``{r0} \<times> ordLess\<inverse>``{r0}))
 | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 820 | (ofilterIncl r0) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 821 | (ord_to_filter r0)" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 822 | proof(unfold compat_def ord_to_filter_def, clarify) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 823 | fix r1::"'a rel" and r2::"'a rel" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 824 | let ?A1 = "Field r1" let ?A2 ="Field r2" let ?A0 ="Field r0" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 825 | let ?phi10 = "\<lambda> f10. embed r1 r0 f10" let ?f10 = "SOME f. ?phi10 f" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 826 | let ?phi20 = "\<lambda> f20. embed r2 r0 f20" let ?f20 = "SOME f. ?phi20 f" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 827 | assume *: "r1 <o r0" "r2 <o r0" and **: "r1 <o r2" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 828 | hence "(\<exists>f. ?phi10 f) \<and> (\<exists>f. ?phi20 f)" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 829 | by (auto simp add: ordLess_def embedS_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 830 | hence "?phi10 ?f10 \<and> ?phi20 ?f20" by (auto simp add: someI_ex) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 831 | thus "(?f10 ` ?A1, ?f20 ` ?A2) \<in> ofilterIncl r0" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 832 | using * ** by (simp add: embed_ordLess_ofilterIncl) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 833 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 834 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 835 | theorem wf_ordLess: "wf ordLess" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 836 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 837 |   {fix r0 :: "('a \<times> 'a) set"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 838 | (* need to annotate here!*) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 839 |     let ?ordLess = "ordLess::('d rel * 'd rel) set"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 840 |     let ?R = "?ordLess Int (?ordLess\<inverse>``{r0} \<times> ?ordLess\<inverse>``{r0})"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 841 |     {assume Case1: "Well_order r0"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 842 | hence "wf ?R" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 843 | using wf_ofilterIncl[of r0] | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 844 | compat_wf[of ?R "ofilterIncl r0" "ord_to_filter r0"] | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 845 | ord_to_filter_compat[of r0] by auto | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 846 | } | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 847 | moreover | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 848 |     {assume Case2: "\<not> Well_order r0"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 849 |       hence "?R = {}" unfolding ordLess_def by auto
 | 
| 82299 | 850 | hence "wf ?R" by simp | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 851 | } | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 852 | ultimately have "wf ?R" by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 853 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 854 | thus ?thesis by (simp add: trans_wf_iff ordLess_trans) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 855 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 856 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 857 | corollary exists_minim_Well_order: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 858 |   assumes NE: "R \<noteq> {}" and WELL: "\<forall>r \<in> R. Well_order r"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 859 | shows "\<exists>r \<in> R. \<forall>r' \<in> R. r \<le>o r'" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 860 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 861 | obtain r where "r \<in> R \<and> (\<forall>r' \<in> R. \<not> r' <o r)" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 862 | using NE spec[OF spec[OF subst[OF wf_eq_minimal, of "%x. x", OF wf_ordLess]], of _ R] | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 863 | equals0I[of R] by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 864 | with not_ordLeq_iff_ordLess WELL show ?thesis by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 865 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 866 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 867 | |
| 60758 | 868 | subsection \<open>Copy via direct images\<close> | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 869 | |
| 61799 | 870 | text\<open>The direct image operator is the dual of the inverse image operator \<open>inv_image\<close> | 
| 871 | from \<open>Relation.thy\<close>. It is useful for transporting a well-order between | |
| 60758 | 872 | different types.\<close> | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 873 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 874 | definition dir_image :: "'a rel \<Rightarrow> ('a \<Rightarrow> 'a') \<Rightarrow> 'a' rel"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 875 | where | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 876 |     "dir_image r f = {(f a, f b)| a b. (a,b) \<in> r}"
 | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 877 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 878 | lemma dir_image_Field: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 879 | "Field(dir_image r f) = f ` (Field r)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 880 | unfolding dir_image_def Field_def Range_def Domain_def by fast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 881 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 882 | lemma dir_image_minus_Id: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 883 | "inj_on f (Field r) \<Longrightarrow> (dir_image r f) - Id = dir_image (r - Id) f" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 884 | unfolding inj_on_def Field_def dir_image_def by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 885 | |
| 82248 | 886 | lemma dir_image_subset: | 
| 887 | assumes "r \<subseteq> A \<times> B" | |
| 888 | shows "dir_image r f \<subseteq> f ` A \<times> f ` B" | |
| 889 | proof (rule subsetI) | |
| 890 | fix x | |
| 891 | assume "x \<in> dir_image r f" | |
| 892 | then obtain a b where "x = (f a, f b)" and "(a, b) \<in> r" | |
| 893 | unfolding dir_image_def by blast | |
| 894 | thus "x \<in> f ` A \<times> f ` B" | |
| 895 | using \<open>r \<subseteq> A \<times> B\<close> by auto | |
| 896 | qed | |
| 897 | ||
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 898 | lemma Refl_dir_image: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 899 | assumes "Refl r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 900 | shows "Refl(dir_image r f)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 901 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 902 |   {fix a' b'
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 903 | assume "(a',b') \<in> dir_image r f" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 904 | then obtain a b where 1: "a' = f a \<and> b' = f b \<and> (a,b) \<in> r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 905 | unfolding dir_image_def by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 906 | hence "a \<in> Field r \<and> b \<in> Field r" using Field_def by fastforce | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 907 | hence "(a,a) \<in> r \<and> (b,b) \<in> r" using assms by (simp add: refl_on_def) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 908 | with 1 have "(a',a') \<in> dir_image r f \<and> (b',b') \<in> dir_image r f" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 909 | unfolding dir_image_def by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 910 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 911 | thus ?thesis | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 912 | by(unfold refl_on_def Field_def Domain_def Range_def, auto) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 913 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 914 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 915 | lemma trans_dir_image: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 916 | assumes TRANS: "trans r" and INJ: "inj_on f (Field r)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 917 | shows "trans(dir_image r f)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 918 | unfolding trans_def | 
| 75669 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 919 | proof safe | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 920 | fix a' b' c' | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 921 | assume "(a',b') \<in> dir_image r f" "(b',c') \<in> dir_image r f" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 922 | then obtain a b1 b2 c where 1: "a' = f a \<and> b' = f b1 \<and> b' = f b2 \<and> c' = f c" and | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 923 | 2: "(a,b1) \<in> r \<and> (b2,c) \<in> r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 924 | unfolding dir_image_def by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 925 | hence "b1 \<in> Field r \<and> b2 \<in> Field r" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 926 | unfolding Field_def by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 927 | hence "b1 = b2" using 1 INJ unfolding inj_on_def by auto | 
| 67613 | 928 | hence "(a,c) \<in> r" using 2 TRANS unfolding trans_def by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 929 | thus "(a',c') \<in> dir_image r f" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 930 | unfolding dir_image_def using 1 by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 931 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 932 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 933 | lemma Preorder_dir_image: | 
| 82248 | 934 | assumes "Preorder r" and inj: "inj_on f (Field r)" | 
| 935 | shows "Preorder (dir_image r f)" | |
| 936 | unfolding preorder_on_def | |
| 937 | proof (intro conjI) | |
| 938 | have "r \<subseteq> Field r \<times> Field r" and "Refl r" and "trans r" | |
| 939 | using \<open>Preorder r\<close> by (simp_all only: preorder_on_def) | |
| 940 | ||
| 941 | show "dir_image r f \<subseteq> Field (dir_image r f) \<times> Field (dir_image r f)" | |
| 942 | using dir_image_subset[OF \<open>r \<subseteq> Field r \<times> Field r\<close>] | |
| 943 | unfolding dir_image_Field . | |
| 944 | ||
| 945 | show "Refl (dir_image r f)" | |
| 946 | using Refl_dir_image[OF \<open>Refl r\<close>] . | |
| 947 | ||
| 948 | show "trans (dir_image r f)" | |
| 949 | using trans_dir_image[OF \<open>trans r\<close> inj] . | |
| 950 | qed | |
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 951 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 952 | lemma antisym_dir_image: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 953 | assumes AN: "antisym r" and INJ: "inj_on f (Field r)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 954 | shows "antisym(dir_image r f)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 955 | unfolding antisym_def | 
| 75669 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 956 | proof safe | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 957 | fix a' b' | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 958 | assume "(a',b') \<in> dir_image r f" "(b',a') \<in> dir_image r f" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 959 | then obtain a1 b1 a2 b2 where 1: "a' = f a1 \<and> a' = f a2 \<and> b' = f b1 \<and> b' = f b2" and | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 960 | 2: "(a1,b1) \<in> r \<and> (b2,a2) \<in> r " and | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 961 |     3: "{a1,a2,b1,b2} \<le> Field r"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 962 | unfolding dir_image_def Field_def by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 963 | hence "a1 = a2 \<and> b1 = b2" using INJ 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 | 964 | hence "a1 = b2" using 2 AN unfolding antisym_def by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 965 | thus "a' = b'" using 1 by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 966 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 967 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 968 | lemma Partial_order_dir_image: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 969 | "\<lbrakk>Partial_order r; inj_on f (Field r)\<rbrakk> \<Longrightarrow> Partial_order (dir_image r f)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 970 | by (simp add: partial_order_on_def Preorder_dir_image antisym_dir_image) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 971 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 972 | lemma Total_dir_image: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 973 | assumes TOT: "Total r" and INJ: "inj_on f (Field r)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 974 | shows "Total(dir_image r f)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 975 | proof(unfold total_on_def, intro ballI impI) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 976 | fix a' b' | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 977 | assume "a' \<in> Field (dir_image r f)" "b' \<in> Field (dir_image r f)" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 978 | then obtain a and b where 1: "a \<in> Field r \<and> b \<in> Field r \<and> f a = a' \<and> f b = b'" | 
| 56191 | 979 | unfolding dir_image_Field[of r f] by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 980 | moreover assume "a' \<noteq> b'" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 981 | ultimately have "a \<noteq> b" using INJ 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 | 982 | hence "(a,b) \<in> r \<or> (b,a) \<in> r" using 1 TOT unfolding total_on_def by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 983 | thus "(a',b') \<in> dir_image r f \<or> (b',a') \<in> dir_image r f" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 984 | using 1 unfolding dir_image_def by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 985 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 986 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 987 | lemma Linear_order_dir_image: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 988 | "\<lbrakk>Linear_order r; inj_on f (Field r)\<rbrakk> \<Longrightarrow> Linear_order (dir_image r f)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 989 | by (simp add: linear_order_on_def Partial_order_dir_image Total_dir_image) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 990 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 991 | lemma wf_dir_image: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 992 | assumes WF: "wf r" and INJ: "inj_on f (Field r)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 993 | shows "wf(dir_image r f)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 994 | proof(unfold wf_eq_minimal2, intro allI impI, elim conjE) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 995 | fix A'::"'b set" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 996 |   assume SUB: "A' \<le> Field(dir_image r f)" and NE: "A' \<noteq> {}"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 997 |   obtain A where A_def: "A = {a \<in> Field r. f a \<in> A'}" by blast
 | 
| 56191 | 998 |   have "A \<noteq> {} \<and> A \<le> Field r" using A_def SUB NE by (auto simp: dir_image_Field)
 | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 999 | then obtain a where 1: "a \<in> A \<and> (\<forall>b \<in> A. (b,a) \<notin> r)" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1000 | using spec[OF WF[unfolded wf_eq_minimal2], of A] by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1001 | have "\<forall>b' \<in> A'. (b',f a) \<notin> dir_image r f" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1002 | proof(clarify) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1003 | fix b' assume *: "b' \<in> A'" and **: "(b',f a) \<in> dir_image r f" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1004 | obtain b1 a1 where 2: "b' = f b1 \<and> f a = f a1" and | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1005 |       3: "(b1,a1) \<in> r \<and> {a1,b1} \<le> Field r"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1006 | using ** unfolding dir_image_def Field_def by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1007 | hence "a = a1" using 1 A_def INJ 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 | 1008 | hence "b1 \<in> A \<and> (b1,a) \<in> r" using 2 3 A_def * by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1009 | with 1 show False by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1010 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1011 | thus "\<exists>a'\<in>A'. \<forall>b'\<in>A'. (b', a') \<notin> dir_image r f" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1012 | using A_def 1 by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1013 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1014 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1015 | lemma Well_order_dir_image: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1016 | "\<lbrakk>Well_order r; inj_on f (Field r)\<rbrakk> \<Longrightarrow> Well_order (dir_image r f)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1017 | unfolding well_order_on_def | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1018 | using Linear_order_dir_image[of r f] wf_dir_image[of "r - Id" f] | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1019 | dir_image_minus_Id[of f r] | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1020 | subset_inj_on[of f "Field r" "Field(r - Id)"] | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1021 | mono_Field[of "r - Id" r] by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1022 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1023 | lemma dir_image_bij_betw: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1024 | "\<lbrakk>inj_on f (Field r)\<rbrakk> \<Longrightarrow> bij_betw f (Field r) (Field (dir_image r f))" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1025 | unfolding bij_betw_def by (simp add: dir_image_Field order_on_defs) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1026 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1027 | lemma dir_image_compat: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1028 | "compat r (dir_image r f) f" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1029 | unfolding compat_def dir_image_def by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1030 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1031 | lemma dir_image_iso: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1032 | "\<lbrakk>Well_order r; inj_on f (Field r)\<rbrakk> \<Longrightarrow> iso r (dir_image r f) f" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1033 | using iso_iff3 dir_image_compat dir_image_bij_betw Well_order_dir_image by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1034 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1035 | lemma dir_image_ordIso: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1036 | "\<lbrakk>Well_order r; inj_on f (Field r)\<rbrakk> \<Longrightarrow> r =o dir_image r f" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1037 | unfolding ordIso_def using dir_image_iso Well_order_dir_image by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1038 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1039 | lemma Well_order_iso_copy: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1040 | assumes WELL: "well_order_on A r" and BIJ: "bij_betw f A A'" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1041 | shows "\<exists>r'. well_order_on A' r' \<and> r =o r'" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1042 | proof- | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1043 | let ?r' = "dir_image r f" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1044 | have 1: "A = Field r \<and> Well_order r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1045 | using WELL well_order_on_Well_order by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1046 | hence 2: "iso r ?r' f" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1047 | using dir_image_iso using BIJ unfolding bij_betw_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1048 | hence "f ` (Field r) = Field ?r'" using 1 iso_iff[of r ?r'] by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1049 | hence "Field ?r' = A'" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1050 | using 1 BIJ unfolding bij_betw_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1051 | moreover have "Well_order ?r'" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1052 | using 1 Well_order_dir_image BIJ unfolding bij_betw_def by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1053 | ultimately show ?thesis unfolding ordIso_def using 1 2 by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1054 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1055 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1056 | |
| 60758 | 1057 | subsection \<open>Bounded square\<close> | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1058 | |
| 61799 | 1059 | text\<open>This construction essentially defines, for an order relation \<open>r\<close>, a lexicographic | 
| 1060 | order \<open>bsqr r\<close> on \<open>(Field r) \<times> (Field r)\<close>, applying the | |
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1061 | following criteria (in this order): | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1062 | \begin{itemize}
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1063 | \item compare the maximums; | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1064 | \item compare the first components; | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1065 | \item compare the second components. | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1066 | \end{itemize}
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1067 | % | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1068 | The only application of this construction that we are aware of is | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1069 | at proving that the square of an infinite set has the same cardinal | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1070 | as that set. The essential property required there (and which is ensured by this | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1071 | construction) is that any proper order filter of the product order is included in a rectangle, i.e., | 
| 60758 | 1072 | in a product of proper filters on the original relation (assumed to be a well-order).\<close> | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1073 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1074 | definition bsqr :: "'a rel => ('a * 'a)rel"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1075 | where | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1076 |     "bsqr r = {((a1,a2),(b1,b2)).
 | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1077 |            {a1,a2,b1,b2} \<le> Field r \<and>
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1078 | (a1 = b1 \<and> a2 = b2 \<or> | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1079 | (wo_rel.max2 r a1 a2, wo_rel.max2 r b1 b2) \<in> r - Id \<or> | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1080 | wo_rel.max2 r a1 a2 = wo_rel.max2 r b1 b2 \<and> (a1,b1) \<in> r - Id \<or> | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1081 | wo_rel.max2 r a1 a2 = wo_rel.max2 r b1 b2 \<and> a1 = b1 \<and> (a2,b2) \<in> r - Id | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1082 | )}" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1083 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1084 | lemma Field_bsqr: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1085 | "Field (bsqr r) = Field r \<times> Field r" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1086 | proof | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1087 | show "Field (bsqr r) \<le> Field r \<times> Field r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1088 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1089 |     {fix a1 a2 assume "(a1,a2) \<in> Field (bsqr r)"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1090 | moreover | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1091 | have "\<And> b1 b2. ((a1,a2),(b1,b2)) \<in> bsqr r \<or> ((b1,b2),(a1,a2)) \<in> bsqr r \<Longrightarrow> | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1092 | a1 \<in> Field r \<and> a2 \<in> Field r" unfolding bsqr_def by auto | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1093 | ultimately have "a1 \<in> Field r \<and> a2 \<in> Field r" unfolding Field_def by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1094 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1095 | thus ?thesis unfolding Field_def by force | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1096 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1097 | next | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1098 | show "Field r \<times> Field r \<le> Field (bsqr r)" | 
| 75669 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 1099 | proof safe | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1100 | fix a1 a2 assume "a1 \<in> Field r" and "a2 \<in> Field r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1101 | hence "((a1,a2),(a1,a2)) \<in> bsqr r" unfolding bsqr_def by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1102 | thus "(a1,a2) \<in> Field (bsqr r)" unfolding Field_def by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1103 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1104 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1105 | |
| 82248 | 1106 | lemma bsqr_subset: | 
| 1107 | assumes "r \<subseteq> Field r \<times> Field r" | |
| 1108 | shows "bsqr r \<subseteq> Field (bsqr r) \<times> Field (bsqr r)" | |
| 1109 | using \<open>r \<subseteq> Field r \<times> Field r\<close> | |
| 1110 | unfolding Field_bsqr | |
| 1111 | by (auto simp add: bsqr_def) | |
| 1112 | ||
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1113 | lemma bsqr_Refl: "Refl(bsqr r)" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1114 | by(unfold refl_on_def Field_bsqr, auto simp add: bsqr_def) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1115 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1116 | lemma bsqr_Trans: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1117 | assumes "Well_order r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1118 | shows "trans (bsqr r)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1119 | unfolding trans_def | 
| 75669 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 1120 | proof safe | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1121 | (* Preliminary facts *) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1122 | have Well: "wo_rel r" using assms wo_rel_def by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1123 | hence Trans: "trans r" using wo_rel.TRANS by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1124 | have Anti: "antisym r" using wo_rel.ANTISYM Well by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1125 | hence TransS: "trans(r - Id)" using Trans by (simp add: trans_diff_Id) | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1126 | (* Main proof *) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1127 | fix a1 a2 b1 b2 c1 c2 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1128 | assume *: "((a1,a2),(b1,b2)) \<in> bsqr r" and **: "((b1,b2),(c1,c2)) \<in> bsqr r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1129 |   hence 0: "{a1,a2,b1,b2,c1,c2} \<le> Field r" unfolding bsqr_def by auto
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1130 | have 1: "a1 = b1 \<and> a2 = b2 \<or> (wo_rel.max2 r a1 a2, wo_rel.max2 r b1 b2) \<in> r - Id \<or> | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1131 | wo_rel.max2 r a1 a2 = wo_rel.max2 r b1 b2 \<and> (a1,b1) \<in> r - Id \<or> | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1132 | wo_rel.max2 r a1 a2 = wo_rel.max2 r b1 b2 \<and> a1 = b1 \<and> (a2,b2) \<in> r - Id" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1133 | using * unfolding bsqr_def by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1134 | have 2: "b1 = c1 \<and> b2 = c2 \<or> (wo_rel.max2 r b1 b2, wo_rel.max2 r c1 c2) \<in> r - Id \<or> | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1135 | wo_rel.max2 r b1 b2 = wo_rel.max2 r c1 c2 \<and> (b1,c1) \<in> r - Id \<or> | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1136 | wo_rel.max2 r b1 b2 = wo_rel.max2 r c1 c2 \<and> b1 = c1 \<and> (b2,c2) \<in> r - Id" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1137 | using ** unfolding bsqr_def by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1138 | show "((a1,a2),(c1,c2)) \<in> bsqr r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1139 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1140 |     {assume Case1: "a1 = b1 \<and> a2 = b2"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1141 | hence ?thesis using ** by simp | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1142 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1143 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1144 |     {assume Case2: "(wo_rel.max2 r a1 a2, wo_rel.max2 r b1 b2) \<in> r - Id"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1145 |       {assume Case21: "b1 = c1 \<and> b2 = c2"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1146 | hence ?thesis using * by simp | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1147 | } | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1148 | moreover | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1149 |       {assume Case22: "(wo_rel.max2 r b1 b2, wo_rel.max2 r c1 c2) \<in> r - Id"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1150 | hence "(wo_rel.max2 r a1 a2, wo_rel.max2 r c1 c2) \<in> r - Id" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1151 | using Case2 TransS trans_def[of "r - Id"] by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1152 | hence ?thesis using 0 unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1153 | } | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1154 | moreover | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1155 |       {assume Case23_4: "wo_rel.max2 r b1 b2 = wo_rel.max2 r c1 c2"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1156 | hence ?thesis using Case2 0 unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1157 | } | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1158 | ultimately have ?thesis using 0 2 by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1159 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1160 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1161 |     {assume Case3: "wo_rel.max2 r a1 a2 = wo_rel.max2 r b1 b2 \<and> (a1,b1) \<in> r - Id"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1162 |       {assume Case31: "b1 = c1 \<and> b2 = c2"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1163 | hence ?thesis using * by simp | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1164 | } | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1165 | moreover | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1166 |       {assume Case32: "(wo_rel.max2 r b1 b2, wo_rel.max2 r c1 c2) \<in> r - Id"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1167 | hence ?thesis using Case3 0 unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1168 | } | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1169 | moreover | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1170 |       {assume Case33: "wo_rel.max2 r b1 b2 = wo_rel.max2 r c1 c2 \<and> (b1,c1) \<in> r - Id"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1171 | hence "(a1,c1) \<in> r - Id" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1172 | using Case3 TransS trans_def[of "r - Id"] by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1173 | hence ?thesis using Case3 Case33 0 unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1174 | } | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1175 | moreover | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1176 |       {assume Case33: "wo_rel.max2 r b1 b2 = wo_rel.max2 r c1 c2 \<and> b1 = c1"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1177 | hence ?thesis using Case3 0 unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1178 | } | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1179 | ultimately have ?thesis using 0 2 by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1180 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1181 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1182 |     {assume Case4: "wo_rel.max2 r a1 a2 = wo_rel.max2 r b1 b2 \<and> a1 = b1 \<and> (a2,b2) \<in> r - Id"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1183 |       {assume Case41: "b1 = c1 \<and> b2 = c2"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1184 | hence ?thesis using * by simp | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1185 | } | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1186 | moreover | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1187 |       {assume Case42: "(wo_rel.max2 r b1 b2, wo_rel.max2 r c1 c2) \<in> r - Id"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1188 | hence ?thesis using Case4 0 unfolding bsqr_def by force | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1189 | } | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1190 | moreover | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1191 |       {assume Case43: "wo_rel.max2 r b1 b2 = wo_rel.max2 r c1 c2 \<and> (b1,c1) \<in> r - Id"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1192 | hence ?thesis using Case4 0 unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1193 | } | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1194 | moreover | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1195 |       {assume Case44: "wo_rel.max2 r b1 b2 = wo_rel.max2 r c1 c2 \<and> b1 = c1 \<and> (b2,c2) \<in> r - Id"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1196 | hence "(a2,c2) \<in> r - Id" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1197 | using Case4 TransS trans_def[of "r - Id"] by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1198 | hence ?thesis using Case4 Case44 0 unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1199 | } | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1200 | ultimately have ?thesis using 0 2 by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1201 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1202 | ultimately show ?thesis using 0 1 by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1203 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1204 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1205 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1206 | lemma bsqr_antisym: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1207 | assumes "Well_order r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1208 | shows "antisym (bsqr r)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1209 | proof(unfold antisym_def, clarify) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1210 | (* Preliminary facts *) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1211 | have Well: "wo_rel r" using assms wo_rel_def by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1212 | hence Trans: "trans r" using wo_rel.TRANS by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1213 | have Anti: "antisym r" using wo_rel.ANTISYM Well by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1214 | hence TransS: "trans(r - Id)" using Trans by (simp add: trans_diff_Id) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1215 | hence IrrS: "\<forall>a b. \<not>((a,b) \<in> r - Id \<and> (b,a) \<in> r - Id)" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1216 | using Anti trans_def[of "r - Id"] antisym_def[of "r - Id"] by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1217 | (* Main proof *) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1218 | fix a1 a2 b1 b2 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1219 | assume *: "((a1,a2),(b1,b2)) \<in> bsqr r" and **: "((b1,b2),(a1,a2)) \<in> bsqr r" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1220 |   hence "{a1,a2,b1,b2} \<le> Field r" unfolding bsqr_def by auto
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1221 | moreover | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1222 | have "a1 = b1 \<and> a2 = b2 \<or> (wo_rel.max2 r a1 a2, wo_rel.max2 r b1 b2) \<in> r - Id \<or> | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1223 | wo_rel.max2 r a1 a2 = wo_rel.max2 r b1 b2 \<and> (a1,b1) \<in> r - Id \<or> | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1224 | wo_rel.max2 r a1 a2 = wo_rel.max2 r b1 b2 \<and> a1 = b1 \<and> (a2,b2) \<in> r - Id" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1225 | using * unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1226 | moreover | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1227 | have "b1 = a1 \<and> b2 = a2 \<or> (wo_rel.max2 r b1 b2, wo_rel.max2 r a1 a2) \<in> r - Id \<or> | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1228 | wo_rel.max2 r b1 b2 = wo_rel.max2 r a1 a2 \<and> (b1,a1) \<in> r - Id \<or> | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1229 | wo_rel.max2 r b1 b2 = wo_rel.max2 r a1 a2 \<and> b1 = a1 \<and> (b2,a2) \<in> r - Id" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1230 | using ** unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1231 | ultimately show "a1 = b1 \<and> a2 = b2" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1232 | using IrrS by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1233 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1234 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1235 | lemma bsqr_Total: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1236 | assumes "Well_order r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1237 | shows "Total(bsqr r)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1238 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1239 | (* Preliminary facts *) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1240 | have Well: "wo_rel r" using assms wo_rel_def by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1241 | hence Total: "\<forall>a \<in> Field r. \<forall>b \<in> Field r. (a,b) \<in> r \<or> (b,a) \<in> r" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1242 | using wo_rel.TOTALS by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1243 | (* Main proof *) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1244 |   {fix a1 a2 b1 b2 assume "{(a1,a2), (b1,b2)} \<le> Field(bsqr r)"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1245 | hence 0: "a1 \<in> Field r \<and> a2 \<in> Field r \<and> b1 \<in> Field r \<and> b2 \<in> Field r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1246 | using Field_bsqr by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1247 | have "((a1,a2) = (b1,b2) \<or> ((a1,a2),(b1,b2)) \<in> bsqr r \<or> ((b1,b2),(a1,a2)) \<in> bsqr r)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1248 | proof(rule wo_rel.cases_Total[of r a1 a2], clarsimp simp add: Well, simp add: 0) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1249 | (* Why didn't clarsimp simp add: Well 0 do the same job? *) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1250 | assume Case1: "(a1,a2) \<in> r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1251 | hence 1: "wo_rel.max2 r a1 a2 = a2" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1252 | using Well 0 by (simp add: wo_rel.max2_equals2) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1253 | show ?thesis | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1254 | proof(rule wo_rel.cases_Total[of r b1 b2], clarsimp simp add: Well, simp add: 0) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1255 | assume Case11: "(b1,b2) \<in> r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1256 | hence 2: "wo_rel.max2 r b1 b2 = b2" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1257 | using Well 0 by (simp add: wo_rel.max2_equals2) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1258 | show ?thesis | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1259 | proof(rule wo_rel.cases_Total3[of r a2 b2], clarsimp simp add: Well, simp add: 0) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1260 | assume Case111: "(a2,b2) \<in> r - Id \<or> (b2,a2) \<in> r - Id" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1261 | thus ?thesis using 0 1 2 unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1262 | next | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1263 | assume Case112: "a2 = b2" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1264 | show ?thesis | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1265 | proof(rule wo_rel.cases_Total3[of r a1 b1], clarsimp simp add: Well, simp add: 0) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1266 | assume Case1121: "(a1,b1) \<in> r - Id \<or> (b1,a1) \<in> r - Id" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1267 | thus ?thesis using 0 1 2 Case112 unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1268 | next | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1269 | assume Case1122: "a1 = b1" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1270 | thus ?thesis using Case112 by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1271 | qed | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1272 | qed | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1273 | next | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1274 | assume Case12: "(b2,b1) \<in> r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1275 | hence 3: "wo_rel.max2 r b1 b2 = b1" using Well 0 by (simp add: wo_rel.max2_equals1) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1276 | show ?thesis | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1277 | proof(rule wo_rel.cases_Total3[of r a2 b1], clarsimp simp add: Well, simp add: 0) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1278 | assume Case121: "(a2,b1) \<in> r - Id \<or> (b1,a2) \<in> r - Id" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1279 | thus ?thesis using 0 1 3 unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1280 | next | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1281 | assume Case122: "a2 = b1" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1282 | show ?thesis | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1283 | proof(rule wo_rel.cases_Total3[of r a1 b1], clarsimp simp add: Well, simp add: 0) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1284 | assume Case1221: "(a1,b1) \<in> r - Id \<or> (b1,a1) \<in> r - Id" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1285 | thus ?thesis using 0 1 3 Case122 unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1286 | next | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1287 | assume Case1222: "a1 = b1" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1288 | show ?thesis | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1289 | proof(rule wo_rel.cases_Total3[of r a2 b2], clarsimp simp add: Well, simp add: 0) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1290 | assume Case12221: "(a2,b2) \<in> r - Id \<or> (b2,a2) \<in> r - Id" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1291 | thus ?thesis using 0 1 3 Case122 Case1222 unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1292 | next | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1293 | assume Case12222: "a2 = b2" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1294 | thus ?thesis using Case122 Case1222 by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1295 | qed | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1296 | qed | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1297 | qed | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1298 | qed | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1299 | next | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1300 | assume Case2: "(a2,a1) \<in> r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1301 | hence 1: "wo_rel.max2 r a1 a2 = a1" using Well 0 by (simp add: wo_rel.max2_equals1) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1302 | show ?thesis | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1303 | proof(rule wo_rel.cases_Total[of r b1 b2], clarsimp simp add: Well, simp add: 0) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1304 | assume Case21: "(b1,b2) \<in> r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1305 | hence 2: "wo_rel.max2 r b1 b2 = b2" using Well 0 by (simp add: wo_rel.max2_equals2) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1306 | show ?thesis | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1307 | proof(rule wo_rel.cases_Total3[of r a1 b2], clarsimp simp add: Well, simp add: 0) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1308 | assume Case211: "(a1,b2) \<in> r - Id \<or> (b2,a1) \<in> r - Id" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1309 | thus ?thesis using 0 1 2 unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1310 | next | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1311 | assume Case212: "a1 = b2" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1312 | show ?thesis | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1313 | proof(rule wo_rel.cases_Total3[of r a1 b1], clarsimp simp add: Well, simp add: 0) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1314 | assume Case2121: "(a1,b1) \<in> r - Id \<or> (b1,a1) \<in> r - Id" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1315 | thus ?thesis using 0 1 2 Case212 unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1316 | next | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1317 | assume Case2122: "a1 = b1" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1318 | show ?thesis | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1319 | proof(rule wo_rel.cases_Total3[of r a2 b2], clarsimp simp add: Well, simp add: 0) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1320 | assume Case21221: "(a2,b2) \<in> r - Id \<or> (b2,a2) \<in> r - Id" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1321 | thus ?thesis using 0 1 2 Case212 Case2122 unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1322 | next | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1323 | assume Case21222: "a2 = b2" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1324 | thus ?thesis using Case2122 Case212 by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1325 | qed | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1326 | qed | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1327 | qed | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1328 | next | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1329 | assume Case22: "(b2,b1) \<in> r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1330 | hence 3: "wo_rel.max2 r b1 b2 = b1" using Well 0 by (simp add: wo_rel.max2_equals1) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1331 | show ?thesis | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1332 | proof(rule wo_rel.cases_Total3[of r a1 b1], clarsimp simp add: Well, simp add: 0) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1333 | assume Case221: "(a1,b1) \<in> r - Id \<or> (b1,a1) \<in> r - Id" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1334 | thus ?thesis using 0 1 3 unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1335 | next | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1336 | assume Case222: "a1 = b1" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1337 | show ?thesis | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1338 | proof(rule wo_rel.cases_Total3[of r a2 b2], clarsimp simp add: Well, simp add: 0) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1339 | assume Case2221: "(a2,b2) \<in> r - Id \<or> (b2,a2) \<in> r - Id" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1340 | thus ?thesis using 0 1 3 Case222 unfolding bsqr_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1341 | next | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1342 | assume Case2222: "a2 = b2" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1343 | thus ?thesis using Case222 by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1344 | qed | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1345 | qed | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1346 | qed | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1347 | qed | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1348 | } | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1349 | thus ?thesis unfolding total_on_def by fast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1350 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1351 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1352 | lemma bsqr_Linear_order: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1353 | assumes "Well_order r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1354 | shows "Linear_order(bsqr r)" | 
| 82248 | 1355 | proof - | 
| 1356 | have "r \<subseteq> Field r \<times> Field r" | |
| 1357 | using \<open>Well_order r\<close> | |
| 1358 | by (simp only: order_on_defs) | |
| 1359 | ||
| 1360 | thus ?thesis | |
| 1361 | unfolding order_on_defs | |
| 1362 | using assms bsqr_Refl bsqr_Trans bsqr_antisym bsqr_Total bsqr_subset[OF \<open>r \<subseteq> Field r \<times> Field r\<close>] | |
| 1363 | by auto | |
| 1364 | qed | |
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1365 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1366 | lemma bsqr_Well_order: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1367 | assumes "Well_order r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1368 | shows "Well_order(bsqr r)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1369 | using assms | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1370 | proof(simp add: bsqr_Linear_order Linear_order_Well_order_iff, intro allI impI) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1371 |   have 0: "\<forall>A \<le> Field r. A \<noteq> {} \<longrightarrow> (\<exists>a \<in> A. \<forall>a' \<in> A. (a,a') \<in> r)"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1372 | using assms well_order_on_def Linear_order_Well_order_iff by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1373 |   fix D assume *: "D \<le> Field (bsqr r)" and **: "D \<noteq> {}"
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1374 | hence 1: "D \<le> Field r \<times> Field r" unfolding Field_bsqr by simp | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1375 | (* *) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1376 |   obtain M where M_def: "M = {wo_rel.max2 r a1 a2| a1 a2. (a1,a2) \<in> D}" by blast
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1377 |   have "M \<noteq> {}" using 1 M_def ** by auto
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1378 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1379 | have "M \<le> Field r" unfolding M_def | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1380 | using 1 assms wo_rel_def[of r] wo_rel.max2_among[of r] by fastforce | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1381 | ultimately obtain m where m_min: "m \<in> M \<and> (\<forall>a \<in> M. (m,a) \<in> r)" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1382 | using 0 by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1383 | (* *) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1384 |   obtain A1 where A1_def: "A1 = {a1. \<exists>a2. (a1,a2) \<in> D \<and> wo_rel.max2 r a1 a2 = m}" by blast
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1385 | have "A1 \<le> Field r" unfolding A1_def using 1 by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1386 |   moreover have "A1 \<noteq> {}" unfolding A1_def using m_min unfolding M_def by blast
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1387 | ultimately obtain a1 where a1_min: "a1 \<in> A1 \<and> (\<forall>a \<in> A1. (a1,a) \<in> r)" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1388 | using 0 by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1389 | (* *) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1390 |   obtain A2 where A2_def: "A2 = {a2. (a1,a2) \<in> D \<and> wo_rel.max2 r a1 a2 = m}" by blast
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1391 | have "A2 \<le> Field r" unfolding A2_def using 1 by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1392 |   moreover have "A2 \<noteq> {}" unfolding A2_def
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1393 | using m_min a1_min unfolding A1_def M_def by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1394 | ultimately obtain a2 where a2_min: "a2 \<in> A2 \<and> (\<forall>a \<in> A2. (a2,a) \<in> r)" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1395 | using 0 by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1396 | (* *) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1397 | have 2: "wo_rel.max2 r a1 a2 = m" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1398 | using a1_min a2_min unfolding A1_def A2_def by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1399 | have 3: "(a1,a2) \<in> D" using a2_min unfolding A2_def by auto | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1400 | (* *) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1401 | moreover | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1402 |   {fix b1 b2 assume ***: "(b1,b2) \<in> D"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1403 |     hence 4: "{a1,a2,b1,b2} \<le> Field r" using 1 3 by blast
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1404 | have 5: "(wo_rel.max2 r a1 a2, wo_rel.max2 r b1 b2) \<in> r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1405 | using *** a1_min a2_min m_min unfolding A1_def A2_def M_def by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1406 | have "((a1,a2),(b1,b2)) \<in> bsqr r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1407 | proof(cases "wo_rel.max2 r a1 a2 = wo_rel.max2 r b1 b2") | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1408 | assume Case1: "wo_rel.max2 r a1 a2 \<noteq> wo_rel.max2 r b1 b2" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1409 | thus ?thesis unfolding bsqr_def using 4 5 by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1410 | next | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1411 | assume Case2: "wo_rel.max2 r a1 a2 = wo_rel.max2 r b1 b2" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1412 | hence "b1 \<in> A1" unfolding A1_def using 2 *** by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1413 | hence 6: "(a1,b1) \<in> r" using a1_min by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1414 | show ?thesis | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1415 | proof(cases "a1 = b1") | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1416 | assume Case21: "a1 \<noteq> b1" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1417 | thus ?thesis unfolding bsqr_def using 4 Case2 6 by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1418 | next | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1419 | assume Case22: "a1 = b1" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1420 | hence "b2 \<in> A2" unfolding A2_def using 2 *** Case2 by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1421 | hence 7: "(a2,b2) \<in> r" using a2_min by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1422 | thus ?thesis unfolding bsqr_def using 4 7 Case2 Case22 by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1423 | qed | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1424 | qed | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1425 | } | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1426 | (* *) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1427 | ultimately show "\<exists>d \<in> D. \<forall>d' \<in> D. (d,d') \<in> bsqr r" by fastforce | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1428 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1429 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1430 | lemma bsqr_max2: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1431 | assumes WELL: "Well_order r" and LEQ: "((a1,a2),(b1,b2)) \<in> bsqr r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1432 | shows "(wo_rel.max2 r a1 a2, wo_rel.max2 r b1 b2) \<in> r" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1433 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1434 |   have "{(a1,a2),(b1,b2)} \<le> Field(bsqr r)"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1435 | using LEQ unfolding Field_def by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1436 |   hence "{a1,a2,b1,b2} \<le> Field r" unfolding Field_bsqr by auto
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1437 |   hence "{wo_rel.max2 r a1 a2, wo_rel.max2 r b1 b2} \<le> Field r"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1438 | using WELL wo_rel_def[of r] wo_rel.max2_among[of r] by fastforce | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1439 | moreover have "(wo_rel.max2 r a1 a2, wo_rel.max2 r b1 b2) \<in> r \<or> wo_rel.max2 r a1 a2 = wo_rel.max2 r b1 b2" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1440 | using LEQ unfolding bsqr_def by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1441 | ultimately show ?thesis using WELL unfolding order_on_defs refl_on_def by auto | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1442 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1443 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1444 | lemma bsqr_ofilter: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1445 | assumes WELL: "Well_order r" and | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1446 | OF: "wo_rel.ofilter (bsqr r) D" and SUB: "D < Field r \<times> Field r" and | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1447 | NE: "\<not> (\<exists>a. Field r = under r a)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1448 | shows "\<exists>A. wo_rel.ofilter r A \<and> A < Field r \<and> D \<le> A \<times> A" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1449 | proof- | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1450 | let ?r' = "bsqr r" | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1451 | have Well: "wo_rel r" using WELL wo_rel_def by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1452 | hence Trans: "trans r" using wo_rel.TRANS by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1453 | have Well': "Well_order ?r' \<and> wo_rel ?r'" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1454 | using WELL bsqr_Well_order wo_rel_def by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1455 | (* *) | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1456 | have "D < Field ?r'" unfolding Field_bsqr using SUB . | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1457 | with OF obtain a1 and a2 where | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1458 | "(a1,a2) \<in> Field ?r'" and 1: "D = underS ?r' (a1,a2)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1459 | using Well' wo_rel.ofilter_underS_Field[of ?r' D] by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1460 |   hence 2: "{a1,a2} \<le> Field r" unfolding Field_bsqr by auto
 | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1461 | let ?m = "wo_rel.max2 r a1 a2" | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 1462 | have "D \<le> (under r ?m) \<times> (under r ?m)" | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1463 | proof(unfold 1) | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1464 |     {fix b1 b2
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1465 | let ?n = "wo_rel.max2 r b1 b2" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1466 | assume "(b1,b2) \<in> underS ?r' (a1,a2)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1467 | hence 3: "((b1,b2),(a1,a2)) \<in> ?r'" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1468 | unfolding underS_def by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1469 | hence "(?n,?m) \<in> r" using WELL by (simp add: bsqr_max2) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1470 | moreover | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1471 |       {have "(b1,b2) \<in> Field ?r'" using 3 unfolding Field_def by auto
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1472 |         hence "{b1,b2} \<le> Field r" unfolding Field_bsqr by auto
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1473 | hence "(b1,?n) \<in> r \<and> (b2,?n) \<in> r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1474 | using Well by (simp add: wo_rel.max2_greater) | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1475 | } | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1476 | ultimately have "(b1,?m) \<in> r \<and> (b2,?m) \<in> r" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1477 | using Trans trans_def[of r] by blast | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1478 | hence "(b1,b2) \<in> (under r ?m) \<times> (under r ?m)" unfolding under_def by simp} | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1479 | thus "underS ?r' (a1,a2) \<le> (under r ?m) \<times> (under r ?m)" by auto | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1480 | qed | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 1481 | moreover have "wo_rel.ofilter r (under r ?m)" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1482 | using Well by (simp add: wo_rel.under_ofilter) | 
| 55023 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 blanchet parents: 
54980diff
changeset | 1483 | moreover have "under r ?m < Field r" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1484 | using NE under_Field[of r ?m] by blast | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1485 | ultimately show ?thesis by blast | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1486 | qed | 
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1487 | |
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1488 | definition Func where | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1489 |   "Func A B = {f . (\<forall> a \<in> A. f a \<in> B) \<and> (\<forall> a. a \<notin> A \<longrightarrow> f a = undefined)}"
 | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1490 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1491 | lemma Func_empty: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1492 |   "Func {} B = {\<lambda>x. undefined}"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1493 | unfolding Func_def by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1494 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1495 | lemma Func_elim: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1496 | assumes "g \<in> Func A B" and "a \<in> A" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1497 | shows "\<exists> b. b \<in> B \<and> g a = b" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1498 | using assms unfolding Func_def by (cases "g a = undefined") auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1499 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1500 | definition curr where | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1501 | "curr A f \<equiv> \<lambda> a. if a \<in> A then \<lambda>b. f (a,b) else undefined" | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1502 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1503 | lemma curr_in: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1504 | assumes f: "f \<in> Func (A \<times> B) C" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1505 | shows "curr A f \<in> Func A (Func B C)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1506 | using assms unfolding curr_def Func_def by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1507 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1508 | lemma curr_inj: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1509 | assumes "f1 \<in> Func (A \<times> B) C" and "f2 \<in> Func (A \<times> B) C" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1510 | shows "curr A f1 = curr A f2 \<longleftrightarrow> f1 = f2" | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1511 | proof safe | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1512 | assume c: "curr A f1 = curr A f2" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1513 | show "f1 = f2" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1514 | proof (rule ext, clarify) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1515 | fix a b show "f1 (a, b) = f2 (a, b)" | 
| 61943 | 1516 | proof (cases "(a,b) \<in> A \<times> B") | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1517 | case False | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1518 | thus ?thesis using assms unfolding Func_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1519 | next | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1520 | case True hence a: "a \<in> A" and b: "b \<in> B" by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1521 | thus ?thesis | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1522 | using c unfolding curr_def fun_eq_iff by(elim allE[of _ a]) simp | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1523 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1524 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1525 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1526 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1527 | lemma curr_surj: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1528 | assumes "g \<in> Func A (Func B C)" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1529 | shows "\<exists> f \<in> Func (A \<times> B) C. curr A f = g" | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1530 | proof | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1531 | let ?f = "\<lambda> ab. if fst ab \<in> A \<and> snd ab \<in> B then g (fst ab) (snd ab) else undefined" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1532 | show "curr A ?f = g" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1533 | proof (rule ext) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1534 | fix a show "curr A ?f a = g a" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1535 | proof (cases "a \<in> A") | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1536 | case False | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1537 | hence "g a = undefined" using assms unfolding Func_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1538 | thus ?thesis unfolding curr_def using False by simp | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1539 | next | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1540 | case True | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1541 | obtain g1 where "g1 \<in> Func B C" and "g a = g1" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1542 | using assms using Func_elim[OF assms True] by blast | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1543 | thus ?thesis using True unfolding Func_def curr_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1544 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1545 | qed | 
| 61943 | 1546 | show "?f \<in> Func (A \<times> B) C" using assms unfolding Func_def mem_Collect_eq by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1547 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1548 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1549 | lemma bij_betw_curr: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1550 | "bij_betw (curr A) (Func (A \<times> B) C) (Func A (Func B C))" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1551 | unfolding bij_betw_def inj_on_def | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1552 | using curr_surj curr_in curr_inj by blast | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1553 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1554 | definition Func_map where | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1555 | "Func_map B2 f1 f2 g b2 \<equiv> if b2 \<in> B2 then f1 (g (f2 b2)) else undefined" | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1556 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1557 | lemma Func_map: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1558 | assumes g: "g \<in> Func A2 A1" and f1: "f1 ` A1 \<subseteq> B1" and f2: "f2 ` B2 \<subseteq> A2" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1559 | shows "Func_map B2 f1 f2 g \<in> Func B2 B1" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1560 | using assms unfolding Func_def Func_map_def mem_Collect_eq by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1561 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1562 | lemma Func_non_emp: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1563 |   assumes "B \<noteq> {}"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1564 |   shows "Func A B \<noteq> {}"
 | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1565 | proof- | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1566 | obtain b where b: "b \<in> B" using assms by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1567 | hence "(\<lambda> a. if a \<in> A then b else undefined) \<in> Func A B" unfolding Func_def by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1568 | thus ?thesis by blast | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1569 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1570 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1571 | lemma Func_is_emp: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1572 |   "Func A B = {} \<longleftrightarrow> A \<noteq> {} \<and> B = {}" (is "?L \<longleftrightarrow> ?R")
 | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1573 | proof | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1574 | assume ?L | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1575 | then show ?R | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1576 | using Func_empty Func_non_emp[of B A] by blast | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1577 | next | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1578 | assume ?R | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1579 | then show ?L | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1580 | using Func_empty Func_non_emp[of B A] by (auto simp: Func_def) | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1581 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1582 | |
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1583 | lemma Func_map_surj: | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1584 | assumes B1: "f1 ` A1 = B1" and A2: "inj_on f2 B2" "f2 ` B2 \<subseteq> A2" | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1585 |     and B2A2: "B2 = {} \<Longrightarrow> A2 = {}"
 | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1586 | shows "Func B2 B1 = Func_map B2 f1 f2 ` Func A2 A1" | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1587 | proof(cases "B2 = {}")
 | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1588 | case True | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1589 | thus ?thesis using B2A2 by (auto simp: Func_empty Func_map_def) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1590 | next | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1591 | case False note B2 = False | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1592 | show ?thesis | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1593 | proof safe | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1594 | fix h assume h: "h \<in> Func B2 B1" | 
| 63040 | 1595 | define j1 where "j1 = inv_into A1 f1" | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1596 | have "\<forall> a2 \<in> f2 ` B2. \<exists> b2. b2 \<in> B2 \<and> f2 b2 = a2" by blast | 
| 55811 | 1597 | then obtain k where k: "\<forall> a2 \<in> f2 ` B2. k a2 \<in> B2 \<and> f2 (k a2) = a2" | 
| 1598 | by atomize_elim (rule bchoice) | |
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1599 |     {fix b2 assume b2: "b2 \<in> B2"
 | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1600 | hence "f2 (k (f2 b2)) = f2 b2" using k A2(2) by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1601 | moreover have "k (f2 b2) \<in> B2" using b2 A2(2) k by auto | 
| 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1602 | ultimately have "k (f2 b2) = b2" using b2 A2(1) unfolding inj_on_def by blast | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1603 | } note kk = this | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1604 | obtain b22 where b22: "b22 \<in> B2" using B2 by auto | 
| 63040 | 1605 | define j2 where [abs_def]: "j2 a2 = (if a2 \<in> f2 ` B2 then k a2 else b22)" for a2 | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1606 | have j2A2: "j2 ` A2 \<subseteq> B2" unfolding j2_def using k b22 by auto | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1607 | have j2: "\<And> b2. b2 \<in> B2 \<Longrightarrow> j2 (f2 b2) = b2" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1608 | using kk unfolding j2_def by auto | 
| 63040 | 1609 | define g where "g = Func_map A2 j1 j2 h" | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1610 | have "Func_map B2 f1 f2 g = h" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1611 | proof (rule ext) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1612 | fix b2 show "Func_map B2 f1 f2 g b2 = h b2" | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1613 | proof(cases "b2 \<in> B2") | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1614 | case True | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1615 | show ?thesis | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1616 | proof (cases "h b2 = undefined") | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1617 | case True | 
| 60758 | 1618 | hence b1: "h b2 \<in> f1 ` A1" using h \<open>b2 \<in> B2\<close> unfolding B1 Func_def by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1619 | show ?thesis using A2 f_inv_into_f[OF b1] | 
| 60758 | 1620 | unfolding True g_def Func_map_def j1_def j2[OF \<open>b2 \<in> B2\<close>] by auto | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1621 | qed(insert A2 True j2[OF True] h B1, unfold j1_def g_def Func_def Func_map_def, | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1622 | auto intro: f_inv_into_f) | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1623 | qed(insert h, unfold Func_def Func_map_def, auto) | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1624 | qed | 
| 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1625 | moreover have "g \<in> Func A2 A1" unfolding g_def apply(rule Func_map[OF h]) | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1626 | using j2A2 B1 A2 unfolding j1_def by (fast intro: inv_into_into)+ | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1627 | ultimately show "h \<in> Func_map B2 f1 f2 ` Func A2 A1" | 
| 76950 
f881fd264929
More cleaning up proofs, plus a TeX fix
 paulson <lp15@cam.ac.uk> parents: 
76281diff
changeset | 1628 | unfolding Func_map_def[abs_def] by auto | 
| 75669 
43f5dfb7fa35
tuned (some HOL lints, by Yecine Megdiche);
 Fabian Huch <huch@in.tum.de> parents: 
75624diff
changeset | 1629 | qed(use B1 Func_map[OF _ _ A2(2)] in auto) | 
| 54980 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 traytel parents: 
54578diff
changeset | 1630 | qed | 
| 48975 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1631 | |
| 
7f79f94a432c
added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
 blanchet parents: diff
changeset | 1632 | end |