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