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