| author | wenzelm | 
| Thu, 13 Oct 2016 11:43:40 +0200 | |
| changeset 64185 | f4d5eb78b8a5 | 
| parent 64016 | 5c2c559f01eb | 
| child 69661 | a03a63b81f44 | 
| permissions | -rw-r--r-- | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1  | 
(* Title: HOL/Cardinals/Ordinal_Arithmetic.thy  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
2  | 
Author: Dmitriy Traytel, TU Muenchen  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
3  | 
Copyright 2014  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
4  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
5  | 
Ordinal arithmetic.  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
6  | 
*)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
7  | 
|
| 63167 | 8  | 
section \<open>Ordinal Arithmetic\<close>  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
9  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
10  | 
theory Ordinal_Arithmetic  | 
| 
58127
 
b7cab82f488e
renamed '(BNF_)Constructions_on_Wellorders' to '(BNF_)Wellorder_Constructions'
 
blanchet 
parents: 
55932 
diff
changeset
 | 
11  | 
imports Wellorder_Constructions  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
12  | 
begin  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
13  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
14  | 
definition osum :: "'a rel \<Rightarrow> 'b rel \<Rightarrow> ('a + 'b) rel"  (infixr "+o" 70)
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
15  | 
where  | 
| 
58127
 
b7cab82f488e
renamed '(BNF_)Constructions_on_Wellorders' to '(BNF_)Wellorder_Constructions'
 
blanchet 
parents: 
55932 
diff
changeset
 | 
16  | 
"r +o r' = map_prod Inl Inl ` r \<union> map_prod Inr Inr ` r' \<union>  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
17  | 
     {(Inl a, Inr a') | a a' . a \<in> Field r \<and> a' \<in> Field r'}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
18  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
19  | 
lemma Field_osum: "Field(r +o r') = Inl ` Field r \<union> Inr ` Field r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
20  | 
unfolding osum_def Field_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
21  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
22  | 
lemma osum_Refl:"\<lbrakk>Refl r; Refl r'\<rbrakk> \<Longrightarrow> Refl (r +o r')"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
23  | 
(*Need first unfold Field_osum, only then osum_def*)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
24  | 
unfolding refl_on_def Field_osum unfolding osum_def by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
25  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
26  | 
lemma osum_trans:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
27  | 
assumes TRANS: "trans r" and TRANS': "trans r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
28  | 
shows "trans (r +o r')"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
29  | 
proof(unfold trans_def, safe)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
30  | 
fix x y z assume *: "(x, y) \<in> r +o r'" "(y, z) \<in> r +o r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
31  | 
thus "(x, z) \<in> r +o r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
32  | 
proof (cases x y z rule: sum.exhaust[case_product sum.exhaust sum.exhaust])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
33  | 
case (Inl_Inl_Inl a b c)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
34  | 
with * have "(a,b) \<in> r" "(b,c) \<in> r" unfolding osum_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
35  | 
with TRANS have "(a,c) \<in> r" unfolding trans_def by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
36  | 
with Inl_Inl_Inl show ?thesis unfolding osum_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
37  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
38  | 
case (Inl_Inl_Inr a b c)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
39  | 
with * have "a \<in> Field r" "c \<in> Field r'" unfolding osum_def Field_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
40  | 
with Inl_Inl_Inr show ?thesis unfolding osum_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
41  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
42  | 
case (Inl_Inr_Inr a b c)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
43  | 
with * have "a \<in> Field r" "c \<in> Field r'" unfolding osum_def Field_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
44  | 
with Inl_Inr_Inr show ?thesis unfolding osum_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
45  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
46  | 
case (Inr_Inr_Inr a b c)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
47  | 
with * have "(a,b) \<in> r'" "(b,c) \<in> r'" unfolding osum_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
48  | 
with TRANS' have "(a,c) \<in> r'" unfolding trans_def by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
49  | 
with Inr_Inr_Inr show ?thesis unfolding osum_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
50  | 
qed (auto simp: osum_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
51  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
52  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
53  | 
lemma osum_Preorder: "\<lbrakk>Preorder r; Preorder r'\<rbrakk> \<Longrightarrow> Preorder (r +o r')"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
54  | 
unfolding preorder_on_def using osum_Refl osum_trans by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
55  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
56  | 
lemma osum_antisym: "\<lbrakk>antisym r; antisym r'\<rbrakk> \<Longrightarrow> antisym (r +o r')"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
57  | 
unfolding antisym_def osum_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
58  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
59  | 
lemma osum_Partial_order: "\<lbrakk>Partial_order r; Partial_order r'\<rbrakk> \<Longrightarrow> Partial_order (r +o r')"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
60  | 
unfolding partial_order_on_def using osum_Preorder osum_antisym by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
61  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
62  | 
lemma osum_Total: "\<lbrakk>Total r; Total r'\<rbrakk> \<Longrightarrow> Total (r +o r')"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
63  | 
unfolding total_on_def Field_osum unfolding osum_def by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
64  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
65  | 
lemma osum_Linear_order: "\<lbrakk>Linear_order r; Linear_order r'\<rbrakk> \<Longrightarrow> Linear_order (r +o r')"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
66  | 
unfolding linear_order_on_def using osum_Partial_order osum_Total by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
67  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
68  | 
lemma osum_wf:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
69  | 
assumes WF: "wf r" and WF': "wf r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
70  | 
shows "wf (r +o r')"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
71  | 
unfolding wf_eq_minimal2 unfolding Field_osum  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
72  | 
proof(intro allI impI, elim conjE)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
73  | 
  fix A assume *: "A \<subseteq> Inl ` Field r \<union> Inr ` Field r'" and **: "A \<noteq> {}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
74  | 
obtain B where B_def: "B = A Int Inl ` Field r" by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
75  | 
show "\<exists>a\<in>A. \<forall>a'\<in>A. (a', a) \<notin> r +o r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
76  | 
  proof(cases "B = {}")
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
77  | 
case False  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
78  | 
    hence "B \<noteq> {}" "B \<le> Inl ` Field r" using B_def by auto
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
79  | 
    hence "Inl -` B \<noteq> {}" "Inl -` B \<le> Field r" unfolding vimage_def by auto
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
80  | 
then obtain a where 1: "a \<in> Inl -` B" and "\<forall>a1 \<in> Inl -` B. (a1, a) \<notin> r"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
81  | 
using WF unfolding wf_eq_minimal2 by metis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
82  | 
hence "\<forall>a1 \<in> A. (a1, Inl a) \<notin> r +o r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
83  | 
unfolding osum_def using B_def ** by (auto simp: vimage_def Field_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
84  | 
thus ?thesis using 1 unfolding B_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
85  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
86  | 
case True  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
87  | 
hence 1: "A \<le> Inr ` Field r'" using * B_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
88  | 
    with ** have "Inr -`A \<noteq> {}" "Inr -` A \<le> Field r'" unfolding vimage_def by auto
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
89  | 
with ** obtain a' where 2: "a' \<in> Inr -` A" and "\<forall>a1' \<in> Inr -` A. (a1',a') \<notin> r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
90  | 
using WF' unfolding wf_eq_minimal2 by metis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
91  | 
hence "\<forall>a1' \<in> A. (a1', Inr a') \<notin> r +o r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
92  | 
unfolding osum_def using ** 1 by (auto simp: vimage_def Field_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
93  | 
thus ?thesis using 2 by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
94  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
95  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
96  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
97  | 
lemma osum_minus_Id:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
98  | 
assumes r: "Total r" "\<not> (r \<le> Id)" and r': "Total r'" "\<not> (r' \<le> Id)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
99  | 
shows "(r +o r') - Id \<le> (r - Id) +o (r' - Id)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
100  | 
unfolding osum_def Total_Id_Field[OF r] Total_Id_Field[OF r'] by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
101  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
102  | 
lemma osum_minus_Id1:  | 
| 55932 | 103  | 
"r \<le> Id \<Longrightarrow> (r +o r') - Id \<le> (Inl ` Field r \<times> Inr ` Field r') \<union> (map_prod Inr Inr ` (r' - Id))"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
104  | 
unfolding osum_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
105  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
106  | 
lemma osum_minus_Id2:  | 
| 55932 | 107  | 
"r' \<le> Id \<Longrightarrow> (r +o r') - Id \<le> (map_prod Inl Inl ` (r - Id)) \<union> (Inl ` Field r \<times> Inr ` Field r')"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
108  | 
unfolding osum_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
109  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
110  | 
lemma osum_wf_Id:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
111  | 
assumes TOT: "Total r" and TOT': "Total r'" and WF: "wf(r - Id)" and WF': "wf(r' - Id)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
112  | 
shows "wf ((r +o r') - Id)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
113  | 
proof(cases "r \<le> Id \<or> r' \<le> Id")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
114  | 
case False  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
115  | 
thus ?thesis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
116  | 
using osum_minus_Id[of r r'] assms osum_wf[of "r - Id" "r' - Id"]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
117  | 
wf_subset[of "(r - Id) +o (r' - Id)" "(r +o r') - Id"] by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
118  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
119  | 
have 1: "wf (Inl ` Field r \<times> Inr ` Field r')" by (rule wf_Int_Times) auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
120  | 
case True  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
121  | 
thus ?thesis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
122  | 
proof (elim disjE)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
123  | 
assume "r \<subseteq> Id"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
124  | 
thus "wf ((r +o r') - Id)"  | 
| 55932 | 125  | 
by (rule wf_subset[rotated, OF osum_minus_Id1 wf_Un[OF 1 wf_map_prod_image[OF WF']]]) auto  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
126  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
127  | 
assume "r' \<subseteq> Id"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
128  | 
thus "wf ((r +o r') - Id)"  | 
| 55932 | 129  | 
by (rule wf_subset[rotated, OF osum_minus_Id2 wf_Un[OF wf_map_prod_image[OF WF] 1]]) auto  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
130  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
131  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
132  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
133  | 
lemma osum_Well_order:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
134  | 
assumes WELL: "Well_order r" and WELL': "Well_order r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
135  | 
shows "Well_order (r +o r')"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
136  | 
proof-  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
137  | 
have "Total r \<and> Total r'" using WELL WELL' by (auto simp add: order_on_defs)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
138  | 
thus ?thesis using assms unfolding well_order_on_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
139  | 
using osum_Linear_order osum_wf_Id by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
140  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
141  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
142  | 
lemma osum_embedL:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
143  | 
assumes WELL: "Well_order r" and WELL': "Well_order r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
144  | 
shows "embed r (r +o r') Inl"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
145  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
146  | 
have 1: "Well_order (r +o r')" using assms by (auto simp add: osum_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
147  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
148  | 
have "compat r (r +o r') Inl" unfolding compat_def osum_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
149  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
150  | 
have "ofilter (r +o r') (Inl ` 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
 | 
151  | 
unfolding wo_rel.ofilter_def[unfolded wo_rel_def, OF 1] Field_osum under_def  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
152  | 
unfolding osum_def Field_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
153  | 
ultimately show ?thesis using assms by (auto simp add: embed_iff_compat_inj_on_ofilter)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
154  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
155  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
156  | 
corollary osum_ordLeqL:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
157  | 
assumes WELL: "Well_order r" and WELL': "Well_order r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
158  | 
shows "r \<le>o r +o r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
159  | 
using assms osum_embedL osum_Well_order unfolding ordLeq_def by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
160  | 
|
| 55932 | 161  | 
lemma dir_image_alt: "dir_image r f = map_prod f f ` r"  | 
162  | 
unfolding dir_image_def map_prod_def by auto  | 
|
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
163  | 
|
| 55932 | 164  | 
lemma map_prod_ordIso: "\<lbrakk>Well_order r; inj_on f (Field r)\<rbrakk> \<Longrightarrow> map_prod f f ` r =o r"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
165  | 
unfolding dir_image_alt[symmetric] by (rule ordIso_symmetric[OF dir_image_ordIso])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
166  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
167  | 
definition oprod :: "'a rel \<Rightarrow> 'b rel \<Rightarrow> ('a \<times> 'b) rel"  (infixr "*o" 80)
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
168  | 
where "r *o r' = {((x1, y1), (x2, y2)).
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
169  | 
(((y1, y2) \<in> r' - Id \<and> x1 \<in> Field r \<and> x2 \<in> Field r) \<or>  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
170  | 
((y1, y2) \<in> Restr Id (Field r') \<and> (x1, x2) \<in> r))}"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
171  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
172  | 
lemma Field_oprod: "Field (r *o r') = Field r \<times> Field r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
173  | 
unfolding oprod_def Field_def by auto blast+  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
174  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
175  | 
lemma oprod_Refl:"\<lbrakk>Refl r; Refl r'\<rbrakk> \<Longrightarrow> Refl (r *o r')"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
176  | 
unfolding refl_on_def Field_oprod unfolding oprod_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
177  | 
|
| 
58127
 
b7cab82f488e
renamed '(BNF_)Constructions_on_Wellorders' to '(BNF_)Wellorder_Constructions'
 
blanchet 
parents: 
55932 
diff
changeset
 | 
178  | 
lemma oprod_trans:  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
179  | 
assumes "trans r" "trans r'" "antisym r" "antisym r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
180  | 
shows "trans (r *o r')"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
181  | 
proof(unfold trans_def, safe)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
182  | 
fix x y z assume *: "(x, y) \<in> r *o r'" "(y, z) \<in> r *o r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
183  | 
thus "(x, z) \<in> r *o r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
184  | 
unfolding oprod_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
185  | 
apply safe  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
186  | 
apply (metis assms(2) transE)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
187  | 
apply (metis assms(2) transE)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
188  | 
apply (metis assms(2) transE)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
189  | 
apply (metis assms(4) antisymD)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
190  | 
apply (metis assms(4) antisymD)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
191  | 
apply (metis assms(2) transE)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
192  | 
apply (metis assms(4) antisymD)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
193  | 
apply (metis Field_def Range_iff Un_iff)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
194  | 
apply (metis Field_def Range_iff Un_iff)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
195  | 
apply (metis Field_def Range_iff Un_iff)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
196  | 
apply (metis Field_def Domain_iff Un_iff)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
197  | 
apply (metis Field_def Domain_iff Un_iff)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
198  | 
apply (metis Field_def Domain_iff Un_iff)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
199  | 
apply (metis assms(1) transE)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
200  | 
apply (metis assms(1) transE)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
201  | 
apply (metis assms(1) transE)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
202  | 
apply (metis assms(1) transE)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
203  | 
done  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
204  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
205  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
206  | 
lemma oprod_Preorder: "\<lbrakk>Preorder r; Preorder r'; antisym r; antisym r'\<rbrakk> \<Longrightarrow> Preorder (r *o r')"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
207  | 
unfolding preorder_on_def using oprod_Refl oprod_trans by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
208  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
209  | 
lemma oprod_antisym: "\<lbrakk>antisym r; antisym r'\<rbrakk> \<Longrightarrow> antisym (r *o r')"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
210  | 
unfolding antisym_def oprod_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
211  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
212  | 
lemma oprod_Partial_order: "\<lbrakk>Partial_order r; Partial_order r'\<rbrakk> \<Longrightarrow> Partial_order (r *o r')"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
213  | 
unfolding partial_order_on_def using oprod_Preorder oprod_antisym by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
214  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
215  | 
lemma oprod_Total: "\<lbrakk>Total r; Total r'\<rbrakk> \<Longrightarrow> Total (r *o r')"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
216  | 
unfolding total_on_def Field_oprod unfolding oprod_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
217  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
218  | 
lemma oprod_Linear_order: "\<lbrakk>Linear_order r; Linear_order r'\<rbrakk> \<Longrightarrow> Linear_order (r *o r')"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
219  | 
unfolding linear_order_on_def using oprod_Partial_order oprod_Total by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
220  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
221  | 
lemma oprod_wf:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
222  | 
assumes WF: "wf r" and WF': "wf r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
223  | 
shows "wf (r *o r')"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
224  | 
unfolding wf_eq_minimal2 unfolding Field_oprod  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
225  | 
proof(intro allI impI, elim conjE)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
226  | 
  fix A assume *: "A \<subseteq> Field r \<times> Field r'" and **: "A \<noteq> {}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
227  | 
then obtain y where y: "y \<in> snd ` A" "\<forall>y'\<in>snd ` A. (y', y) \<notin> r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
228  | 
using spec[OF WF'[unfolded wf_eq_minimal2], of "snd ` A"] by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
229  | 
  let ?A = "fst ` A \<inter> {x. (x, y) \<in> A}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
230  | 
  from * y have "?A \<noteq> {}" "?A \<subseteq> Field r" by auto
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
231  | 
then obtain x where x: "x \<in> ?A" and "\<forall>x'\<in> ?A. (x', x) \<notin> r"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
232  | 
using spec[OF WF[unfolded wf_eq_minimal2], of "?A"] by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
233  | 
with y have "\<forall>a'\<in>A. (a', (x, y)) \<notin> r *o r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
234  | 
unfolding oprod_def mem_Collect_eq split_beta fst_conv snd_conv Id_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
235  | 
moreover from x have "(x, y) \<in> A" by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
236  | 
ultimately show "\<exists>a\<in>A. \<forall>a'\<in>A. (a', a) \<notin> r *o r'" by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
237  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
238  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
239  | 
lemma oprod_minus_Id:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
240  | 
assumes r: "Total r" "\<not> (r \<le> Id)" and r': "Total r'" "\<not> (r' \<le> Id)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
241  | 
shows "(r *o r') - Id \<le> (r - Id) *o (r' - Id)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
242  | 
unfolding oprod_def Total_Id_Field[OF r] Total_Id_Field[OF r'] by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
243  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
244  | 
lemma oprod_minus_Id1:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
245  | 
  "r \<le> Id \<Longrightarrow> r *o r' - Id \<le> {((x,y1), (x,y2)). x \<in> Field r \<and> (y1, y2) \<in> (r' - Id)}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
246  | 
unfolding oprod_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
247  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
248  | 
lemma wf_extend_oprod1:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
249  | 
assumes "wf r"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
250  | 
  shows "wf {((x,y1), (x,y2)) . x \<in> A \<and> (y1, y2) \<in> r}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
251  | 
proof (unfold wf_eq_minimal2, intro allI impI, elim conjE)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
252  | 
fix B  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
253  | 
  assume *: "B \<subseteq> Field {((x,y1), (x,y2)) . x \<in> A \<and> (y1, y2) \<in> r}" and "B \<noteq> {}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
254  | 
from image_mono[OF *, of snd] have "snd ` B \<subseteq> Field r" unfolding Field_def by force  | 
| 63167 | 255  | 
  with \<open>B \<noteq> {}\<close> obtain x where x: "x \<in> snd ` B" "\<forall>x'\<in>snd ` B. (x', x) \<notin> r"
 | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
256  | 
using spec[OF assms[unfolded wf_eq_minimal2], of "snd ` B"] by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
257  | 
then obtain a where "(a, x) \<in> B" by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
258  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
259  | 
  from * x have "\<forall>a'\<in>B. (a', (a, x)) \<notin> {((x,y1), (x,y2)) . x \<in> A \<and> (y1, y2) \<in> r}" by auto
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
260  | 
  ultimately show "\<exists>ax\<in>B. \<forall>a'\<in>B. (a', ax) \<notin> {((x,y1), (x,y2)) . x \<in> A \<and> (y1, y2) \<in> r}" by blast
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
261  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
262  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
263  | 
lemma oprod_minus_Id2:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
264  | 
  "r' \<le> Id \<Longrightarrow> r *o r' - Id \<le> {((x1,y), (x2,y)). (x1, x2) \<in> (r - Id) \<and> y \<in> Field r'}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
265  | 
unfolding oprod_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
266  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
267  | 
lemma wf_extend_oprod2:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
268  | 
assumes "wf r"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
269  | 
  shows "wf {((x1,y), (x2,y)) . (x1, x2) \<in> r \<and> y \<in> A}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
270  | 
proof (unfold wf_eq_minimal2, intro allI impI, elim conjE)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
271  | 
fix B  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
272  | 
  assume *: "B \<subseteq> Field {((x1, y), (x2, y)). (x1, x2) \<in> r \<and> y \<in> A}" and "B \<noteq> {}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
273  | 
from image_mono[OF *, of fst] have "fst ` B \<subseteq> Field r" unfolding Field_def by force  | 
| 63167 | 274  | 
  with \<open>B \<noteq> {}\<close> obtain x where x: "x \<in> fst ` B" "\<forall>x'\<in>fst ` B. (x', x) \<notin> r"
 | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
275  | 
using spec[OF assms[unfolded wf_eq_minimal2], of "fst ` B"] by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
276  | 
then obtain a where "(x, a) \<in> B" by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
277  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
278  | 
  from * x have "\<forall>a'\<in>B. (a', (x, a)) \<notin> {((x1, y), x2, y). (x1, x2) \<in> r \<and> y \<in> A}" by auto
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
279  | 
  ultimately show "\<exists>xa\<in>B. \<forall>a'\<in>B. (a', xa) \<notin> {((x1, y), x2, y). (x1, x2) \<in> r \<and> y \<in> A}" by blast
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
280  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
281  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
282  | 
lemma oprod_wf_Id:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
283  | 
assumes TOT: "Total r" and TOT': "Total r'" and WF: "wf(r - Id)" and WF': "wf(r' - Id)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
284  | 
shows "wf ((r *o r') - Id)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
285  | 
proof(cases "r \<le> Id \<or> r' \<le> Id")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
286  | 
case False  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
287  | 
thus ?thesis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
288  | 
using oprod_minus_Id[of r r'] assms oprod_wf[of "r - Id" "r' - Id"]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
289  | 
wf_subset[of "(r - Id) *o (r' - Id)" "(r *o r') - Id"] by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
290  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
291  | 
case True  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
292  | 
thus ?thesis using wf_subset[OF wf_extend_oprod1[OF WF'] oprod_minus_Id1]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
293  | 
wf_subset[OF wf_extend_oprod2[OF WF] oprod_minus_Id2] by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
294  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
295  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
296  | 
lemma oprod_Well_order:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
297  | 
assumes WELL: "Well_order r" and WELL': "Well_order r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
298  | 
shows "Well_order (r *o r')"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
299  | 
proof-  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
300  | 
have "Total r \<and> Total r'" using WELL WELL' by (auto simp add: order_on_defs)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
301  | 
thus ?thesis using assms unfolding well_order_on_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
302  | 
using oprod_Linear_order oprod_wf_Id by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
303  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
304  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
305  | 
lemma oprod_embed:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
306  | 
  assumes WELL: "Well_order r" and WELL': "Well_order r'" and "r' \<noteq> {}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
307  | 
shows "embed r (r *o r') (\<lambda>x. (x, minim r' (Field r')))" (is "embed _ _ ?f")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
308  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
309  | 
  from assms(3) have r': "Field r' \<noteq> {}" unfolding Field_def by auto
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
310  | 
have minim[simp]: "minim r' (Field r') \<in> Field r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
311  | 
using wo_rel.minim_inField[unfolded wo_rel_def, OF WELL' _ r'] by auto  | 
| 
58127
 
b7cab82f488e
renamed '(BNF_)Constructions_on_Wellorders' to '(BNF_)Wellorder_Constructions'
 
blanchet 
parents: 
55932 
diff
changeset
 | 
312  | 
  { fix b
 | 
| 63540 | 313  | 
assume b: "(b, minim r' (Field r')) \<in> r'"  | 
314  | 
hence "b \<in> Field r'" unfolding Field_def by auto  | 
|
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
315  | 
hence "(minim r' (Field r'), b) \<in> r'"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
316  | 
using wo_rel.minim_least[unfolded wo_rel_def, OF WELL' subset_refl] r' by auto  | 
| 63540 | 317  | 
with b have "b = minim r' (Field r')"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
318  | 
by (metis WELL' antisym_def linear_order_on_def partial_order_on_def well_order_on_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
319  | 
} note * = this  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
320  | 
have 1: "Well_order (r *o r')" using assms by (auto simp add: oprod_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
321  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
322  | 
from r' have "compat r (r *o r') ?f" unfolding compat_def oprod_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
323  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
324  | 
from * have "ofilter (r *o r') (?f ` 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
 | 
325  | 
unfolding wo_rel.ofilter_def[unfolded wo_rel_def, OF 1] Field_oprod under_def  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
326  | 
unfolding oprod_def by auto (auto simp: image_iff Field_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
327  | 
moreover have "inj_on ?f (Field r)" unfolding inj_on_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
328  | 
ultimately show ?thesis using assms by (auto simp add: embed_iff_compat_inj_on_ofilter)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
329  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
330  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
331  | 
corollary oprod_ordLeq: "\<lbrakk>Well_order r; Well_order r'; r' \<noteq> {}\<rbrakk> \<Longrightarrow> r \<le>o r *o r'"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
332  | 
using oprod_embed oprod_Well_order unfolding ordLeq_def by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
333  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
334  | 
definition "support z A f = {x \<in> A. f x \<noteq> z}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
335  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
336  | 
lemma support_Un[simp]: "support z (A \<union> B) f = support z A f \<union> support z B f"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
337  | 
unfolding support_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
338  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
339  | 
lemma support_upd[simp]: "support z A (f(x := z)) = support z A f - {x}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
340  | 
unfolding support_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
341  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
342  | 
lemma support_upd_subset[simp]: "support z A (f(x := y)) \<subseteq> support z A f \<union> {x}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
343  | 
unfolding support_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
344  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
345  | 
lemma fun_unequal_in_support:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
346  | 
assumes "f \<noteq> g" "f \<in> Func A B" "g \<in> Func A C"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
347  | 
  shows "(support z A f \<union> support z A g) \<inter> {a. f a \<noteq> g a} \<noteq> {}" (is "?L \<inter> ?R \<noteq> {}")
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
348  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
349  | 
from assms(1) obtain x where x: "f x \<noteq> g x" by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
350  | 
hence "x \<in> ?R" by simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
351  | 
moreover from assms(2-3) x have "x \<in> A" unfolding Func_def by fastforce  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
352  | 
with x have "x \<in> ?L" unfolding support_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
353  | 
ultimately show ?thesis by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
354  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
355  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
356  | 
definition fin_support where  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
357  | 
  "fin_support z A = {f. finite (support z A f)}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
358  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
359  | 
lemma finite_support: "f \<in> fin_support z A \<Longrightarrow> finite (support z A f)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
360  | 
unfolding support_def fin_support_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
361  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
362  | 
lemma fin_support_Field_osum:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
363  | 
"f \<in> fin_support z (Inl ` A \<union> Inr ` B) \<longleftrightarrow>  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
364  | 
(f o Inl) \<in> fin_support z A \<and> (f o Inr) \<in> fin_support z B" (is "?L \<longleftrightarrow> ?R1 \<and> ?R2")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
365  | 
proof safe  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
366  | 
assume ?L  | 
| 63167 | 367  | 
from \<open>?L\<close> show ?R1 unfolding fin_support_def support_def  | 
| 
55414
 
eab03e9cee8a
renamed '{prod,sum,bool,unit}_case' to 'case_...'
 
blanchet 
parents: 
55102 
diff
changeset
 | 
368  | 
by (fastforce simp: image_iff elim: finite_surj[of _ _ "case_sum id undefined"])  | 
| 63167 | 369  | 
from \<open>?L\<close> show ?R2 unfolding fin_support_def support_def  | 
| 
55414
 
eab03e9cee8a
renamed '{prod,sum,bool,unit}_case' to 'case_...'
 
blanchet 
parents: 
55102 
diff
changeset
 | 
370  | 
by (fastforce simp: image_iff elim: finite_surj[of _ _ "case_sum undefined id"])  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
371  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
372  | 
assume ?R1 ?R2  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
373  | 
thus ?L unfolding fin_support_def support_Un  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
374  | 
by (auto simp: support_def elim: finite_surj[of _ _ Inl] finite_surj[of _ _ Inr])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
375  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
376  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
377  | 
lemma Func_upd: "\<lbrakk>f \<in> Func A B; x \<in> A; y \<in> B\<rbrakk> \<Longrightarrow> f(x := y) \<in> Func A B"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
378  | 
unfolding Func_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
379  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
380  | 
context wo_rel  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
381  | 
begin  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
382  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
383  | 
definition isMaxim :: "'a set \<Rightarrow> 'a \<Rightarrow> bool"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
384  | 
where "isMaxim A b \<equiv> b \<in> A \<and> (\<forall>a \<in> A. (a,b) \<in> r)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
385  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
386  | 
definition maxim :: "'a set \<Rightarrow> 'a"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
387  | 
where "maxim A \<equiv> THE b. isMaxim A b"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
388  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
389  | 
lemma isMaxim_unique[intro]: "\<lbrakk>isMaxim A x; isMaxim A y\<rbrakk> \<Longrightarrow> x = y"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
390  | 
unfolding isMaxim_def using antisymD[OF ANTISYM, of x y] by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
391  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
392  | 
lemma maxim_isMaxim: "\<lbrakk>finite A; A \<noteq> {}; A \<subseteq> Field r\<rbrakk> \<Longrightarrow> isMaxim A (maxim A)"
 | 
| 
58127
 
b7cab82f488e
renamed '(BNF_)Constructions_on_Wellorders' to '(BNF_)Wellorder_Constructions'
 
blanchet 
parents: 
55932 
diff
changeset
 | 
393  | 
unfolding maxim_def  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
394  | 
proof (rule theI', rule ex_ex1I[OF _ isMaxim_unique, rotated], assumption+,  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
395  | 
induct A rule: finite_induct)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
396  | 
case (insert x A)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
397  | 
thus ?case  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
398  | 
  proof (cases "A = {}")
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
399  | 
case True  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
400  | 
    moreover have "isMaxim {x} x" unfolding isMaxim_def using refl_onD[OF REFL] insert(5) by auto
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
401  | 
ultimately show ?thesis by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
402  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
403  | 
case False  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
404  | 
with insert(3,5) obtain y where "isMaxim A y" by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
405  | 
with insert(2,5) have "if (y, x) \<in> r then isMaxim (insert x A) x else isMaxim (insert x A) y"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
406  | 
unfolding isMaxim_def subset_eq by (metis insert_iff max2_def max2_equals1 max2_iff)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
407  | 
thus ?thesis by metis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
408  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
409  | 
qed simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
410  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
411  | 
lemma maxim_in: "\<lbrakk>finite A; A \<noteq> {}; A \<subseteq> Field r\<rbrakk> \<Longrightarrow> maxim A \<in> A"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
412  | 
using maxim_isMaxim unfolding isMaxim_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
413  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
414  | 
lemma maxim_greatest: "\<lbrakk>finite A; x \<in> A; A \<subseteq> Field r\<rbrakk> \<Longrightarrow> (x, maxim A) \<in> r"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
415  | 
using maxim_isMaxim unfolding isMaxim_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
416  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
417  | 
lemma isMaxim_zero: "isMaxim A zero \<Longrightarrow> A = {zero}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
418  | 
unfolding isMaxim_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
419  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
420  | 
lemma maxim_insert:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
421  | 
  assumes "finite A" "A \<noteq> {}" "A \<subseteq> Field r" "x \<in> Field r"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
422  | 
shows "maxim (insert x A) = max2 x (maxim A)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
423  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
424  | 
from assms have *: "isMaxim (insert x A) (maxim (insert x A))" "isMaxim A (maxim A)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
425  | 
using maxim_isMaxim by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
426  | 
show ?thesis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
427  | 
proof (cases "(x, maxim A) \<in> r")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
428  | 
case True  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
429  | 
with *(2) have "isMaxim (insert x A) (maxim A)" unfolding isMaxim_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
430  | 
using transD[OF TRANS, of _ x "maxim A"] by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
431  | 
with *(1) True show ?thesis unfolding max2_def by (metis isMaxim_unique)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
432  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
433  | 
case False  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
434  | 
hence "(maxim A, x) \<in> r" by (metis *(2) assms(3,4) in_mono in_notinI isMaxim_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
435  | 
with *(2) assms(4) have "isMaxim (insert x A) x" unfolding isMaxim_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
436  | 
using transD[OF TRANS, of _ "maxim A" x] refl_onD[OF REFL, of x] by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
437  | 
with *(1) False show ?thesis unfolding max2_def by (metis isMaxim_unique)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
438  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
439  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
440  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
441  | 
lemma maxim_Un:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
442  | 
  assumes "finite A" "A \<noteq> {}" "A \<subseteq> Field r" "finite B" "B \<noteq> {}" "B \<subseteq> Field r"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
443  | 
shows "maxim (A \<union> B) = max2 (maxim A) (maxim B)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
444  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
445  | 
from assms have *: "isMaxim (A \<union> B) (maxim (A \<union> B))" "isMaxim A (maxim A)" "isMaxim B (maxim B)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
446  | 
using maxim_isMaxim by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
447  | 
show ?thesis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
448  | 
proof (cases "(maxim A, maxim B) \<in> r")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
449  | 
case True  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
450  | 
with *(2,3) have "isMaxim (A \<union> B) (maxim B)" unfolding isMaxim_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
451  | 
using transD[OF TRANS, of _ "maxim A" "maxim B"] by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
452  | 
with *(1) True show ?thesis unfolding max2_def by (metis isMaxim_unique)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
453  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
454  | 
case False  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
455  | 
hence "(maxim B, maxim A) \<in> r" by (metis *(2,3) assms(3,6) in_mono in_notinI isMaxim_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
456  | 
with *(2,3) have "isMaxim (A \<union> B) (maxim A)" unfolding isMaxim_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
457  | 
using transD[OF TRANS, of _ "maxim B" "maxim A"] by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
458  | 
with *(1) False show ?thesis unfolding max2_def by (metis isMaxim_unique)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
459  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
460  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
461  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
462  | 
lemma maxim_insert_zero:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
463  | 
  assumes "finite A" "A \<noteq> {}" "A \<subseteq> Field r"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
464  | 
shows "maxim (insert zero A) = maxim A"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
465  | 
using assms zero_in_Field maxim_in[OF assms] by (subst maxim_insert[unfolded max2_def]) auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
466  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
467  | 
lemma maxim_equality: "isMaxim A x \<Longrightarrow> maxim A = x"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
468  | 
unfolding maxim_def by (rule the_equality) auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
469  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
470  | 
lemma maxim_singleton:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
471  | 
  "x \<in> Field r \<Longrightarrow> maxim {x} = x"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
472  | 
using refl_onD[OF REFL] by (intro maxim_equality) (simp add: isMaxim_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
473  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
474  | 
lemma maxim_Int: "\<lbrakk>finite A; A \<noteq> {}; A \<subseteq> Field r; maxim A \<in> B\<rbrakk> \<Longrightarrow> maxim (A \<inter> B) = maxim A"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
475  | 
by (rule maxim_equality) (auto simp: isMaxim_def intro: maxim_in maxim_greatest)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
476  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
477  | 
lemma maxim_mono: "\<lbrakk>X \<subseteq> Y; finite Y; X \<noteq> {}; Y \<subseteq> Field r\<rbrakk> \<Longrightarrow> (maxim X, maxim Y) \<in> r"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
478  | 
using maxim_in[OF finite_subset, of X Y] by (auto intro: maxim_greatest)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
479  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
480  | 
definition "max_fun_diff f g \<equiv> maxim ({a \<in> Field r. f a \<noteq> g a})"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
481  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
482  | 
lemma max_fun_diff_commute: "max_fun_diff f g = max_fun_diff g f"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
483  | 
unfolding max_fun_diff_def by metis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
484  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
485  | 
lemma zero_under: "x \<in> Field r \<Longrightarrow> zero \<in> under x"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
486  | 
unfolding under_def by (auto intro: zero_smallest)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
487  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
488  | 
end  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
489  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
490  | 
definition "FinFunc r s = Func (Field s) (Field r) \<inter> fin_support (zero r) (Field s)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
491  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
492  | 
lemma FinFuncD: "\<lbrakk>f \<in> FinFunc r s; x \<in> Field s\<rbrakk> \<Longrightarrow> f x \<in> Field r"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
493  | 
unfolding FinFunc_def Func_def by (fastforce split: option.splits)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
494  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
495  | 
locale wo_rel2 =  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
496  | 
fixes r s  | 
| 
58127
 
b7cab82f488e
renamed '(BNF_)Constructions_on_Wellorders' to '(BNF_)Wellorder_Constructions'
 
blanchet 
parents: 
55932 
diff
changeset
 | 
497  | 
assumes rWELL: "Well_order r"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
498  | 
and sWELL: "Well_order s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
499  | 
begin  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
500  | 
|
| 61605 | 501  | 
interpretation r: wo_rel r by unfold_locales (rule rWELL)  | 
502  | 
interpretation s: wo_rel s by unfold_locales (rule sWELL)  | 
|
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
503  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
504  | 
abbreviation "SUPP \<equiv> support r.zero (Field s)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
505  | 
abbreviation "FINFUNC \<equiv> FinFunc r s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
506  | 
lemmas FINFUNCD = FinFuncD[of _ r s]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
507  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
508  | 
lemma fun_diff_alt: "{a \<in> Field s. f a \<noteq> g a} = (SUPP f \<union> SUPP g) \<inter> {a. f a \<noteq> g a}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
509  | 
by (auto simp: support_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
510  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
511  | 
lemma max_fun_diff_alt:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
512  | 
  "s.max_fun_diff f g = s.maxim ((SUPP f \<union> SUPP g) \<inter> {a. f a \<noteq> g a})"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
513  | 
unfolding s.max_fun_diff_def fun_diff_alt ..  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
514  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
515  | 
lemma isMaxim_max_fun_diff: "\<lbrakk>f \<noteq> g; f \<in> FINFUNC; g \<in> FINFUNC\<rbrakk> \<Longrightarrow>  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
516  | 
  s.isMaxim {a \<in> Field s. f a \<noteq> g a} (s.max_fun_diff f g)"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
517  | 
using fun_unequal_in_support[of f g] unfolding max_fun_diff_alt fun_diff_alt fun_eq_iff  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
518  | 
by (intro s.maxim_isMaxim) (auto simp: FinFunc_def fin_support_def support_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
519  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
520  | 
lemma max_fun_diff_in: "\<lbrakk>f \<noteq> g; f \<in> FINFUNC; g \<in> FINFUNC\<rbrakk> \<Longrightarrow>  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
521  | 
  s.max_fun_diff f g \<in> {a \<in> Field s. f a \<noteq> g a}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
522  | 
using isMaxim_max_fun_diff unfolding s.isMaxim_def by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
523  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
524  | 
lemma max_fun_diff_max: "\<lbrakk>f \<noteq> g; f \<in> FINFUNC; g \<in> FINFUNC; x \<in> {a \<in> Field s. f a \<noteq> g a}\<rbrakk> \<Longrightarrow>
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
525  | 
(x, s.max_fun_diff f g) \<in> s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
526  | 
using isMaxim_max_fun_diff unfolding s.isMaxim_def by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
527  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
528  | 
lemma max_fun_diff:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
529  | 
"\<lbrakk>f \<noteq> g; f \<in> FINFUNC; g \<in> FINFUNC\<rbrakk> \<Longrightarrow>  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
530  | 
(\<exists>a b. a \<noteq> b \<and> a \<in> Field r \<and> b \<in> Field r \<and>  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
531  | 
f (s.max_fun_diff f g) = a \<and> g (s.max_fun_diff f g) = b)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
532  | 
using isMaxim_max_fun_diff[of f g] unfolding s.isMaxim_def FinFunc_def Func_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
533  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
534  | 
lemma max_fun_diff_le_eq:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
535  | 
"\<lbrakk>(s.max_fun_diff f g, x) \<in> s; f \<noteq> g; f \<in> FINFUNC; g \<in> FINFUNC; x \<noteq> s.max_fun_diff f g\<rbrakk> \<Longrightarrow>  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
536  | 
f x = g x"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
537  | 
using max_fun_diff_max[of f g x] antisymD[OF s.ANTISYM, of "s.max_fun_diff f g" x]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
538  | 
by (auto simp: Field_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
539  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
540  | 
lemma max_fun_diff_max2:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
541  | 
assumes ineq: "s.max_fun_diff f g = s.max_fun_diff g h \<longrightarrow>  | 
| 
58127
 
b7cab82f488e
renamed '(BNF_)Constructions_on_Wellorders' to '(BNF_)Wellorder_Constructions'
 
blanchet 
parents: 
55932 
diff
changeset
 | 
542  | 
f (s.max_fun_diff f g) \<noteq> h (s.max_fun_diff g h)" and  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
543  | 
fg: "f \<noteq> g" and gh: "g \<noteq> h" and fh: "f \<noteq> h" and  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
544  | 
f: "f \<in> FINFUNC" and g: "g \<in> FINFUNC" and h: "h \<in> FINFUNC"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
545  | 
shows "s.max_fun_diff f h = s.max2 (s.max_fun_diff f g) (s.max_fun_diff g h)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
546  | 
(is "?fh = s.max2 ?fg ?gh")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
547  | 
proof (cases "?fg = ?gh")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
548  | 
case True  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
549  | 
with ineq have "f ?fg \<noteq> h ?fg" by simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
550  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
551  | 
  { fix x assume x: "x \<in> {a \<in> Field s. f a \<noteq> h a}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
552  | 
hence "(x, ?fg) \<in> s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
553  | 
proof (cases "x = ?fg")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
554  | 
case False show ?thesis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
555  | 
proof (rule ccontr)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
556  | 
assume "(x, ?fg) \<notin> s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
557  | 
with max_fun_diff_in[OF fg f g] x False have *: "(?fg, x) \<in> s" by (blast intro: s.in_notinI)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
558  | 
hence "f x = g x" by (rule max_fun_diff_le_eq[OF _ fg f g False])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
559  | 
moreover have "g x = h x" using max_fun_diff_le_eq[OF _ gh g h] False True * by simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
560  | 
ultimately show False using x by simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
561  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
562  | 
qed (simp add: refl_onD[OF s.REFL])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
563  | 
}  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
564  | 
  ultimately have "s.isMaxim {a \<in> Field s. f a \<noteq> h a} ?fg"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
565  | 
unfolding s.isMaxim_def using max_fun_diff_in[OF fg f g] by simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
566  | 
hence "?fh = ?fg" using isMaxim_max_fun_diff[OF fh f h] by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
567  | 
thus ?thesis unfolding True s.max2_def by simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
568  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
569  | 
case False note * = this  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
570  | 
show ?thesis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
571  | 
proof (cases "(?fg, ?gh) \<in> s")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
572  | 
case True  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
573  | 
hence *: "f ?gh = g ?gh" by (rule max_fun_diff_le_eq[OF _ fg f g *[symmetric]])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
574  | 
    hence "s.isMaxim {a \<in> Field s. f a \<noteq> h a} ?gh" using isMaxim_max_fun_diff[OF gh g h]
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
575  | 
isMaxim_max_fun_diff[OF fg f g] transD[OF s.TRANS _ True]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
576  | 
unfolding s.isMaxim_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
577  | 
hence "?fh = ?gh" using isMaxim_max_fun_diff[OF fh f h] by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
578  | 
thus ?thesis using True unfolding s.max2_def by simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
579  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
580  | 
case False  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
581  | 
with max_fun_diff_in[OF fg f g] max_fun_diff_in[OF gh g h] have True: "(?gh, ?fg) \<in> s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
582  | 
by (blast intro: s.in_notinI)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
583  | 
hence *: "g ?fg = h ?fg" by (rule max_fun_diff_le_eq[OF _ gh g h *])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
584  | 
    hence "s.isMaxim {a \<in> Field s. f a \<noteq> h a} ?fg" using isMaxim_max_fun_diff[OF gh g h]
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
585  | 
isMaxim_max_fun_diff[OF fg f g] True transD[OF s.TRANS, of _ _ ?fg]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
586  | 
unfolding s.isMaxim_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
587  | 
hence "?fh = ?fg" using isMaxim_max_fun_diff[OF fh f h] by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
588  | 
thus ?thesis using False unfolding s.max2_def by simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
589  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
590  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
591  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
592  | 
definition oexp where  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
593  | 
  "oexp = {(f, g) . f \<in> FINFUNC \<and> g \<in> FINFUNC \<and>
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
594  | 
((let m = s.max_fun_diff f g in (f m, g m) \<in> r) \<or> f = g)}"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
595  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
596  | 
lemma Field_oexp: "Field oexp = FINFUNC"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
597  | 
unfolding oexp_def FinFunc_def by (auto simp: Let_def Field_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
598  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
599  | 
lemma oexp_Refl: "Refl oexp"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
600  | 
unfolding refl_on_def Field_oexp unfolding oexp_def by (auto simp: Let_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
601  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
602  | 
lemma oexp_trans: "trans oexp"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
603  | 
proof (unfold trans_def, safe)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
604  | 
fix f g h :: "'b \<Rightarrow> 'a"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
605  | 
let ?fg = "s.max_fun_diff f g"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
606  | 
and ?gh = "s.max_fun_diff g h"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
607  | 
and ?fh = "s.max_fun_diff f h"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
608  | 
assume oexp: "(f, g) \<in> oexp" "(g, h) \<in> oexp"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
609  | 
thus "(f, h) \<in> oexp"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
610  | 
proof (cases "f = g \<or> g = h")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
611  | 
case False  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
612  | 
with oexp have "f \<in> FINFUNC" "g \<in> FINFUNC" "h \<in> FINFUNC"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
613  | 
"(f ?fg, g ?fg) \<in> r" "(g ?gh, h ?gh) \<in> r" unfolding oexp_def Let_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
614  | 
note * = this False  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
615  | 
show ?thesis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
616  | 
proof (cases "f \<noteq> h")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
617  | 
case True  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
618  | 
show ?thesis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
619  | 
proof (cases "?fg = ?gh \<longrightarrow> f ?fg \<noteq> h ?gh")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
620  | 
case True  | 
| 63167 | 621  | 
show ?thesis using max_fun_diff_max2[of f g h, OF True] * \<open>f \<noteq> h\<close> max_fun_diff_in  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
622  | 
r.max2_iff[OF FINFUNCD FINFUNCD] r.max2_equals1[OF FINFUNCD FINFUNCD] max_fun_diff_le_eq  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
623  | 
s.in_notinI[OF disjI1] unfolding oexp_def Let_def s.max2_def mem_Collect_eq by safe metis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
624  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
625  | 
case False with * show ?thesis unfolding oexp_def Let_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
626  | 
using antisymD[OF r.ANTISYM, of "g ?gh" "h ?gh"] max_fun_diff_in[of g h] by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
627  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
628  | 
qed (auto simp: oexp_def *(3))  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
629  | 
qed auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
630  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
631  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
632  | 
lemma oexp_Preorder: "Preorder oexp"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
633  | 
unfolding preorder_on_def using oexp_Refl oexp_trans by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
634  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
635  | 
lemma oexp_antisym: "antisym oexp"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
636  | 
proof (unfold antisym_def, safe, rule ccontr)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
637  | 
fix f g assume "(f, g) \<in> oexp" "(g, f) \<in> oexp" "g \<noteq> f"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
638  | 
thus False using refl_onD[OF r.REFL FINFUNCD] max_fun_diff_in unfolding oexp_def Let_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
639  | 
by (auto dest!: antisymD[OF r.ANTISYM] simp: s.max_fun_diff_commute)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
640  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
641  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
642  | 
lemma oexp_Partial_order: "Partial_order oexp"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
643  | 
unfolding partial_order_on_def using oexp_Preorder oexp_antisym by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
644  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
645  | 
lemma oexp_Total: "Total oexp"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
646  | 
unfolding total_on_def Field_oexp unfolding oexp_def using FINFUNCD max_fun_diff_in  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
647  | 
by (auto simp: Let_def s.max_fun_diff_commute intro!: r.in_notinI)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
648  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
649  | 
lemma oexp_Linear_order: "Linear_order oexp"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
650  | 
unfolding linear_order_on_def using oexp_Partial_order oexp_Total by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
651  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
652  | 
definition "const = (\<lambda>x. if x \<in> Field s then r.zero else undefined)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
653  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
654  | 
lemma const_in[simp]: "x \<in> Field s \<Longrightarrow> const x = r.zero"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
655  | 
unfolding const_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
656  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
657  | 
lemma const_notin[simp]: "x \<notin> Field s \<Longrightarrow> const x = undefined"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
658  | 
unfolding const_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
659  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
660  | 
lemma const_Int_Field[simp]: "Field s \<inter> - {x. const x = r.zero} = {}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
661  | 
by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
662  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
663  | 
lemma const_FINFUNC[simp]: "Field r \<noteq> {} \<Longrightarrow> const \<in> FINFUNC"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
664  | 
unfolding FinFunc_def Func_def fin_support_def support_def const_def Int_iff mem_Collect_eq  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
665  | 
using r.zero_in_Field by (metis (lifting) Collect_empty_eq finite.emptyI)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
666  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
667  | 
lemma const_least:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
668  | 
  assumes "Field r \<noteq> {}" "f \<in> FINFUNC"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
669  | 
shows "(const, f) \<in> oexp"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
670  | 
proof (cases "f = const")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
671  | 
case True thus ?thesis using refl_onD[OF oexp_Refl] assms(2) unfolding Field_oexp by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
672  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
673  | 
case False  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
674  | 
with assms show ?thesis using max_fun_diff_in[of f const]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
675  | 
unfolding oexp_def Let_def by (auto intro: r.zero_smallest FinFuncD simp: s.max_fun_diff_commute)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
676  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
677  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
678  | 
lemma support_not_const:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
679  | 
assumes "F \<subseteq> FINFUNC" and "const \<notin> F"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
680  | 
  shows "\<forall>f \<in> F. finite (SUPP f) \<and> SUPP f \<noteq> {} \<and> SUPP f \<subseteq> Field s"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
681  | 
proof (intro ballI conjI)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
682  | 
fix f assume "f \<in> F"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
683  | 
thus "finite (SUPP f)" "SUPP f \<subseteq> Field s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
684  | 
using assms(1) unfolding FinFunc_def fin_support_def support_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
685  | 
  show "SUPP f \<noteq> {}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
686  | 
proof (rule ccontr, unfold not_not)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
687  | 
    assume "SUPP f = {}"
 | 
| 63167 | 688  | 
moreover from \<open>f \<in> F\<close> assms(1) have "f \<in> FINFUNC" by blast  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
689  | 
ultimately have "f = const"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
690  | 
by (auto simp: fun_eq_iff support_def FinFunc_def Func_def const_def)  | 
| 63167 | 691  | 
with assms(2) \<open>f \<in> F\<close> show False by blast  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
692  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
693  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
694  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
695  | 
lemma maxim_isMaxim_support:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
696  | 
assumes f: "F \<subseteq> FINFUNC" and "const \<notin> F"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
697  | 
shows "\<forall>f \<in> F. s.isMaxim (SUPP f) (s.maxim (SUPP f))"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
698  | 
using support_not_const[OF assms] by (auto intro!: s.maxim_isMaxim)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
699  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
700  | 
lemma oexp_empty2: "Field s = {} \<Longrightarrow> oexp = {(\<lambda>x. undefined, \<lambda>x. undefined)}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
701  | 
unfolding oexp_def FinFunc_def fin_support_def support_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
702  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
703  | 
lemma oexp_empty: "\<lbrakk>Field r = {}; Field s \<noteq> {}\<rbrakk> \<Longrightarrow> oexp = {}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
704  | 
unfolding oexp_def FinFunc_def Let_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
705  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
706  | 
lemma fun_upd_FINFUNC: "\<lbrakk>f \<in> FINFUNC; x \<in> Field s; y \<in> Field r\<rbrakk> \<Longrightarrow> f(x := y) \<in> FINFUNC"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
707  | 
unfolding FinFunc_def Func_def fin_support_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
708  | 
by (auto intro: finite_subset[OF support_upd_subset])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
709  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
710  | 
lemma fun_upd_same_oexp:  | 
| 
58127
 
b7cab82f488e
renamed '(BNF_)Constructions_on_Wellorders' to '(BNF_)Wellorder_Constructions'
 
blanchet 
parents: 
55932 
diff
changeset
 | 
711  | 
assumes "(f, g) \<in> oexp" "f x = g x" "x \<in> Field s" "y \<in> Field r"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
712  | 
shows "(f(x := y), g(x := y)) \<in> oexp"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
713  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
714  | 
from assms(1) fun_upd_FINFUNC[OF _ assms(3,4)] have fg: "f(x := y) \<in> FINFUNC" "g(x := y) \<in> FINFUNC"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
715  | 
unfolding oexp_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
716  | 
moreover from assms(2) have "s.max_fun_diff (f(x := y)) (g(x := y)) = s.max_fun_diff f g"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
717  | 
unfolding s.max_fun_diff_def by auto metis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
718  | 
ultimately show ?thesis using assms refl_onD[OF r.REFL] unfolding oexp_def Let_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
719  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
720  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
721  | 
lemma fun_upd_smaller_oexp:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
722  | 
assumes "f \<in> FINFUNC" "x \<in> Field s" "y \<in> Field r" "(y, f x) \<in> r"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
723  | 
shows "(f(x := y), f) \<in> oexp"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
724  | 
using assms fun_upd_FINFUNC[OF assms(1-3)] s.maxim_singleton[of "x"]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
725  | 
unfolding oexp_def FinFunc_def Let_def fin_support_def s.max_fun_diff_def by (auto simp: fun_eq_iff)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
726  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
727  | 
lemma oexp_wf_Id: "wf (oexp - Id)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
728  | 
proof (cases "Field r = {} \<or> Field s = {}")
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
729  | 
case True thus ?thesis using oexp_empty oexp_empty2 by fastforce  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
730  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
731  | 
case False  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
732  | 
  hence Fields: "Field s \<noteq> {}" "Field r \<noteq> {}" by simp_all
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
733  | 
hence [simp]: "r.zero \<in> Field r" by (intro r.zero_in_Field)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
734  | 
have const[simp]: "\<And>F. \<lbrakk>const \<in> F; F \<subseteq> FINFUNC\<rbrakk> \<Longrightarrow> \<exists>f0\<in>F. \<forall>f\<in>F. (f0, f) \<in> oexp"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
735  | 
using const_least[OF Fields(2)] by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
736  | 
show ?thesis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
737  | 
unfolding Linear_order_wf_diff_Id[OF oexp_Linear_order] Field_oexp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
738  | 
proof (intro allI impI)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
739  | 
    fix A assume A: "A \<subseteq> FINFUNC" "A \<noteq> {}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
740  | 
    { fix y F
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
741  | 
have "F \<subseteq> FINFUNC \<and> (\<exists>f \<in> F. y = s.maxim (SUPP f)) \<longrightarrow>  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
742  | 
(\<exists>f0 \<in> F. \<forall>f \<in> F. (f0, f) \<in> oexp)" (is "?P F y")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
743  | 
proof (induct y arbitrary: F rule: s.well_order_induct)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
744  | 
case (1 y)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
745  | 
show ?case  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
746  | 
proof (intro impI, elim conjE bexE)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
747  | 
fix f assume F: "F \<subseteq> FINFUNC" "f \<in> F" "y = s.maxim (SUPP f)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
748  | 
thus "\<exists>f0\<in>F. \<forall>f\<in>F. (f0, f) \<in> oexp"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
749  | 
proof (cases "const \<in> F")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
750  | 
case False  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
751  | 
with F have maxF: "\<forall>f \<in> F. s.isMaxim (SUPP f) (s.maxim (SUPP f))"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
752  | 
              and SUPPF: "\<forall>f \<in> F. finite (SUPP f) \<and> SUPP f \<noteq> {} \<and> SUPP f \<subseteq> Field s"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
753  | 
using maxim_isMaxim_support support_not_const by auto  | 
| 63040 | 754  | 
            define z where "z = s.minim {s.maxim (SUPP f) | f. f \<in> F}"
 | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
755  | 
            from F SUPPF maxF have zmin: "s.isMinim {s.maxim (SUPP f) | f. f \<in> F} z"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
756  | 
unfolding z_def by (intro s.minim_isMinim) (auto simp: s.isMaxim_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
757  | 
with F have zy: "(z, y) \<in> s" unfolding s.isMinim_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
758  | 
hence zField: "z \<in> Field s" unfolding Field_def by auto  | 
| 63040 | 759  | 
            define x0 where "x0 = r.minim {f z | f. f \<in> F \<and> z = s.maxim (SUPP f)}"
 | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
760  | 
from F(1,2) maxF(1) SUPPF zmin  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
761  | 
              have x0min: "r.isMinim {f z | f. f \<in> F \<and> z = s.maxim (SUPP f)} x0"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
762  | 
unfolding x0_def s.isMaxim_def s.isMinim_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
763  | 
by (blast intro!: r.minim_isMinim FinFuncD[of _ r s])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
764  | 
with maxF(1) SUPPF F(1) have x0Field: "x0 \<in> Field r"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
765  | 
unfolding r.isMinim_def s.isMaxim_def by (auto intro!: FINFUNCD)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
766  | 
from x0min maxF(1) SUPPF F(1) have x0notzero: "x0 \<noteq> r.zero"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
767  | 
unfolding r.isMinim_def s.isMaxim_def FinFunc_def Func_def support_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
768  | 
by fastforce  | 
| 63040 | 769  | 
            define G where "G = {f(z := r.zero) | f. f \<in> F \<and> z = s.maxim (SUPP f) \<and> f z = x0}"
 | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
770  | 
            from zmin x0min have "G \<noteq> {}" unfolding G_def z_def s.isMinim_def r.isMinim_def by blast
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
771  | 
have GF: "G \<subseteq> (\<lambda>f. f(z := r.zero)) ` F" unfolding G_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
772  | 
have "G \<subseteq> fin_support r.zero (Field s)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
773  | 
unfolding FinFunc_def fin_support_def proof safe  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
774  | 
fix g assume "g \<in> G"  | 
| 63540 | 775  | 
with GF obtain f where f: "f \<in> F" "g = f(z := r.zero)" by auto  | 
776  | 
with SUPPF have "finite (SUPP f)" by blast  | 
|
777  | 
with f show "finite (SUPP g)"  | 
|
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
778  | 
by (elim finite_subset[rotated]) (auto simp: support_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
779  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
780  | 
moreover from F GF zField have "G \<subseteq> Func (Field s) (Field r)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
781  | 
using Func_upd[of _ "Field s" "Field r" z r.zero] unfolding FinFunc_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
782  | 
ultimately have G: "G \<subseteq> FINFUNC" unfolding FinFunc_def by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
783  | 
hence "\<exists>g0\<in>G. \<forall>g\<in>G. (g0, g) \<in> oexp"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
784  | 
proof (cases "const \<in> G")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
785  | 
case False  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
786  | 
with G have maxG: "\<forall>g \<in> G. s.isMaxim (SUPP g) (s.maxim (SUPP g))"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
787  | 
                and SUPPG: "\<forall>g \<in> G. finite (SUPP g) \<and> SUPP g \<noteq> {} \<and> SUPP g \<subseteq> Field s"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
788  | 
using maxim_isMaxim_support support_not_const by auto  | 
| 63040 | 789  | 
              define y' where "y' = s.minim {s.maxim (SUPP f) | f. f \<in> G}"
 | 
| 63167 | 790  | 
              from G SUPPG maxG \<open>G \<noteq> {}\<close> have y'min: "s.isMinim {s.maxim (SUPP f) | f. f \<in> G} y'"
 | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
791  | 
unfolding y'_def by (intro s.minim_isMinim) (auto simp: s.isMaxim_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
792  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
793  | 
have "\<forall>g \<in> G. z \<notin> SUPP g" unfolding support_def G_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
794  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
795  | 
              { fix g assume g: "g \<in> G"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
796  | 
then obtain f where "f \<in> F" "g = f(z := r.zero)" and z: "z = s.maxim (SUPP f)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
797  | 
unfolding G_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
798  | 
with SUPPF bspec[OF SUPPG g] have "(s.maxim (SUPP g), z) \<in> s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
799  | 
unfolding z by (intro s.maxim_mono) auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
800  | 
}  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
801  | 
moreover from y'min have "\<And>g. g \<in> G \<Longrightarrow> (y', s.maxim (SUPP g)) \<in> s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
802  | 
unfolding s.isMinim_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
803  | 
ultimately have "y' \<noteq> z" "(y', z) \<in> s" using maxG  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
804  | 
unfolding s.isMinim_def s.isMaxim_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
805  | 
with zy have "y' \<noteq> y" "(y', y) \<in> s" using antisymD[OF s.ANTISYM] transD[OF s.TRANS]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
806  | 
by blast+  | 
| 63167 | 807  | 
              moreover from \<open>G \<noteq> {}\<close> have "\<exists>g \<in> G. y' = wo_rel.maxim s (SUPP g)" using y'min
 | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
808  | 
by (auto simp: G_def s.isMinim_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
809  | 
ultimately show ?thesis using mp[OF spec[OF mp[OF spec[OF 1]]], of y' G] G by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
810  | 
qed simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
811  | 
then obtain g0 where g0: "g0 \<in> G" "\<forall>g \<in> G. (g0, g) \<in> oexp" by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
812  | 
hence g0z: "g0 z = r.zero" unfolding G_def by auto  | 
| 63040 | 813  | 
define f0 where "f0 = g0(z := x0)"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
814  | 
            with x0notzero zField have SUPP: "SUPP f0 = SUPP g0 \<union> {z}" unfolding support_def by auto
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
815  | 
from g0z have f0z: "f0(z := r.zero) = g0" unfolding f0_def fun_upd_upd by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
816  | 
have f0: "f0 \<in> F" using x0min g0(1)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
817  | 
Func_elim[OF set_mp[OF subset_trans[OF F(1)[unfolded FinFunc_def] Int_lower1]] zField]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
818  | 
unfolding f0_def r.isMinim_def G_def by (force simp: fun_upd_idem)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
819  | 
from g0(1) maxF(1) have maxf0: "s.maxim (SUPP f0) = z" unfolding SUPP G_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
820  | 
by (intro s.maxim_equality) (auto simp: s.isMaxim_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
821  | 
show ?thesis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
822  | 
proof (intro bexI[OF _ f0] ballI)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
823  | 
fix f assume f: "f \<in> F"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
824  | 
show "(f0, f) \<in> oexp"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
825  | 
proof (cases "f0 = f")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
826  | 
case True thus ?thesis by (metis F(1) Field_oexp f0 in_mono oexp_Refl refl_onD)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
827  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
828  | 
case False  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
829  | 
thus ?thesis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
830  | 
proof (cases "s.maxim (SUPP f) = z \<and> f z = x0")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
831  | 
case True  | 
| 
58127
 
b7cab82f488e
renamed '(BNF_)Constructions_on_Wellorders' to '(BNF_)Wellorder_Constructions'
 
blanchet 
parents: 
55932 
diff
changeset
 | 
832  | 
with f have "f(z := r.zero) \<in> G" unfolding G_def by blast  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
833  | 
with g0(2) f0z have "(f0(z := r.zero), f(z := r.zero)) \<in> oexp" by auto  | 
| 63540 | 834  | 
hence oexp: "(f0(z := r.zero, z := x0), f(z := r.zero, z := x0)) \<in> oexp"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
835  | 
by (elim fun_upd_same_oexp[OF _ _ zField x0Field]) simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
836  | 
with f F(1) x0min True  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
837  | 
have "(f(z := x0), f) \<in> oexp" unfolding G_def r.isMinim_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
838  | 
by (intro fun_upd_smaller_oexp[OF _ zField x0Field]) auto  | 
| 63540 | 839  | 
with oexp show ?thesis using transD[OF oexp_trans, of f0 "f(z := x0)" f]  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
840  | 
unfolding f0_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
841  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
842  | 
case False note notG = this  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
843  | 
thus ?thesis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
844  | 
proof (cases "s.maxim (SUPP f) = z")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
845  | 
case True  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
846  | 
with notG have "f0 z \<noteq> f z" unfolding f0_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
847  | 
hence "f0 z \<noteq> f z" by metis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
848  | 
with True maxf0 f0 f SUPPF have "s.max_fun_diff f0 f = z"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
849  | 
using s.maxim_Un[of "SUPP f0" "SUPP f", unfolded s.max2_def]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
850  | 
unfolding max_fun_diff_alt by (intro trans[OF s.maxim_Int]) auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
851  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
852  | 
from x0min True f have "(x0, f z) \<in> r" unfolding r.isMinim_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
853  | 
ultimately show ?thesis using f f0 F(1) unfolding oexp_def f0_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
854  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
855  | 
case False  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
856  | 
with notG have *: "(z, s.maxim (SUPP f)) \<in> s" "z \<noteq> s.maxim (SUPP f)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
857  | 
using zmin f unfolding s.isMinim_def G_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
858  | 
have f0f: "f0 (s.maxim (SUPP f)) = r.zero"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
859  | 
proof (rule ccontr)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
860  | 
assume "f0 (s.maxim (SUPP f)) \<noteq> r.zero"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
861  | 
with f SUPPF maxF(1) have "s.maxim (SUPP f) \<in> SUPP f0"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
862  | 
unfolding support_def[of _ _ f0] s.isMaxim_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
863  | 
with SUPPF f0 have "(s.maxim (SUPP f), z) \<in> s" unfolding maxf0[symmetric]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
864  | 
by (auto intro: s.maxim_greatest)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
865  | 
with * antisymD[OF s.ANTISYM] show False by simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
866  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
867  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
868  | 
have "f (s.maxim (SUPP f)) \<noteq> r.zero"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
869  | 
using bspec[OF maxF(1) f, unfolded s.isMaxim_def] by (auto simp: support_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
870  | 
with f0f * f f0 maxf0 SUPPF  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
871  | 
have "s.max_fun_diff f0 f = s.maxim (SUPP f0 \<union> SUPP f)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
872  | 
unfolding max_fun_diff_alt using s.maxim_Un[of "SUPP f0" "SUPP f"]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
873  | 
by (intro s.maxim_Int) (auto simp: s.max2_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
874  | 
moreover have "s.maxim (SUPP f0 \<union> SUPP f) = s.maxim (SUPP f)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
875  | 
using s.maxim_Un[of "SUPP f0" "SUPP f"] * maxf0 SUPPF f0 f  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
876  | 
by (auto simp: s.max2_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
877  | 
ultimately show ?thesis using f f0 F(1) maxF(1) SUPPF unfolding oexp_def Let_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
878  | 
by (fastforce simp: s.isMaxim_def intro!: r.zero_smallest FINFUNCD)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
879  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
880  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
881  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
882  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
883  | 
qed simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
884  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
885  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
886  | 
} note * = mp[OF this]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
887  | 
from A(2) obtain f where f: "f \<in> A" by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
888  | 
with A(1) show "\<exists>a\<in>A. \<forall>a'\<in>A. (a, a') \<in> oexp"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
889  | 
proof (cases "f = const")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
890  | 
      case False with f A(1) show ?thesis using maxim_isMaxim_support[of "{f}"]
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
891  | 
by (intro *[of _ "s.maxim (SUPP f)"]) (auto simp: s.isMaxim_def support_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
892  | 
qed simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
893  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
894  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
895  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
896  | 
lemma oexp_Well_order: "Well_order oexp"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
897  | 
unfolding well_order_on_def using oexp_Linear_order oexp_wf_Id by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
898  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
899  | 
interpretation o: wo_rel oexp by unfold_locales (rule oexp_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
900  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
901  | 
lemma zero_oexp: "Field r \<noteq> {} \<Longrightarrow> o.zero = const"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
902  | 
by (rule sym[OF o.leq_zero_imp[OF const_least]])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
903  | 
(auto intro!: o.zero_in_Field[unfolded Field_oexp] dest!: const_FINFUNC)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
904  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
905  | 
end  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
906  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
907  | 
notation wo_rel2.oexp (infixl "^o" 90)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
908  | 
lemmas oexp_def = wo_rel2.oexp_def[unfolded wo_rel2_def, OF conjI]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
909  | 
lemmas oexp_Well_order = wo_rel2.oexp_Well_order[unfolded wo_rel2_def, OF conjI]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
910  | 
lemmas Field_oexp = wo_rel2.Field_oexp[unfolded wo_rel2_def, OF conjI]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
911  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
912  | 
definition "ozero = {}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
913  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
914  | 
lemma ozero_Well_order[simp]: "Well_order ozero"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
915  | 
unfolding ozero_def by simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
916  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
917  | 
lemma ozero_ordIso[simp]: "ozero =o ozero"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
918  | 
unfolding ozero_def ordIso_def iso_def[abs_def] embed_def bij_betw_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
919  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
920  | 
lemma Field_ozero[simp]: "Field ozero = {}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
921  | 
unfolding ozero_def by simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
922  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
923  | 
lemma iso_ozero_empty[simp]: "r =o ozero = (r = {})"
 | 
| 
58127
 
b7cab82f488e
renamed '(BNF_)Constructions_on_Wellorders' to '(BNF_)Wellorder_Constructions'
 
blanchet 
parents: 
55932 
diff
changeset
 | 
924  | 
unfolding ozero_def ordIso_def iso_def[abs_def] embed_def bij_betw_def  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
925  | 
by (auto dest: well_order_on_domain)  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
926  | 
|
| 
58127
 
b7cab82f488e
renamed '(BNF_)Constructions_on_Wellorders' to '(BNF_)Wellorder_Constructions'
 
blanchet 
parents: 
55932 
diff
changeset
 | 
927  | 
lemma ozero_ordLeq:  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
928  | 
assumes "Well_order r" shows "ozero \<le>o r"  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
929  | 
using assms unfolding ozero_def ordLeq_def embed_def[abs_def] under_def by auto  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
930  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
931  | 
definition "oone = {((),())}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
932  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
933  | 
lemma oone_Well_order[simp]: "Well_order oone"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
934  | 
unfolding oone_def unfolding well_order_on_def linear_order_on_def partial_order_on_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
935  | 
preorder_on_def total_on_def refl_on_def trans_def antisym_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
936  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
937  | 
lemma Field_oone[simp]: "Field oone = {()}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
938  | 
unfolding oone_def by simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
939  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
940  | 
lemma oone_ordIso: "oone =o {(x,x)}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
941  | 
unfolding ordIso_def oone_def well_order_on_def linear_order_on_def partial_order_on_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
942  | 
preorder_on_def total_on_def refl_on_def trans_def antisym_def  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
943  | 
by (auto simp: iso_def embed_def bij_betw_def under_def inj_on_def intro!: exI[of _ "\<lambda>_. x"])  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
944  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
945  | 
lemma osum_ordLeqR: "Well_order r \<Longrightarrow> Well_order s \<Longrightarrow> s \<le>o r +o s"  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
946  | 
unfolding ordLeq_def2 underS_def  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
947  | 
by (auto intro!: exI[of _ Inr] osum_Well_order) (auto simp add: osum_def Field_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
948  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
949  | 
lemma osum_congL:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
950  | 
assumes "r =o s" and t: "Well_order t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
951  | 
shows "r +o t =o s +o t" (is "?L =o ?R")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
952  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
953  | 
from assms(1) obtain f where 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:  
diff
changeset
 | 
954  | 
unfolding ordIso_def by blast  | 
| 55931 | 955  | 
let ?f = "map_sum f id"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
956  | 
from f have "inj_on ?f (Field ?L)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
957  | 
unfolding Field_osum iso_def bij_betw_def inj_on_def by fastforce  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
958  | 
with f have "bij_betw ?f (Field ?L) (Field ?R)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
959  | 
unfolding Field_osum iso_def bij_betw_def image_image image_Un by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
960  | 
moreover from f have "compat ?L ?R ?f"  | 
| 
58127
 
b7cab82f488e
renamed '(BNF_)Constructions_on_Wellorders' to '(BNF_)Wellorder_Constructions'
 
blanchet 
parents: 
55932 
diff
changeset
 | 
961  | 
unfolding osum_def iso_iff3[OF r s] compat_def bij_betw_def  | 
| 55932 | 962  | 
by (auto simp: map_prod_imageI)  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
963  | 
ultimately have "iso ?L ?R ?f" by (subst iso_iff3) (auto intro: osum_Well_order r s t)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
964  | 
thus ?thesis unfolding ordIso_def by (auto intro: osum_Well_order r s t)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
965  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
966  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
967  | 
lemma osum_congR:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
968  | 
assumes "r =o s" and t: "Well_order t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
969  | 
shows "t +o r =o t +o s" (is "?L =o ?R")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
970  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
971  | 
from assms(1) obtain f where 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:  
diff
changeset
 | 
972  | 
unfolding ordIso_def by blast  | 
| 55931 | 973  | 
let ?f = "map_sum id f"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
974  | 
from f have "inj_on ?f (Field ?L)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
975  | 
unfolding Field_osum iso_def bij_betw_def inj_on_def by fastforce  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
976  | 
with f have "bij_betw ?f (Field ?L) (Field ?R)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
977  | 
unfolding Field_osum iso_def bij_betw_def image_image image_Un by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
978  | 
moreover from f have "compat ?L ?R ?f"  | 
| 
58127
 
b7cab82f488e
renamed '(BNF_)Constructions_on_Wellorders' to '(BNF_)Wellorder_Constructions'
 
blanchet 
parents: 
55932 
diff
changeset
 | 
979  | 
unfolding osum_def iso_iff3[OF r s] compat_def bij_betw_def  | 
| 55932 | 980  | 
by (auto simp: map_prod_imageI)  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
981  | 
ultimately have "iso ?L ?R ?f" by (subst iso_iff3) (auto intro: osum_Well_order r s t)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
982  | 
thus ?thesis unfolding ordIso_def by (auto intro: osum_Well_order r s t)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
983  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
984  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
985  | 
lemma osum_cong:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
986  | 
assumes "t =o u" and "r =o s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
987  | 
shows "t +o r =o u +o s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
988  | 
using ordIso_transitive[OF osum_congL[OF assms(1)] osum_congR[OF assms(2)]]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
989  | 
assms[unfolded ordIso_def] by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
990  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
991  | 
lemma Well_order_empty[simp]: "Well_order {}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
992  | 
unfolding Field_empty by (rule well_order_on_empty)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
993  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
994  | 
lemma well_order_on_singleton[simp]: "well_order_on {x} {(x, x)}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
995  | 
unfolding well_order_on_def linear_order_on_def partial_order_on_def preorder_on_def total_on_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
996  | 
Field_def refl_on_def trans_def antisym_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
997  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
998  | 
lemma oexp_empty[simp]:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
999  | 
assumes "Well_order r"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1000  | 
  shows "r ^o {} = {(\<lambda>x. undefined, \<lambda>x. undefined)}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1001  | 
unfolding oexp_def[OF assms Well_order_empty] FinFunc_def fin_support_def support_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1002  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1003  | 
lemma oexp_empty2[simp]:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1004  | 
  assumes "Well_order r" "r \<noteq> {}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1005  | 
  shows "{} ^o r = {}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1006  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1007  | 
  from assms(2) have "Field r \<noteq> {}" unfolding Field_def by auto
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1008  | 
thus ?thesis unfolding oexp_def[OF Well_order_empty assms(1)] FinFunc_def fin_support_def support_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1009  | 
by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1010  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1011  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1012  | 
lemma oprod_zero[simp]: "{} *o r = {}" "r *o {} = {}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1013  | 
unfolding oprod_def by simp_all  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1014  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1015  | 
lemma oprod_congL:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1016  | 
assumes "r =o s" and t: "Well_order t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1017  | 
shows "r *o t =o s *o t" (is "?L =o ?R")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1018  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1019  | 
from assms(1) obtain f where 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:  
diff
changeset
 | 
1020  | 
unfolding ordIso_def by blast  | 
| 55932 | 1021  | 
let ?f = "map_prod f id"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1022  | 
from f have "inj_on ?f (Field ?L)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1023  | 
unfolding Field_oprod iso_def bij_betw_def inj_on_def by fastforce  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1024  | 
with f have "bij_betw ?f (Field ?L) (Field ?R)"  | 
| 55932 | 1025  | 
unfolding Field_oprod iso_def bij_betw_def by (auto intro!: map_prod_surj_on)  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1026  | 
moreover from f have "compat ?L ?R ?f"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1027  | 
unfolding iso_iff3[OF r s] compat_def oprod_def bij_betw_def  | 
| 55932 | 1028  | 
by (auto simp: map_prod_imageI)  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1029  | 
ultimately have "iso ?L ?R ?f" by (subst iso_iff3) (auto intro: oprod_Well_order r s t)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1030  | 
thus ?thesis unfolding ordIso_def by (auto intro: oprod_Well_order r s t)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1031  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1032  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1033  | 
lemma oprod_congR:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1034  | 
assumes "r =o s" and t: "Well_order t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1035  | 
shows "t *o r =o t *o s" (is "?L =o ?R")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1036  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1037  | 
from assms(1) obtain f where 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:  
diff
changeset
 | 
1038  | 
unfolding ordIso_def by blast  | 
| 55932 | 1039  | 
let ?f = "map_prod id f"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1040  | 
from f have "inj_on ?f (Field ?L)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1041  | 
unfolding Field_oprod iso_def bij_betw_def inj_on_def by fastforce  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1042  | 
with f have "bij_betw ?f (Field ?L) (Field ?R)"  | 
| 55932 | 1043  | 
unfolding Field_oprod iso_def bij_betw_def by (auto intro!: map_prod_surj_on)  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1044  | 
moreover from f well_order_on_domain[OF r] have "compat ?L ?R ?f"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1045  | 
unfolding iso_iff3[OF r s] compat_def oprod_def bij_betw_def  | 
| 55932 | 1046  | 
by (auto simp: map_prod_imageI dest: inj_onD)  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1047  | 
ultimately have "iso ?L ?R ?f" by (subst iso_iff3) (auto intro: oprod_Well_order r s t)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1048  | 
thus ?thesis unfolding ordIso_def by (auto intro: oprod_Well_order r s t)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1049  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1050  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1051  | 
lemma oprod_cong:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1052  | 
assumes "t =o u" and "r =o s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1053  | 
shows "t *o r =o u *o s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1054  | 
using ordIso_transitive[OF oprod_congL[OF assms(1)] oprod_congR[OF assms(2)]]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1055  | 
assms[unfolded ordIso_def] by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1056  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1057  | 
lemma Field_singleton[simp]: "Field {(z,z)} = {z}"
 | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1058  | 
by (metis well_order_on_Field well_order_on_singleton)  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1059  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1060  | 
lemma zero_singleton[simp]: "zero {(z,z)} = z"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1061  | 
  using wo_rel.zero_in_Field[unfolded wo_rel_def, of "{(z, z)}"] well_order_on_singleton[of z]
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1062  | 
by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1063  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1064  | 
lemma FinFunc_singleton: "FinFunc {(z,z)} s = {\<lambda>x. if x \<in> Field s then z else undefined}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1065  | 
unfolding FinFunc_def Func_def fin_support_def support_def  | 
| 62390 | 1066  | 
  by (auto simp: fun_eq_iff split: if_split_asm intro!: finite_subset[of _ "{}"])
 | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1067  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1068  | 
lemma oone_ordIso_oexp:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1069  | 
assumes "r =o oone" and s: "Well_order s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1070  | 
shows "r ^o s =o oone" (is "?L =o ?R")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1071  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1072  | 
  from assms obtain f where *: "\<forall>x\<in>Field r. \<forall>y\<in>Field r. x = y" and "f ` Field r = {()}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1073  | 
and r: "Well_order r"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1074  | 
unfolding ordIso_def oone_def by (auto simp: iso_def bij_betw_def inj_on_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1075  | 
then obtain x where "x \<in> Field r" by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1076  | 
  with * have Fr: "Field r = {x}" by auto
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1077  | 
interpret r: wo_rel r by unfold_locales (rule r)  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1078  | 
  from Fr well_order_on_domain[OF r] refl_onD[OF r.REFL, of x] have r_def: "r = {(x, x)}" by fast
 | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1079  | 
interpret wo_rel2 r s by unfold_locales (rule r, rule s)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1080  | 
have "bij_betw (\<lambda>x. ()) (Field ?L) (Field ?R)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1081  | 
unfolding bij_betw_def Field_oexp by (auto simp: r_def FinFunc_singleton)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1082  | 
moreover have "compat ?L ?R (\<lambda>x. ())" unfolding compat_def oone_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1083  | 
ultimately have "iso ?L ?R (\<lambda>x. ())" using s oone_Well_order  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1084  | 
by (subst iso_iff3) (auto intro: oexp_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1085  | 
thus ?thesis using s oone_Well_order unfolding ordIso_def by (auto intro: oexp_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1086  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1087  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1088  | 
(*Lemma 1.4.3 from Holz et al.*)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1089  | 
context  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1090  | 
fixes r s t  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1091  | 
assumes r: "Well_order r"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1092  | 
assumes s: "Well_order s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1093  | 
assumes t: "Well_order t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1094  | 
begin  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1095  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1096  | 
lemma osum_ozeroL: "ozero +o r =o r"  | 
| 55932 | 1097  | 
using r unfolding osum_def ozero_def by (auto intro: map_prod_ordIso)  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1098  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1099  | 
lemma osum_ozeroR: "r +o ozero =o r"  | 
| 55932 | 1100  | 
using r unfolding osum_def ozero_def by (auto intro: map_prod_ordIso)  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1101  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1102  | 
lemma osum_assoc: "(r +o s) +o t =o r +o s +o t" (is "?L =o ?R")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1103  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1104  | 
let ?f =  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1105  | 
"\<lambda>rst. case rst of Inl (Inl r) \<Rightarrow> Inl r | Inl (Inr s) \<Rightarrow> Inr (Inl s) | Inr t \<Rightarrow> Inr (Inr t)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1106  | 
have "bij_betw ?f (Field ?L) (Field ?R)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1107  | 
unfolding Field_osum bij_betw_def inj_on_def by (auto simp: image_Un image_iff)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1108  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1109  | 
have "compat ?L ?R ?f"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1110  | 
proof (unfold compat_def, safe)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1111  | 
fix a b  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1112  | 
assume "(a, b) \<in> ?L"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1113  | 
thus "(?f a, ?f b) \<in> ?R"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1114  | 
unfolding osum_def[of "r +o s" t] osum_def[of r "s +o t"] Field_osum  | 
| 55932 | 1115  | 
unfolding osum_def Field_osum image_iff image_Un map_prod_def  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1116  | 
by fastforce  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1117  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1118  | 
ultimately have "iso ?L ?R ?f" using r s t by (subst iso_iff3) (auto intro: osum_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1119  | 
thus ?thesis using r s t unfolding ordIso_def by (auto intro: osum_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1120  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1121  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1122  | 
lemma osum_monoR:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1123  | 
assumes "s <o t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1124  | 
shows "r +o s <o r +o t" (is "?L <o ?R")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1125  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1126  | 
from assms obtain f where s: "Well_order s" and t:" Well_order t" and "embedS s t f"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1127  | 
unfolding ordLess_def by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1128  | 
hence *: "inj_on f (Field s)" "compat s t f" "ofilter t (f ` Field s)" "f ` Field s \<subset> Field t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1129  | 
using embed_iff_compat_inj_on_ofilter[OF s t, of f] embedS_iff[OF s, of t f]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1130  | 
unfolding embedS_def by auto  | 
| 55931 | 1131  | 
let ?f = "map_sum id f"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1132  | 
from *(1) have "inj_on ?f (Field ?L)" unfolding Field_osum inj_on_def by fastforce  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1133  | 
moreover  | 
| 55932 | 1134  | 
from *(2,4) have "compat ?L ?R ?f" unfolding compat_def osum_def map_prod_def by fastforce  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1135  | 
moreover  | 
| 61605 | 1136  | 
interpret t: wo_rel t by unfold_locales (rule t)  | 
1137  | 
interpret rt: wo_rel ?R by unfold_locales (rule osum_Well_order[OF r t])  | 
|
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1138  | 
from *(3) have "ofilter ?R (?f ` Field ?L)"  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1139  | 
unfolding t.ofilter_def rt.ofilter_def Field_osum image_Un image_image under_def  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1140  | 
by (auto simp: osum_def intro!: imageI) (auto simp: Field_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1141  | 
ultimately have "embed ?L ?R ?f" using embed_iff_compat_inj_on_ofilter[of ?L ?R ?f]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1142  | 
by (auto intro: osum_Well_order r s t)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1143  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1144  | 
from *(4) have "?f ` Field ?L \<subset> Field ?R" unfolding Field_osum image_Un image_image by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1145  | 
ultimately have "embedS ?L ?R ?f" using embedS_iff[OF osum_Well_order[OF r s], of ?R ?f] by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1146  | 
thus ?thesis unfolding ordLess_def by (auto intro: osum_Well_order r s t)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1147  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1148  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1149  | 
lemma osum_monoL:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1150  | 
assumes "r \<le>o s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1151  | 
shows "r +o t \<le>o s +o t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1152  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1153  | 
from assms obtain f where 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:  
diff
changeset
 | 
1154  | 
unfolding ordLeq_def2 by blast  | 
| 55931 | 1155  | 
let ?f = "map_sum f id"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1156  | 
from f have "\<forall>a\<in>Field (r +o t).  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1157  | 
?f a \<in> Field (s +o t) \<and> ?f ` underS (r +o t) a \<subseteq> underS (s +o t) (?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
 | 
1158  | 
unfolding Field_osum underS_def by (fastforce simp: osum_def)  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1159  | 
thus ?thesis unfolding ordLeq_def2 by (auto intro: osum_Well_order r s t)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1160  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1161  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1162  | 
lemma oprod_ozeroL: "ozero *o r =o ozero"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1163  | 
using ozero_ordIso unfolding ozero_def by simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1164  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1165  | 
lemma oprod_ozeroR: "r *o ozero =o ozero"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1166  | 
using ozero_ordIso unfolding ozero_def by simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1167  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1168  | 
lemma oprod_ooneR: "r *o oone =o r" (is "?L =o ?R")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1169  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1170  | 
have "bij_betw fst (Field ?L) (Field ?R)" unfolding Field_oprod bij_betw_def inj_on_def by simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1171  | 
moreover have "compat ?L ?R fst" unfolding compat_def oprod_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1172  | 
ultimately have "iso ?L ?R fst" using r oone_Well_order  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1173  | 
by (subst iso_iff3) (auto intro: oprod_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1174  | 
thus ?thesis using r oone_Well_order unfolding ordIso_def by (auto intro: oprod_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1175  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1176  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1177  | 
lemma oprod_ooneL: "oone *o r =o r" (is "?L =o ?R")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1178  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1179  | 
have "bij_betw snd (Field ?L) (Field ?R)" unfolding Field_oprod bij_betw_def inj_on_def by simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1180  | 
moreover have "Refl r" by (rule wo_rel.REFL[unfolded wo_rel_def, OF r])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1181  | 
hence "compat ?L ?R snd" unfolding compat_def oprod_def refl_on_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1182  | 
ultimately have "iso ?L ?R snd" using r oone_Well_order  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1183  | 
by (subst iso_iff3) (auto intro: oprod_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1184  | 
thus ?thesis using r oone_Well_order unfolding ordIso_def by (auto intro: oprod_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1185  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1186  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1187  | 
lemma oprod_monoR:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1188  | 
assumes "ozero <o r" "s <o t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1189  | 
shows "r *o s <o r *o t" (is "?L <o ?R")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1190  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1191  | 
from assms obtain f where s: "Well_order s" and t:" Well_order t" and "embedS s t f"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1192  | 
unfolding ordLess_def by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1193  | 
hence *: "inj_on f (Field s)" "compat s t f" "ofilter t (f ` Field s)" "f ` Field s \<subset> Field t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1194  | 
using embed_iff_compat_inj_on_ofilter[OF s t, of f] embedS_iff[OF s, of t f]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1195  | 
unfolding embedS_def by auto  | 
| 55932 | 1196  | 
let ?f = "map_prod id f"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1197  | 
from *(1) have "inj_on ?f (Field ?L)" unfolding Field_oprod inj_on_def by fastforce  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1198  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1199  | 
from *(2,4) the_inv_into_f_f[OF *(1)] have "compat ?L ?R ?f" unfolding compat_def oprod_def  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1200  | 
by auto (metis well_order_on_domain t, metis well_order_on_domain s)  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1201  | 
moreover  | 
| 61605 | 1202  | 
interpret t: wo_rel t by unfold_locales (rule t)  | 
1203  | 
interpret rt: wo_rel ?R by unfold_locales (rule oprod_Well_order[OF r t])  | 
|
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1204  | 
from *(3) have "ofilter ?R (?f ` Field ?L)"  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1205  | 
unfolding t.ofilter_def rt.ofilter_def Field_oprod under_def  | 
| 
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1206  | 
by (auto simp: oprod_def image_iff) (fast | metis r well_order_on_domain)+  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1207  | 
ultimately have "embed ?L ?R ?f" using embed_iff_compat_inj_on_ofilter[of ?L ?R ?f]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1208  | 
by (auto intro: oprod_Well_order r s t)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1209  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1210  | 
  from not_ordLess_ordIso[OF assms(1)] have "r \<noteq> {}" by (metis ozero_def ozero_ordIso)
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1211  | 
  hence "Field r \<noteq> {}" unfolding Field_def by auto
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1212  | 
with *(4) have "?f ` Field ?L \<subset> Field ?R" unfolding Field_oprod  | 
| 55932 | 1213  | 
by auto (metis SigmaD2 SigmaI map_prod_surj_on)  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1214  | 
ultimately have "embedS ?L ?R ?f" using embedS_iff[OF oprod_Well_order[OF r s], of ?R ?f] by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1215  | 
thus ?thesis unfolding ordLess_def by (auto intro: oprod_Well_order r s t)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1216  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1217  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1218  | 
lemma oprod_monoL:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1219  | 
assumes "r \<le>o s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1220  | 
shows "r *o t \<le>o s *o t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1221  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1222  | 
from assms obtain f where 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:  
diff
changeset
 | 
1223  | 
unfolding ordLeq_def2 by blast  | 
| 55932 | 1224  | 
let ?f = "map_prod f id"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1225  | 
from f have "\<forall>a\<in>Field (r *o t).  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1226  | 
?f a \<in> Field (s *o t) \<and> ?f ` underS (r *o t) a \<subseteq> underS (s *o t) (?f a)"  | 
| 55932 | 1227  | 
unfolding Field_oprod underS_def unfolding map_prod_def oprod_def by auto  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1228  | 
thus ?thesis unfolding ordLeq_def2 by (auto intro: oprod_Well_order r s t)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1229  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1230  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1231  | 
lemma oprod_assoc: "(r *o s) *o t =o r *o s *o t" (is "?L =o ?R")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1232  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1233  | 
let ?f = "\<lambda>((a,b),c). (a,b,c)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1234  | 
have "bij_betw ?f (Field ?L) (Field ?R)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1235  | 
unfolding Field_oprod bij_betw_def inj_on_def by (auto simp: image_Un image_iff)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1236  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1237  | 
have "compat ?L ?R ?f"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1238  | 
proof (unfold compat_def, safe)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1239  | 
fix a1 a2 a3 b1 b2 b3  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1240  | 
assume "(((a1, a2), a3), ((b1, b2), b3)) \<in> ?L"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1241  | 
thus "((a1, a2, a3), (b1, b2, b3)) \<in> ?R"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1242  | 
unfolding oprod_def[of "r *o s" t] oprod_def[of r "s *o t"] Field_oprod  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1243  | 
unfolding oprod_def Field_oprod image_iff image_Un by fast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1244  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1245  | 
ultimately have "iso ?L ?R ?f" using r s t by (subst iso_iff3) (auto intro: oprod_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1246  | 
thus ?thesis using r s t unfolding ordIso_def by (auto intro: oprod_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1247  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1248  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1249  | 
lemma oprod_osum: "r *o (s +o t) =o r *o s +o r *o t" (is "?L =o ?R")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1250  | 
proof -  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1251  | 
let ?f = "\<lambda>(a,bc). case bc of Inl b \<Rightarrow> Inl (a, b) | Inr c \<Rightarrow> Inr (a, c)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1252  | 
have "bij_betw ?f (Field ?L) (Field ?R)" unfolding Field_oprod Field_osum bij_betw_def inj_on_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1253  | 
by (fastforce simp: image_Un image_iff split: sum.splits)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1254  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1255  | 
have "compat ?L ?R ?f"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1256  | 
proof (unfold compat_def, intro allI impI)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1257  | 
fix a b  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1258  | 
assume "(a, b) \<in> ?L"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1259  | 
thus "(?f a, ?f b) \<in> ?R"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1260  | 
unfolding oprod_def[of r "s +o t"] osum_def[of "r *o s" "r *o t"] Field_oprod Field_osum  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1261  | 
unfolding oprod_def osum_def Field_oprod Field_osum image_iff image_Un by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1262  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1263  | 
ultimately have "iso ?L ?R ?f" using r s t  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1264  | 
by (subst iso_iff3) (auto intro: oprod_Well_order osum_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1265  | 
thus ?thesis using r s t unfolding ordIso_def by (auto intro: oprod_Well_order osum_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1266  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1267  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1268  | 
lemma ozero_oexp: "\<not> (s =o ozero) \<Longrightarrow> ozero ^o s =o ozero"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1269  | 
unfolding oexp_def[OF ozero_Well_order s] FinFunc_def  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1270  | 
by simp (metis Func_emp2 bot.extremum_uniqueI emptyE well_order_on_domain s subrelI)  | 
| 
58127
 
b7cab82f488e
renamed '(BNF_)Constructions_on_Wellorders' to '(BNF_)Wellorder_Constructions'
 
blanchet 
parents: 
55932 
diff
changeset
 | 
1271  | 
|
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1272  | 
lemma oone_oexp: "oone ^o s =o oone" (is "?L =o ?R")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1273  | 
by (rule oone_ordIso_oexp[OF ordIso_reflexive[OF oone_Well_order] s])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1274  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1275  | 
lemma oexp_monoR:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1276  | 
assumes "oone <o r" "s <o t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1277  | 
shows "r ^o s <o r ^o t" (is "?L <o ?R")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1278  | 
proof -  | 
| 61605 | 1279  | 
interpret rs: wo_rel2 r s by unfold_locales (rule r, rule s)  | 
1280  | 
interpret rt: wo_rel2 r t by unfold_locales (rule r, rule t)  | 
|
1281  | 
interpret rexpt: wo_rel "r ^o t" by unfold_locales (rule rt.oexp_Well_order)  | 
|
1282  | 
interpret r: wo_rel r by unfold_locales (rule r)  | 
|
1283  | 
interpret s: wo_rel s by unfold_locales (rule s)  | 
|
1284  | 
interpret t: wo_rel t by unfold_locales (rule t)  | 
|
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1285  | 
  have "Field r \<noteq> {}" by (metis assms(1) internalize_ordLess not_psubset_empty)
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1286  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1287  | 
  { assume "Field r = {r.zero}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1288  | 
    hence "r = {(r.zero, r.zero)}" using refl_onD[OF r.REFL, of r.zero] unfolding Field_def by auto
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1289  | 
hence "r =o oone" by (metis oone_ordIso ordIso_symmetric)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1290  | 
with not_ordLess_ordIso[OF assms(1)] have False by (metis ordIso_symmetric)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1291  | 
}  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1292  | 
ultimately obtain x where x: "x \<in> Field r" "r.zero \<in> Field r" "x \<noteq> r.zero"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1293  | 
by (metis insert_iff r.zero_in_Field subsetI subset_singletonD)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1294  | 
moreover from assms(2) obtain f where "embedS s t f" unfolding ordLess_def by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1295  | 
hence *: "inj_on f (Field s)" "compat s t f" "ofilter t (f ` Field s)" "f ` Field s \<subset> Field t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1296  | 
using embed_iff_compat_inj_on_ofilter[OF s t, of f] embedS_iff[OF s, of t f]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1297  | 
unfolding embedS_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1298  | 
note invff = the_inv_into_f_f[OF *(1)] and injfD = inj_onD[OF *(1)]  | 
| 63040 | 1299  | 
define F where [abs_def]: "F g z =  | 
1300  | 
(if z \<in> f ` Field s then g (the_inv_into (Field s) f z)  | 
|
1301  | 
else if z \<in> Field t then r.zero else undefined)" for g z  | 
|
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1302  | 
from *(4) x(2) the_inv_into_f_eq[OF *(1)] have FLR: "F ` Field ?L \<subseteq> Field ?R"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1303  | 
unfolding rt.Field_oexp rs.Field_oexp FinFunc_def Func_def fin_support_def support_def F_def  | 
| 62390 | 1304  | 
by (fastforce split: option.splits if_split_asm elim!: finite_surj[of _ _ f])  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1305  | 
have "inj_on F (Field ?L)" unfolding rs.Field_oexp inj_on_def fun_eq_iff  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1306  | 
proof safe  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1307  | 
fix g h x assume "g \<in> FinFunc r s" "h \<in> FinFunc r s" "\<forall>y. F g y = F h y"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1308  | 
with invff show "g x = h x" unfolding F_def fun_eq_iff FinFunc_def Func_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1309  | 
by auto (metis image_eqI)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1310  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1311  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1312  | 
have "compat ?L ?R F" unfolding compat_def rs.oexp_def rt.oexp_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1313  | 
proof (safe elim!: bspec[OF iffD1[OF image_subset_iff FLR[unfolded rs.Field_oexp rt.Field_oexp]]])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1314  | 
fix g h assume gh: "g \<in> FinFunc r s" "h \<in> FinFunc r s" "F g \<noteq> F h"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1315  | 
"let m = s.max_fun_diff g h in (g m, h m) \<in> r"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1316  | 
hence "g \<noteq> h" by auto  | 
| 63167 | 1317  | 
note max_fun_diff_in = rs.max_fun_diff_in[OF \<open>g \<noteq> h\<close> gh(1,2)]  | 
1318  | 
and max_fun_diff_max = rs.max_fun_diff_max[OF \<open>g \<noteq> h\<close> gh(1,2)]  | 
|
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1319  | 
with *(4) invff *(2) have "t.max_fun_diff (F g) (F h) = f (s.max_fun_diff g h)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1320  | 
unfolding t.max_fun_diff_def compat_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1321  | 
by (intro t.maxim_equality) (auto simp: t.isMaxim_def F_def dest: injfD)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1322  | 
with gh invff max_fun_diff_in  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1323  | 
show "let m = t.max_fun_diff (F g) (F h) in (F g m, F h m) \<in> r"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1324  | 
unfolding F_def Let_def by (auto simp: dest: injfD)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1325  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1326  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1327  | 
from FLR have "ofilter ?R (F ` Field ?L)"  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1328  | 
unfolding rexpt.ofilter_def under_def rs.Field_oexp rt.Field_oexp unfolding rt.oexp_def  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1329  | 
proof (safe elim!: imageI)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1330  | 
fix g h assume gh: "g \<in> FinFunc r s" "h \<in> FinFunc r t" "F g \<in> FinFunc r t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1331  | 
"let m = t.max_fun_diff h (F g) in (h m, F g m) \<in> r"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1332  | 
thus "h \<in> F ` FinFunc r s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1333  | 
proof (cases "h = F g")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1334  | 
case False  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1335  | 
      hence max_Field: "t.max_fun_diff h (F g) \<in> {a \<in> Field t. h a \<noteq> F g a}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1336  | 
by (rule rt.max_fun_diff_in[OF _ gh(2,3)])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1337  | 
      { assume *: "t.max_fun_diff h (F g) \<notin> f ` Field s"
 | 
| 63540 | 1338  | 
with max_Field have **: "F g (t.max_fun_diff h (F g)) = r.zero" unfolding F_def by auto  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1339  | 
with * gh(4) have "h (t.max_fun_diff h (F g)) = r.zero" unfolding Let_def by auto  | 
| 63540 | 1340  | 
with ** have False using max_Field gh(2,3) unfolding FinFunc_def Func_def by auto  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1341  | 
}  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1342  | 
hence max_f_Field: "t.max_fun_diff h (F g) \<in> f ` Field s" by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1343  | 
      { fix z assume z: "z \<in> Field t - f ` Field s"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1344  | 
have "(t.max_fun_diff h (F g), z) \<in> t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1345  | 
proof (rule ccontr)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1346  | 
assume "(t.max_fun_diff h (F g), z) \<notin> t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1347  | 
hence "(z, t.max_fun_diff h (F g)) \<in> t" using t.in_notinI[of "t.max_fun_diff h (F g)" z]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1348  | 
z max_Field 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
 | 
1349  | 
hence "z \<in> f ` Field s" using *(3) max_f_Field unfolding t.ofilter_def under_def  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1350  | 
by fastforce  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1351  | 
with z show False by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1352  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1353  | 
hence "h z = r.zero" using rt.max_fun_diff_le_eq[OF _ False gh(2,3), of z]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1354  | 
z max_f_Field unfolding F_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1355  | 
} note ** = this  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1356  | 
with *(3) gh(2) have "h = F (\<lambda>x. if x \<in> Field s then h (f x) else undefined)" using invff  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1357  | 
unfolding F_def fun_eq_iff FinFunc_def Func_def Let_def t.ofilter_def under_def by auto  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1358  | 
moreover from gh(2) *(1,3) have "(\<lambda>x. if x \<in> Field s then h (f x) else undefined) \<in> FinFunc r s"  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1359  | 
unfolding FinFunc_def Func_def fin_support_def support_def t.ofilter_def under_def  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1360  | 
by (auto intro: subset_inj_on elim!: finite_imageD[OF finite_subset[rotated]])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1361  | 
ultimately show "?thesis" by (rule image_eqI)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1362  | 
qed simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1363  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1364  | 
ultimately have "embed ?L ?R F" using embed_iff_compat_inj_on_ofilter[of ?L ?R F]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1365  | 
by (auto intro: oexp_Well_order r s t)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1366  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1367  | 
from FLR have "F ` Field ?L \<subset> Field ?R"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1368  | 
proof (intro psubsetI)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1369  | 
from *(4) obtain z where z: "z \<in> Field t" "z \<notin> f ` Field s" by auto  | 
| 63040 | 1370  | 
define h where [abs_def]: "h z' =  | 
1371  | 
(if z' \<in> Field t then if z' = z then x else r.zero else undefined)" for z'  | 
|
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1372  | 
    from z x(3) have "rt.SUPP h = {z}" unfolding support_def h_def by simp
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1373  | 
with x have "h \<in> Field ?R" unfolding h_def rt.Field_oexp FinFunc_def Func_def fin_support_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1374  | 
by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1375  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1376  | 
    { fix g
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1377  | 
from z have "F g z = r.zero" "h z = x" unfolding support_def h_def F_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1378  | 
with x(3) have "F g \<noteq> h" unfolding fun_eq_iff by fastforce  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1379  | 
}  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1380  | 
hence "h \<notin> F ` Field ?L" by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1381  | 
ultimately show "F ` Field ?L \<noteq> Field ?R" by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1382  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1383  | 
ultimately have "embedS ?L ?R F" using embedS_iff[OF rs.oexp_Well_order, of ?R F] by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1384  | 
thus ?thesis unfolding ordLess_def using r s t by (auto intro: oexp_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1385  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1386  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1387  | 
lemma oexp_monoL:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1388  | 
assumes "r \<le>o s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1389  | 
shows "r ^o t \<le>o s ^o t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1390  | 
proof -  | 
| 61605 | 1391  | 
interpret rt: wo_rel2 r t by unfold_locales (rule r, rule t)  | 
1392  | 
interpret st: wo_rel2 s t by unfold_locales (rule s, rule t)  | 
|
1393  | 
interpret r: wo_rel r by unfold_locales (rule r)  | 
|
1394  | 
interpret s: wo_rel s by unfold_locales (rule s)  | 
|
1395  | 
interpret t: wo_rel t by unfold_locales (rule t)  | 
|
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1396  | 
show ?thesis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1397  | 
  proof (cases "t = {}")
 | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1398  | 
case True thus ?thesis using r s unfolding ordLeq_def2 underS_def by auto  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1399  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1400  | 
case False thus ?thesis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1401  | 
    proof (cases "r = {}")
 | 
| 63167 | 1402  | 
      case True thus ?thesis using t \<open>t \<noteq> {}\<close> st.oexp_Well_order ozero_ordLeq[unfolded ozero_def]
 | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1403  | 
by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1404  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1405  | 
case False  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1406  | 
from assms obtain f where f: "embed r s f" unfolding ordLeq_def by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1407  | 
hence f_underS: "\<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:  
diff
changeset
 | 
1408  | 
using embed_in_Field[OF rt.rWELL f] embed_underS2[OF rt.rWELL st.rWELL f] by auto  | 
| 63167 | 1409  | 
      from f \<open>t \<noteq> {}\<close> False have *: "Field r \<noteq> {}" "Field s \<noteq> {}" "Field t \<noteq> {}"
 | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1410  | 
unfolding Field_def embed_def under_def bij_betw_def by auto  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1411  | 
with f obtain x where "s.zero = f x" "x \<in> Field r" unfolding embed_def bij_betw_def  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1412  | 
using embed_in_Field[OF r.WELL f] s.zero_under set_mp[OF under_Field[of r]] by blast  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1413  | 
with f have fz: "f r.zero = s.zero" and inj: "inj_on f (Field r)" and compat: "compat r s f"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1414  | 
unfolding embed_iff_compat_inj_on_ofilter[OF r s] compat_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1415  | 
by (fastforce intro: s.leq_zero_imp)+  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1416  | 
let ?f = "\<lambda>g x. if x \<in> Field t then f (g x) else undefined"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1417  | 
      { fix g assume g: "g \<in> Field (r ^o t)"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1418  | 
with fz f_underS have Field_fg: "?f g \<in> Field (s ^o t)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1419  | 
unfolding st.Field_oexp rt.Field_oexp FinFunc_def Func_def fin_support_def support_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1420  | 
by (auto elim!: finite_subset[rotated])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1421  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1422  | 
have "?f ` underS (r ^o t) g \<subseteq> underS (s ^o t) (?f g)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1423  | 
proof safe  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1424  | 
fix h  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1425  | 
assume h_underS: "h \<in> underS (r ^o t) g"  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1426  | 
hence "h \<in> Field (r ^o t)" unfolding underS_def Field_def by auto  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1427  | 
with fz f_underS have Field_fh: "?f h \<in> Field (s ^o t)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1428  | 
unfolding st.Field_oexp rt.Field_oexp FinFunc_def Func_def fin_support_def support_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1429  | 
by (auto elim!: finite_subset[rotated])  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1430  | 
from h_underS have "h \<noteq> g" and hg: "(h, g) \<in> rt.oexp" unfolding underS_def by auto  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1431  | 
with f inj have neq: "?f h \<noteq> ?f g"  | 
| 55466 | 1432  | 
unfolding fun_eq_iff inj_on_def rt.oexp_def map_option_case FinFunc_def Func_def Let_def  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1433  | 
by simp metis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1434  | 
with hg have "t.max_fun_diff (?f h) (?f g) = t.max_fun_diff h g" unfolding rt.oexp_def  | 
| 63167 | 1435  | 
using rt.max_fun_diff[OF \<open>h \<noteq> g\<close>] rt.max_fun_diff_in[OF \<open>h \<noteq> g\<close>]  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1436  | 
by (subst t.max_fun_diff_def, intro t.maxim_equality)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1437  | 
(auto simp: t.isMaxim_def intro: inj_onD[OF inj] intro!: rt.max_fun_diff_max)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1438  | 
with Field_fg Field_fh hg fz f_underS compat neq have "(?f h, ?f g) \<in> st.oexp"  | 
| 63167 | 1439  | 
using rt.max_fun_diff[OF \<open>h \<noteq> g\<close>] rt.max_fun_diff_in[OF \<open>h \<noteq> g\<close>] unfolding st.Field_oexp  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1440  | 
unfolding rt.oexp_def st.oexp_def Let_def compat_def by auto  | 
| 63540 | 1441  | 
with neq show "?f h \<in> underS (s ^o t) (?f g)" unfolding underS_def by auto  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1442  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1443  | 
ultimately have "?f g \<in> Field (s ^o t) \<and> ?f ` underS (r ^o t) g \<subseteq> underS (s ^o t) (?f g)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1444  | 
by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1445  | 
}  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1446  | 
thus ?thesis unfolding ordLeq_def2 by (fastforce intro: oexp_Well_order r s t)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1447  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1448  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1449  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1450  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1451  | 
lemma ordLeq_oexp2:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1452  | 
assumes "oone <o r"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1453  | 
shows "s \<le>o r ^o s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1454  | 
proof -  | 
| 61605 | 1455  | 
interpret rs: wo_rel2 r s by unfold_locales (rule r, rule s)  | 
1456  | 
interpret r: wo_rel r by unfold_locales (rule r)  | 
|
1457  | 
interpret s: wo_rel s by unfold_locales (rule s)  | 
|
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1458  | 
from assms well_order_on_domain[OF r] obtain x where  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1459  | 
x: "x \<in> Field r" "r.zero \<in> Field r" "x \<noteq> r.zero"  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1460  | 
unfolding ordLess_def oone_def embedS_def[abs_def] bij_betw_def embed_def under_def  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1461  | 
by (auto simp: image_def)  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1462  | 
(metis (lifting) equals0D mem_Collect_eq r.zero_in_Field singletonI)  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1463  | 
let ?f = "\<lambda>a b. if b \<in> Field s then if b = a then x else r.zero else undefined"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1464  | 
  from x(3) have SUPP: "\<And>y. y \<in> Field s \<Longrightarrow> rs.SUPP (?f y) = {y}" unfolding support_def by auto
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1465  | 
  { fix y assume y: "y \<in> Field s"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1466  | 
with x(1,2) SUPP have "?f y \<in> Field (r ^o s)" unfolding rs.Field_oexp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1467  | 
by (auto simp: FinFunc_def Func_def fin_support_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1468  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1469  | 
have "?f ` underS s y \<subseteq> underS (r ^o s) (?f y)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1470  | 
proof safe  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1471  | 
fix z  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1472  | 
assume "z \<in> underS s y"  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1473  | 
hence z: "z \<noteq> y" "(z, y) \<in> s" "z \<in> Field s" unfolding underS_def Field_def by auto  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1474  | 
from x(3) y z(1,3) have "?f z \<noteq> ?f y" unfolding fun_eq_iff by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1475  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1476  | 
      { from x(1,2) have "?f z \<in> FinFunc r s" "?f y \<in> FinFunc r s"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1477  | 
unfolding FinFunc_def Func_def fin_support_def by (auto simp: SUPP[OF z(3)] SUPP[OF y])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1478  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1479  | 
from x(3) y z(1,2) refl_onD[OF s.REFL] have "s.max_fun_diff (?f z) (?f y) = y"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1480  | 
unfolding rs.max_fun_diff_alt SUPP[OF z(3)] SUPP[OF y]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1481  | 
by (intro s.maxim_equality) (auto simp: s.isMaxim_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1482  | 
ultimately have "(?f z, ?f y) \<in> rs.oexp" using y x(1)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1483  | 
unfolding rs.oexp_def Let_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1484  | 
}  | 
| 
55023
 
38db7814481d
get rid of 'rel' locale, to facilitate inclusion of 'Order_Relation_More_FP' into 'Order_Relation'
 
blanchet 
parents: 
54980 
diff
changeset
 | 
1485  | 
ultimately show "?f z \<in> underS (r ^o s) (?f y)" unfolding underS_def by blast  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1486  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1487  | 
ultimately have "?f y \<in> Field (r ^o s) \<and> ?f ` underS s y \<subseteq> underS (r ^o s) (?f y)" by blast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1488  | 
}  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1489  | 
thus ?thesis unfolding ordLeq_def2 by (fast intro: oexp_Well_order r s)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1490  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1491  | 
|
| 
58127
 
b7cab82f488e
renamed '(BNF_)Constructions_on_Wellorders' to '(BNF_)Wellorder_Constructions'
 
blanchet 
parents: 
55932 
diff
changeset
 | 
1492  | 
lemma FinFunc_osum:  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1493  | 
"fg \<in> FinFunc r (s +o t) = (fg o Inl \<in> FinFunc r s \<and> fg o Inr \<in> FinFunc r t)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1494  | 
(is "?L = (?R1 \<and> ?R2)")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1495  | 
proof safe  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1496  | 
assume ?L  | 
| 63167 | 1497  | 
from \<open>?L\<close> show ?R1 unfolding FinFunc_def Field_osum Func_def Int_iff fin_support_Field_osum o_def  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1498  | 
by (auto split: sum.splits)  | 
| 63167 | 1499  | 
from \<open>?L\<close> show ?R2 unfolding FinFunc_def Field_osum Func_def Int_iff fin_support_Field_osum o_def  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1500  | 
by (auto split: sum.splits)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1501  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1502  | 
assume ?R1 ?R2  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1503  | 
thus "?L" unfolding FinFunc_def Field_osum Func_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1504  | 
by (auto simp: fin_support_Field_osum o_def image_iff split: sum.splits) (metis sumE)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1505  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1506  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1507  | 
lemma max_fun_diff_eq_Inl:  | 
| 
55414
 
eab03e9cee8a
renamed '{prod,sum,bool,unit}_case' to 'case_...'
 
blanchet 
parents: 
55102 
diff
changeset
 | 
1508  | 
assumes "wo_rel.max_fun_diff (s +o t) (case_sum f1 g1) (case_sum f2 g2) = Inl x"  | 
| 
 
eab03e9cee8a
renamed '{prod,sum,bool,unit}_case' to 'case_...'
 
blanchet 
parents: 
55102 
diff
changeset
 | 
1509  | 
"case_sum f1 g1 \<noteq> case_sum f2 g2"  | 
| 
 
eab03e9cee8a
renamed '{prod,sum,bool,unit}_case' to 'case_...'
 
blanchet 
parents: 
55102 
diff
changeset
 | 
1510  | 
"case_sum f1 g1 \<in> FinFunc r (s +o t)" "case_sum f2 g2 \<in> FinFunc r (s +o t)"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1511  | 
shows "wo_rel.max_fun_diff s f1 f2 = x" (is ?P) "g1 = g2" (is ?Q)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1512  | 
proof -  | 
| 61605 | 1513  | 
interpret st: wo_rel "s +o t" by unfold_locales (rule osum_Well_order[OF s t])  | 
1514  | 
interpret s: wo_rel s by unfold_locales (rule s)  | 
|
1515  | 
interpret rst: wo_rel2 r "s +o t" by unfold_locales (rule r, rule osum_Well_order[OF s t])  | 
|
| 
55414
 
eab03e9cee8a
renamed '{prod,sum,bool,unit}_case' to 'case_...'
 
blanchet 
parents: 
55102 
diff
changeset
 | 
1516  | 
  from assms(1) have *: "st.isMaxim {a \<in> Field (s +o t). case_sum f1 g1 a \<noteq> case_sum f2 g2 a} (Inl x)"
 | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1517  | 
using rst.isMaxim_max_fun_diff[OF assms(2-4)] by simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1518  | 
  hence "s.isMaxim {a \<in> Field s. f1 a \<noteq> f2 a} x"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1519  | 
unfolding st.isMaxim_def s.isMaxim_def Field_osum by (auto simp: osum_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1520  | 
thus ?P unfolding s.max_fun_diff_def by (rule s.maxim_equality)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1521  | 
from assms(3,4) have **: "g1 \<in> FinFunc r t" "g2 \<in> FinFunc r t" unfolding FinFunc_osum  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1522  | 
by (auto simp: o_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1523  | 
show ?Q  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1524  | 
proof  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1525  | 
fix x  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1526  | 
from * ** show "g1 x = g2 x" unfolding st.isMaxim_def Field_osum FinFunc_def Func_def fun_eq_iff  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1527  | 
unfolding osum_def by (case_tac "x \<in> Field t") auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1528  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1529  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1530  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1531  | 
lemma max_fun_diff_eq_Inr:  | 
| 
55414
 
eab03e9cee8a
renamed '{prod,sum,bool,unit}_case' to 'case_...'
 
blanchet 
parents: 
55102 
diff
changeset
 | 
1532  | 
assumes "wo_rel.max_fun_diff (s +o t) (case_sum f1 g1) (case_sum f2 g2) = Inr x"  | 
| 
 
eab03e9cee8a
renamed '{prod,sum,bool,unit}_case' to 'case_...'
 
blanchet 
parents: 
55102 
diff
changeset
 | 
1533  | 
"case_sum f1 g1 \<noteq> case_sum f2 g2"  | 
| 
 
eab03e9cee8a
renamed '{prod,sum,bool,unit}_case' to 'case_...'
 
blanchet 
parents: 
55102 
diff
changeset
 | 
1534  | 
"case_sum f1 g1 \<in> FinFunc r (s +o t)" "case_sum f2 g2 \<in> FinFunc r (s +o t)"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1535  | 
shows "wo_rel.max_fun_diff t g1 g2 = x" (is ?P) "g1 \<noteq> g2" (is ?Q)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1536  | 
proof -  | 
| 61605 | 1537  | 
interpret st: wo_rel "s +o t" by unfold_locales (rule osum_Well_order[OF s t])  | 
1538  | 
interpret t: wo_rel t by unfold_locales (rule t)  | 
|
1539  | 
interpret rst: wo_rel2 r "s +o t" by unfold_locales (rule r, rule osum_Well_order[OF s t])  | 
|
| 
55414
 
eab03e9cee8a
renamed '{prod,sum,bool,unit}_case' to 'case_...'
 
blanchet 
parents: 
55102 
diff
changeset
 | 
1540  | 
  from assms(1) have *: "st.isMaxim {a \<in> Field (s +o t). case_sum f1 g1 a \<noteq> case_sum f2 g2 a} (Inr x)"
 | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1541  | 
using rst.isMaxim_max_fun_diff[OF assms(2-4)] by simp  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1542  | 
  hence "t.isMaxim {a \<in> Field t. g1 a \<noteq> g2 a} x"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1543  | 
unfolding st.isMaxim_def t.isMaxim_def Field_osum by (auto simp: osum_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1544  | 
thus ?P ?Q unfolding t.max_fun_diff_def fun_eq_iff  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1545  | 
by (auto intro: t.maxim_equality simp: t.isMaxim_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1546  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1547  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1548  | 
lemma oexp_osum: "r ^o (s +o t) =o (r ^o s) *o (r ^o t)" (is "?R =o ?L")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1549  | 
proof (rule ordIso_symmetric)  | 
| 61605 | 1550  | 
interpret rst: wo_rel2 r "s +o t" by unfold_locales (rule r, rule osum_Well_order[OF s t])  | 
1551  | 
interpret rs: wo_rel2 r s by unfold_locales (rule r, rule s)  | 
|
1552  | 
interpret rt: wo_rel2 r t by unfold_locales (rule r, rule t)  | 
|
| 
55414
 
eab03e9cee8a
renamed '{prod,sum,bool,unit}_case' to 'case_...'
 
blanchet 
parents: 
55102 
diff
changeset
 | 
1553  | 
let ?f = "\<lambda>(f, g). case_sum f g"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1554  | 
have "bij_betw ?f (Field ?L) (Field ?R)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1555  | 
unfolding bij_betw_def rst.Field_oexp rs.Field_oexp rt.Field_oexp Field_oprod proof (intro conjI)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1556  | 
show "inj_on ?f (FinFunc r s \<times> FinFunc r t)" unfolding inj_on_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1557  | 
by (auto simp: fun_eq_iff split: sum.splits)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1558  | 
show "?f ` (FinFunc r s \<times> FinFunc r t) = FinFunc r (s +o t)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1559  | 
proof safe  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1560  | 
fix fg assume "fg \<in> FinFunc r (s +o t)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1561  | 
thus "fg \<in> ?f ` (FinFunc r s \<times> FinFunc r t)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1562  | 
by (intro image_eqI[of _ _ "(fg o Inl, fg o Inr)"])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1563  | 
(auto simp: FinFunc_osum fun_eq_iff split: sum.splits)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1564  | 
qed (auto simp: FinFunc_osum o_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1565  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1566  | 
moreover have "compat ?L ?R ?f"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1567  | 
unfolding compat_def rst.Field_oexp rs.Field_oexp rt.Field_oexp oprod_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1568  | 
unfolding rst.oexp_def Let_def rs.oexp_def rt.oexp_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1569  | 
by (fastforce simp: Field_osum FinFunc_osum o_def split: sum.splits  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1570  | 
dest: max_fun_diff_eq_Inl max_fun_diff_eq_Inr)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1571  | 
ultimately have "iso ?L ?R ?f" using r s t  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1572  | 
by (subst iso_iff3) (auto intro: oexp_Well_order oprod_Well_order osum_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1573  | 
thus "?L =o ?R" using r s t unfolding ordIso_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1574  | 
by (auto intro: oexp_Well_order oprod_Well_order osum_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1575  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1576  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1577  | 
definition "rev_curr f b = (if b \<in> Field t then \<lambda>a. f (a, b) else undefined)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1578  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1579  | 
lemma rev_curr_FinFunc:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1580  | 
  assumes Field: "Field r \<noteq> {}"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1581  | 
shows "rev_curr ` (FinFunc r (s *o t)) = FinFunc (r ^o s) t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1582  | 
proof safe  | 
| 61605 | 1583  | 
interpret rs: wo_rel2 r s by unfold_locales (rule r, rule s)  | 
1584  | 
interpret rst: wo_rel2 "r ^o s" t by unfold_locales (rule oexp_Well_order[OF r s], rule t)  | 
|
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1585  | 
fix g assume g: "g \<in> FinFunc r (s *o t)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1586  | 
hence "finite (rst.SUPP (rev_curr g))" "\<forall>x \<in> Field t. finite (rs.SUPP (rev_curr g x))"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1587  | 
unfolding FinFunc_def Field_oprod rs.Field_oexp Func_def fin_support_def support_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1588  | 
rs.zero_oexp[OF Field] rev_curr_def by (auto simp: fun_eq_iff rs.const_def elim!: finite_surj)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1589  | 
with g show "rev_curr g \<in> FinFunc (r ^o s) t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1590  | 
unfolding FinFunc_def Field_oprod rs.Field_oexp Func_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1591  | 
by (auto simp: rev_curr_def fin_support_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1592  | 
next  | 
| 61605 | 1593  | 
interpret rs: wo_rel2 r s by unfold_locales (rule r, rule s)  | 
1594  | 
interpret rst: wo_rel2 "r ^o s" t by unfold_locales (rule oexp_Well_order[OF r s], rule t)  | 
|
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1595  | 
fix fg assume *: "fg \<in> FinFunc (r ^o s) t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1596  | 
let ?g = "\<lambda>(a, b). if (a, b) \<in> Field (s *o t) then fg b a else undefined"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1597  | 
show "fg \<in> rev_curr ` FinFunc r (s *o t)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1598  | 
proof (rule image_eqI[of _ _ ?g])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1599  | 
show "fg = rev_curr ?g"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1600  | 
proof  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1601  | 
fix x  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1602  | 
from * show "fg x = rev_curr ?g x"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1603  | 
unfolding FinFunc_def rs.Field_oexp Func_def rev_curr_def Field_oprod by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1604  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1605  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1606  | 
have **: "(\<Union>g \<in> fg ` Field t. rs.SUPP g) =  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1607  | 
              (\<Union>g \<in> fg ` Field t - {rs.const}. rs.SUPP g)"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1608  | 
unfolding support_def by auto  | 
| 63540 | 1609  | 
from * have ***: "\<forall>g \<in> fg ` Field t. finite (rs.SUPP g)" "finite (rst.SUPP fg)"  | 
| 61068 | 1610  | 
unfolding rs.Field_oexp FinFunc_def Func_def fin_support_def Option.these_def by force+  | 
| 63540 | 1611  | 
    hence "finite (fg ` Field t - {rs.const})" using *
 | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1612  | 
unfolding support_def rs.zero_oexp[OF Field] FinFunc_def Func_def  | 
| 61068 | 1613  | 
by (elim finite_surj[of _ _ fg]) (fastforce simp: image_iff Option.these_def)  | 
| 63540 | 1614  | 
with *** have "finite ((\<Union>g \<in> fg ` Field t. rs.SUPP g) \<times> rst.SUPP fg)"  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1615  | 
by (subst **) (auto intro!: finite_cartesian_product)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1616  | 
with * show "?g \<in> FinFunc r (s *o t)"  | 
| 61068 | 1617  | 
unfolding Field_oprod rs.Field_oexp FinFunc_def Func_def fin_support_def Option.these_def  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1618  | 
support_def rs.zero_oexp[OF Field] by (auto elim!: finite_subset[rotated])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1619  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1620  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1621  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1622  | 
lemma rev_curr_app_FinFunc[elim!]:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1623  | 
"\<lbrakk>f \<in> FinFunc r (s *o t); z \<in> Field t\<rbrakk> \<Longrightarrow> rev_curr f z \<in> FinFunc r s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1624  | 
unfolding rev_curr_def FinFunc_def Func_def Field_oprod fin_support_def support_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1625  | 
by (auto elim: finite_surj)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1626  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1627  | 
lemma max_fun_diff_oprod:  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1628  | 
  assumes Field: "Field r \<noteq> {}" and "f \<noteq> g" "f \<in> FinFunc r (s *o t)" "g \<in> FinFunc r (s *o t)"
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1629  | 
defines "m \<equiv> wo_rel.max_fun_diff t (rev_curr f) (rev_curr g)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1630  | 
shows "wo_rel.max_fun_diff (s *o t) f g =  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1631  | 
(wo_rel.max_fun_diff s (rev_curr f m) (rev_curr g m), m)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1632  | 
proof -  | 
| 61605 | 1633  | 
interpret st: wo_rel "s *o t" by unfold_locales (rule oprod_Well_order[OF s t])  | 
1634  | 
interpret s: wo_rel s by unfold_locales (rule s)  | 
|
1635  | 
interpret t: wo_rel t by unfold_locales (rule t)  | 
|
1636  | 
interpret r_st: wo_rel2 r "s *o t" by unfold_locales (rule r, rule oprod_Well_order[OF s t])  | 
|
1637  | 
interpret rs: wo_rel2 r s by unfold_locales (rule r, rule s)  | 
|
1638  | 
interpret rst: wo_rel2 "r ^o s" t by unfold_locales (rule oexp_Well_order[OF r s], rule t)  | 
|
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1639  | 
from fun_unequal_in_support[OF assms(2), of "Field (s *o t)" "Field r" "Field r"] assms(3,4)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1640  | 
have diff1: "rev_curr f \<noteq> rev_curr g"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1641  | 
"rev_curr f \<in> FinFunc (r ^o s) t" "rev_curr g \<in> FinFunc (r ^o s) t" using rev_curr_FinFunc[OF Field]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1642  | 
unfolding fun_eq_iff rev_curr_def[abs_def] FinFunc_def support_def Field_oprod  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1643  | 
by auto fast  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1644  | 
hence diff2: "rev_curr f m \<noteq> rev_curr g m" "rev_curr f m \<in> FinFunc r s" "rev_curr g m \<in> FinFunc r s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1645  | 
using rst.max_fun_diff[OF diff1] assms(3,4) rst.max_fun_diff_in unfolding m_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1646  | 
show ?thesis unfolding st.max_fun_diff_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1647  | 
proof (intro st.maxim_equality, unfold st.isMaxim_def Field_oprod, safe)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1648  | 
show "s.max_fun_diff (rev_curr f m) (rev_curr g m) \<in> Field s"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1649  | 
using rs.max_fun_diff_in[OF diff2] by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1650  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1651  | 
show "m \<in> Field t" using rst.max_fun_diff_in[OF diff1] unfolding m_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1652  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1653  | 
assume "f (s.max_fun_diff (rev_curr f m) (rev_curr g m), m) =  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1654  | 
g (s.max_fun_diff (rev_curr f m) (rev_curr g m), m)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1655  | 
(is "f (?x, m) = g (?x, m)")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1656  | 
hence "rev_curr f m ?x = rev_curr g m ?x" unfolding rev_curr_def by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1657  | 
with rs.max_fun_diff[OF diff2] show False by auto  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1658  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1659  | 
fix x y assume "f (x, y) \<noteq> g (x, y)" "x \<in> Field s" "y \<in> Field t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1660  | 
thus "((x, y), (s.max_fun_diff (rev_curr f m) (rev_curr g m), m)) \<in> s *o t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1661  | 
using rst.max_fun_diff_in[OF diff1] rs.max_fun_diff_in[OF diff2] diff1 diff2  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1662  | 
rst.max_fun_diff_max[OF diff1, of y] rs.max_fun_diff_le_eq[OF _ diff2, of x]  | 
| 
64016
 
5c2c559f01eb
tuned proof -- much faster
 
fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents: 
63540 
diff
changeset
 | 
1663  | 
unfolding oprod_def m_def rev_curr_def fun_eq_iff by (auto intro: s.in_notinI)  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1664  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1665  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1666  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1667  | 
lemma oexp_oexp: "(r ^o s) ^o t =o r ^o (s *o t)" (is "?R =o ?L")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1668  | 
proof (cases "r = {}")
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1669  | 
case True  | 
| 61605 | 1670  | 
interpret rs: wo_rel2 r s by unfold_locales (rule r, rule s)  | 
1671  | 
interpret rst: wo_rel2 "r ^o s" t by unfold_locales (rule oexp_Well_order[OF r s], rule t)  | 
|
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1672  | 
show ?thesis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1673  | 
  proof (cases "s = {} \<or> t = {}")
 | 
| 63167 | 1674  | 
    case True with \<open>r = {}\<close> show ?thesis
 | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1675  | 
by (auto simp: oexp_empty[OF oexp_Well_order[OF Well_order_empty s]]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1676  | 
intro!: ordIso_transitive[OF ordIso_symmetric[OF oone_ordIso] oone_ordIso]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1677  | 
ordIso_transitive[OF oone_ordIso_oexp[OF ordIso_symmetric[OF oone_ordIso] t] oone_ordIso])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1678  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1679  | 
case False  | 
| 63540 | 1680  | 
     hence "s *o t \<noteq> {}" unfolding oprod_def Field_def by fastforce
 | 
1681  | 
with False show ?thesis  | 
|
1682  | 
       using \<open>r = {}\<close> ozero_ordIso
 | 
|
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1683  | 
by (auto simp add: s t oprod_Well_order ozero_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1684  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1685  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1686  | 
case False  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1687  | 
  hence Field: "Field r \<noteq> {}" by (metis Field_def Range_empty_iff Un_empty)
 | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1688  | 
show ?thesis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1689  | 
proof (rule ordIso_symmetric)  | 
| 61605 | 1690  | 
interpret r_st: wo_rel2 r "s *o t" by unfold_locales (rule r, rule oprod_Well_order[OF s t])  | 
1691  | 
interpret rs: wo_rel2 r s by unfold_locales (rule r, rule s)  | 
|
1692  | 
interpret rst: wo_rel2 "r ^o s" t by unfold_locales (rule oexp_Well_order[OF r s], rule t)  | 
|
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1693  | 
have bij: "bij_betw rev_curr (Field ?L) (Field ?R)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1694  | 
unfolding bij_betw_def r_st.Field_oexp rst.Field_oexp Field_oprod proof (intro conjI)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1695  | 
show "inj_on rev_curr (FinFunc r (s *o t))"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1696  | 
unfolding inj_on_def FinFunc_def Func_def Field_oprod rs.Field_oexp rev_curr_def[abs_def]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1697  | 
by (auto simp: fun_eq_iff) metis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1698  | 
show "rev_curr ` (FinFunc r (s *o t)) = FinFunc (r ^o s) t" by (rule rev_curr_FinFunc[OF Field])  | 
| 
58127
 
b7cab82f488e
renamed '(BNF_)Constructions_on_Wellorders' to '(BNF_)Wellorder_Constructions'
 
blanchet 
parents: 
55932 
diff
changeset
 | 
1699  | 
qed  | 
| 
54980
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1700  | 
moreover  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1701  | 
have "compat ?L ?R rev_curr"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1702  | 
unfolding compat_def proof safe  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1703  | 
fix fg1 fg2 assume fg: "(fg1, fg2) \<in> r ^o (s *o t)"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1704  | 
show "(rev_curr fg1, rev_curr fg2) \<in> r ^o s ^o t"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1705  | 
proof (cases "fg1 = fg2")  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1706  | 
assume "fg1 \<noteq> fg2"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1707  | 
with fg show ?thesis  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1708  | 
using rst.max_fun_diff_in[of "rev_curr fg1" "rev_curr fg2"]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1709  | 
max_fun_diff_oprod[OF Field, of fg1 fg2] rev_curr_FinFunc[OF Field, symmetric]  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1710  | 
unfolding r_st.Field_oexp rs.Field_oexp rst.Field_oexp unfolding r_st.oexp_def rst.oexp_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1711  | 
by (auto simp: rs.oexp_def Let_def) (auto simp: rev_curr_def[abs_def])  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1712  | 
next  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1713  | 
assume "fg1 = fg2"  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1714  | 
with fg bij show ?thesis unfolding r_st.Field_oexp rs.Field_oexp rst.Field_oexp bij_betw_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1715  | 
by (auto simp: r_st.oexp_def rst.oexp_def)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1716  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1717  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1718  | 
ultimately have "iso ?L ?R rev_curr" using r s t  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1719  | 
by (subst iso_iff3) (auto intro: oexp_Well_order oprod_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1720  | 
thus "?L =o ?R" using r s t unfolding ordIso_def  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1721  | 
by (auto intro: oexp_Well_order oprod_Well_order)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1722  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1723  | 
qed  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1724  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1725  | 
end (* context with 3 wellorders *)  | 
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1726  | 
|
| 
 
7e0573a490ee
basic ordinal arithmetic and cardinals library extension (not relevant for BNFs)
 
traytel 
parents:  
diff
changeset
 | 
1727  | 
end  |