src/HOL/Cardinals/Order_Union.thy
author wenzelm
Fri, 20 Sep 2024 19:51:08 +0200
changeset 80914 d97fdabd9e2b
parent 76948 f33df7529fed
permissions -rw-r--r--
standardize mixfix annotations via "isabelle update -a -u mixfix_cartouches" --- to simplify systematic editing;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
54545
483131676087 effectively reverted d25fc4c0ff62, to avoid quasi-cyclic dependencies with HOL-Cardinals and minimize BNF dependencies
blanchet
parents: 54482
diff changeset
     1
(*  Title:      HOL/Cardinals/Order_Union.thy
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
     2
    Author:     Andrei Popescu, TU Muenchen
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
     3
52199
d25fc4c0ff62 merged Well_Order_Extension into Zorn
popescua
parents: 52191
diff changeset
     4
The ordinal-like sum of two orders with disjoint fields
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
     5
*)
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
     6
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
     7
section \<open>Order Union\<close>
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
     8
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
     9
theory Order_Union
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    10
  imports Main
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    11
begin
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    12
80914
d97fdabd9e2b standardize mixfix annotations via "isabelle update -a -u mixfix_cartouches" --- to simplify systematic editing;
wenzelm
parents: 76948
diff changeset
    13
definition Osum :: "'a rel \<Rightarrow> 'a rel \<Rightarrow> 'a rel"  (infix \<open>Osum\<close> 60) where
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    14
  "r Osum r' = r \<union> r' \<union> {(a, a'). a \<in> Field r \<and> a' \<in> Field r'}"
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    15
80914
d97fdabd9e2b standardize mixfix annotations via "isabelle update -a -u mixfix_cartouches" --- to simplify systematic editing;
wenzelm
parents: 76948
diff changeset
    16
notation Osum  (infix \<open>\<union>o\<close> 60)
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    17
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    18
lemma Field_Osum: "Field (r \<union>o r') = Field r \<union> Field r'"
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    19
  unfolding Osum_def Field_def by blast
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    20
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    21
lemma Osum_wf:
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    22
  assumes FLD: "Field r Int Field r' = {}" and
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    23
    WF: "wf r" and WF': "wf r'"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    24
  shows "wf (r Osum r')"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    25
  unfolding wf_eq_minimal2 unfolding Field_Osum
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    26
proof(intro allI impI, elim conjE)
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    27
  fix A assume *: "A \<subseteq> Field r \<union> Field r'" and **: "A \<noteq> {}"
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    28
  obtain B where B_def: "B = A Int Field r" by blast
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    29
  show "\<exists>a\<in>A. \<forall>a'\<in>A. (a', a) \<notin> r \<union>o r'"
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    30
  proof(cases "B = {}")
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    31
    assume Case1: "B \<noteq> {}"
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    32
    hence "B \<noteq> {} \<and> B \<le> Field r" using B_def by auto
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    33
    then obtain a where 1: "a \<in> B" and 2: "\<forall>a1 \<in> B. (a1,a) \<notin> r"
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    34
      using WF unfolding wf_eq_minimal2 by blast
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    35
    hence 3: "a \<in> Field r \<and> a \<notin> Field r'" using B_def FLD by auto
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    36
        (*  *)
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    37
    have "\<forall>a1 \<in> A. (a1,a) \<notin> r Osum r'"
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    38
    proof(intro ballI)
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    39
      fix a1 assume **: "a1 \<in> A"
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    40
      {assume Case11: "a1 \<in> Field r"
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    41
        hence "(a1,a) \<notin> r" using B_def ** 2 by auto
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    42
        moreover
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    43
        have "(a1,a) \<notin> r'" using 3 by (auto simp add: Field_def)
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    44
        ultimately have "(a1,a) \<notin> r Osum r'"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    45
          using 3 unfolding Osum_def by auto
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    46
      }
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    47
      moreover
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    48
      {assume Case12: "a1 \<notin> Field r"
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    49
        hence "(a1,a) \<notin> r" unfolding Field_def by auto
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    50
        moreover
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    51
        have "(a1,a) \<notin> r'" using 3 unfolding Field_def by auto
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    52
        ultimately have "(a1,a) \<notin> r Osum r'"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    53
          using 3 unfolding Osum_def by auto
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    54
      }
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    55
      ultimately show "(a1,a) \<notin> r Osum r'" by blast
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    56
    qed
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    57
    thus ?thesis using 1 B_def by auto
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    58
  next
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    59
    assume Case2: "B = {}"
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    60
    hence 1: "A \<noteq> {} \<and> A \<le> Field r'" using * ** B_def by auto
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    61
    then obtain a' where 2: "a' \<in> A" and 3: "\<forall>a1' \<in> A. (a1',a') \<notin> r'"
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    62
      using WF' unfolding wf_eq_minimal2 by blast
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    63
    hence 4: "a' \<in> Field r' \<and> a' \<notin> Field r" using 1 FLD by blast
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    64
        (*  *)
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    65
    have "\<forall>a1' \<in> A. (a1',a') \<notin> r Osum r'"
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    66
    proof(unfold Osum_def, auto simp add: 3)
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    67
      fix a1' assume "(a1', a') \<in> r"
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    68
      thus False using 4 unfolding Field_def by blast
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    69
    next
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    70
      fix a1' assume "a1' \<in> A" and "a1' \<in> Field r"
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    71
      thus False using Case2 B_def by auto
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    72
    qed
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    73
    thus ?thesis using 2 by blast
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    74
  qed
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    75
qed
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    76
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    77
lemma Osum_Refl:
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    78
  assumes FLD: "Field r Int Field r' = {}" and
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    79
    REFL: "Refl r" and REFL': "Refl r'"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    80
  shows "Refl (r Osum r')"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    81
  using assms
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    82
  unfolding refl_on_def Field_Osum unfolding Osum_def by blast
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    83
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    84
lemma Osum_trans:
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    85
  assumes FLD: "Field r Int Field r' = {}" and
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    86
    TRANS: "trans r" and TRANS': "trans r'"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    87
  shows "trans (r Osum r')"
76948
f33df7529fed Substantial simplification of HOL-Cardinals
paulson <lp15@cam.ac.uk>
parents: 76946
diff changeset
    88
  using assms unfolding Osum_def trans_def disjoint_iff Field_iff by blast
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    89
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    90
lemma Osum_Preorder:
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    91
  "\<lbrakk>Field r Int Field r' = {}; Preorder r; Preorder r'\<rbrakk> \<Longrightarrow> Preorder (r Osum r')"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    92
  unfolding preorder_on_def using Osum_Refl Osum_trans by blast
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    93
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    94
lemma Osum_antisym:
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    95
  assumes FLD: "Field r Int Field r' = {}" and
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    96
    AN: "antisym r" and AN': "antisym r'"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
    97
  shows "antisym (r Osum r')"
76948
f33df7529fed Substantial simplification of HOL-Cardinals
paulson <lp15@cam.ac.uk>
parents: 76946
diff changeset
    98
  using assms by (auto simp: disjoint_iff antisym_def Osum_def Field_def)
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
    99
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   100
lemma Osum_Partial_order:
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   101
  "\<lbrakk>Field r Int Field r' = {}; Partial_order r; Partial_order r'\<rbrakk> \<Longrightarrow>
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   102
 Partial_order (r Osum r')"
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   103
  unfolding partial_order_on_def using Osum_Preorder Osum_antisym by blast
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   104
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   105
lemma Osum_Total:
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   106
  assumes FLD: "Field r Int Field r' = {}" and
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   107
    TOT: "Total r" and TOT': "Total r'"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   108
  shows "Total (r Osum r')"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   109
  using assms
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   110
  unfolding total_on_def  Field_Osum unfolding Osum_def by blast
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   111
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   112
lemma Osum_Linear_order:
76948
f33df7529fed Substantial simplification of HOL-Cardinals
paulson <lp15@cam.ac.uk>
parents: 76946
diff changeset
   113
  "\<lbrakk>Field r Int Field r' = {}; Linear_order r; Linear_order r'\<rbrakk> \<Longrightarrow> Linear_order (r Osum r')"
f33df7529fed Substantial simplification of HOL-Cardinals
paulson <lp15@cam.ac.uk>
parents: 76946
diff changeset
   114
  by (simp add: Osum_Partial_order Osum_Total linear_order_on_def)
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   115
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   116
lemma Osum_minus_Id1:
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   117
  assumes "r \<le> Id"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   118
  shows "(r Osum r') - Id \<le> (r' - Id) \<union> (Field r \<times> Field r')"
76948
f33df7529fed Substantial simplification of HOL-Cardinals
paulson <lp15@cam.ac.uk>
parents: 76946
diff changeset
   119
using assms by (force simp: Osum_def)
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   120
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   121
lemma Osum_minus_Id2:
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   122
  assumes "r' \<le> Id"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   123
  shows "(r Osum r') - Id \<le> (r - Id) \<union> (Field r \<times> Field r')"
76948
f33df7529fed Substantial simplification of HOL-Cardinals
paulson <lp15@cam.ac.uk>
parents: 76946
diff changeset
   124
using assms by (force simp: Osum_def)
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   125
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   126
lemma Osum_minus_Id:
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   127
  assumes TOT: "Total r" and TOT': "Total r'" and
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   128
    NID: "\<not> (r \<le> Id)" and NID': "\<not> (r' \<le> Id)"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   129
  shows "(r Osum r') - Id \<le> (r - Id) Osum (r' - Id)"
76948
f33df7529fed Substantial simplification of HOL-Cardinals
paulson <lp15@cam.ac.uk>
parents: 76946
diff changeset
   130
  using assms Total_Id_Field by (force simp: Osum_def)
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   131
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   132
lemma wf_Int_Times:
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   133
  assumes "A Int B = {}"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   134
  shows "wf(A \<times> B)"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   135
  unfolding wf_def using assms by blast
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   136
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   137
lemma Osum_wf_Id:
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   138
  assumes TOT: "Total r" and TOT': "Total r'" and
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   139
    FLD: "Field r Int Field r' = {}" and
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   140
    WF: "wf(r - Id)" and WF': "wf(r' - Id)"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   141
  shows "wf ((r Osum r') - Id)"
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   142
proof(cases "r \<le> Id \<or> r' \<le> Id")
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   143
  assume Case1: "\<not>(r \<le> Id \<or> r' \<le> Id)"
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   144
  have "Field(r - Id) Int Field(r' - Id) = {}"
76948
f33df7529fed Substantial simplification of HOL-Cardinals
paulson <lp15@cam.ac.uk>
parents: 76946
diff changeset
   145
    using Case1 FLD TOT TOT' Total_Id_Field by blast
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   146
  thus ?thesis
76948
f33df7529fed Substantial simplification of HOL-Cardinals
paulson <lp15@cam.ac.uk>
parents: 76946
diff changeset
   147
    by (meson Case1 Osum_minus_Id Osum_wf TOT TOT' WF WF' wf_subset)
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   148
next
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   149
  have 1: "wf(Field r \<times> Field r')"
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   150
    using FLD by (auto simp add: wf_Int_Times)
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   151
  assume Case2: "r \<le> Id \<or> r' \<le> Id"
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   152
  moreover
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   153
  {assume Case21: "r \<le> Id"
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   154
    hence "(r Osum r') - Id \<le> (r' - Id) \<union> (Field r \<times> Field r')"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   155
      using Osum_minus_Id1[of r r'] by simp
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   156
    moreover
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   157
    {have "Domain(Field r \<times> Field r') Int Range(r' - Id) = {}"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   158
        using FLD unfolding Field_def by blast
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   159
      hence "wf((r' - Id) \<union> (Field r \<times> Field r'))"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   160
        using 1 WF' wf_Un[of "Field r \<times> Field r'" "r' - Id"]
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   161
        by (auto simp add: Un_commute)
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   162
    }
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   163
    ultimately have ?thesis using wf_subset by blast
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   164
  }
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   165
  moreover
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   166
  {assume Case22: "r' \<le> Id"
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   167
    hence "(r Osum r') - Id \<le> (r - Id) \<union> (Field r \<times> Field r')"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   168
      using Osum_minus_Id2[of r' r] by simp
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   169
    moreover
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   170
    {have "Range(Field r \<times> Field r') Int Domain(r - Id) = {}"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   171
        using FLD unfolding Field_def by blast
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   172
      hence "wf((r - Id) \<union> (Field r \<times> Field r'))"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   173
        using 1 WF wf_Un[of "r - Id" "Field r \<times> Field r'"]
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   174
        by (auto simp add: Un_commute)
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   175
    }
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   176
    ultimately have ?thesis using wf_subset by blast
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   177
  }
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   178
  ultimately show ?thesis by blast
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   179
qed
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   180
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   181
lemma Osum_Well_order:
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   182
  assumes FLD: "Field r Int Field r' = {}" and
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   183
    WELL: "Well_order r" and WELL': "Well_order r'"
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   184
  shows "Well_order (r Osum r')"
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   185
proof-
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   186
  have "Total r \<and> Total r'" using WELL WELL'
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   187
    by (auto simp add: order_on_defs)
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   188
  thus ?thesis using assms unfolding well_order_on_def
76946
5df58a471d9e Trying to clean up HOL/Cardinals
paulson <lp15@cam.ac.uk>
parents: 67006
diff changeset
   189
    using Osum_Linear_order Osum_wf_Id by blast
52184
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   190
qed
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   191
d6627b50b131 added Ordered_Union
popescua
parents:
diff changeset
   192
end