src/HOL/Analysis/Vitali_Covering_Theorem.thy
author immler
Thu, 17 Jan 2019 16:38:00 -0500
changeset 69683 8b3458ca0762
parent 69313 b021008c5397
child 69737 ec3cc98c38db
permissions -rw-r--r--
subsection is always %important
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
68017
e99f9b3962bf three new theorems
paulson <lp15@cam.ac.uk>
parents: 67998
diff changeset
     1
(*  Title:      HOL/Analysis/Vitali_Covering_Theorem.thy
e99f9b3962bf three new theorems
paulson <lp15@cam.ac.uk>
parents: 67998
diff changeset
     2
    Authors:    LC Paulson, based on material from HOL Light
e99f9b3962bf three new theorems
paulson <lp15@cam.ac.uk>
parents: 67998
diff changeset
     3
*)
e99f9b3962bf three new theorems
paulson <lp15@cam.ac.uk>
parents: 67998
diff changeset
     4
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
     5
section%important  \<open>Vitali Covering Theorem and an Application to Negligibility\<close>
68017
e99f9b3962bf three new theorems
paulson <lp15@cam.ac.uk>
parents: 67998
diff changeset
     6
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     7
theory Vitali_Covering_Theorem
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     8
  imports Ball_Volume "HOL-Library.Permutations"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     9
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    10
begin
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    11
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
    12
lemma%important stretch_Galois:
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    13
  fixes x :: "real^'n"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    14
  shows "(\<And>k. m k \<noteq> 0) \<Longrightarrow> ((y = (\<chi> k. m k * x$k)) \<longleftrightarrow> (\<chi> k. y$k / m k) = x)"
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
    15
  by%unimportant auto
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    16
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
    17
lemma%important lambda_swap_Galois:
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    18
   "(x = (\<chi> i. y $ Fun.swap m n id i) \<longleftrightarrow> (\<chi> i. x $ Fun.swap m n id i) = y)"
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
    19
  by%unimportant (auto; simp add: pointfree_idE vec_eq_iff)
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    20
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
    21
lemma%important lambda_add_Galois:
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    22
  fixes x :: "real^'n"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    23
  shows "m \<noteq> n \<Longrightarrow> (x = (\<chi> i. if i = m then y$m + y$n else y$i) \<longleftrightarrow> (\<chi> i. if i = m then x$m - x$n else x$i) = y)"
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
    24
  by%unimportant (safe; simp add: vec_eq_iff)
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    25
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    26
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
    27
lemma%important Vitali_covering_lemma_cballs_balls:
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    28
  fixes a :: "'a \<Rightarrow> 'b::euclidean_space"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    29
  assumes "\<And>i. i \<in> K \<Longrightarrow> 0 < r i \<and> r i \<le> B"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    30
  obtains C where "countable C" "C \<subseteq> K"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    31
     "pairwise (\<lambda>i j. disjnt (cball (a i) (r i)) (cball (a j) (r j))) C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    32
     "\<And>i. i \<in> K \<Longrightarrow> \<exists>j. j \<in> C \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    33
                        \<not> disjnt (cball (a i) (r i)) (cball (a j) (r j)) \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    34
                        cball (a i) (r i) \<subseteq> ball (a j) (5 * r j)"
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
    35
proof%unimportant (cases "K = {}")
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    36
  case True
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    37
  with that show ?thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    38
    by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    39
next
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    40
  case False
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    41
  then have "B > 0"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    42
    using assms less_le_trans by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    43
  have rgt0[simp]: "\<And>i. i \<in> K \<Longrightarrow> 0 < r i"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    44
    using assms by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    45
  let ?djnt = "pairwise (\<lambda>i j. disjnt (cball (a i) (r i)) (cball (a j) (r j)))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    46
  have "\<exists>C. \<forall>n. (C n \<subseteq> K \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    47
             (\<forall>i \<in> C n. B/2 ^ n \<le> r i) \<and> ?djnt (C n) \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    48
             (\<forall>i \<in> K. B/2 ^ n < r i
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    49
                 \<longrightarrow> (\<exists>j. j \<in> C n \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    50
                         \<not> disjnt (cball (a i) (r i)) (cball (a j) (r j)) \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    51
                         cball (a i) (r i) \<subseteq> ball (a j) (5 * r j)))) \<and> (C n \<subseteq> C(Suc n))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    52
  proof (rule dependent_nat_choice, safe)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    53
    fix C n
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    54
    define D where "D \<equiv> {i \<in> K. B/2 ^ Suc n < r i \<and> (\<forall>j\<in>C. disjnt (cball(a i)(r i)) (cball (a j) (r j)))}"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    55
    let ?cover_ar = "\<lambda>i j. \<not> disjnt (cball (a i) (r i)) (cball (a j) (r j)) \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    56
                             cball (a i) (r i) \<subseteq> ball (a j) (5 * r j)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    57
    assume "C \<subseteq> K"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    58
      and Ble: "\<forall>i\<in>C. B/2 ^ n \<le> r i"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    59
      and djntC: "?djnt C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    60
      and cov_n: "\<forall>i\<in>K. B/2 ^ n < r i \<longrightarrow> (\<exists>j. j \<in> C \<and> ?cover_ar i j)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    61
    have *: "\<forall>C\<in>chains {C. C \<subseteq> D \<and> ?djnt C}. \<Union>C \<in> {C. C \<subseteq> D \<and> ?djnt C}"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    62
    proof (clarsimp simp: chains_def)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    63
      fix C
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    64
      assume C: "C \<subseteq> {C. C \<subseteq> D \<and> ?djnt C}" and "chain\<^sub>\<subseteq> C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    65
      show "\<Union>C \<subseteq> D \<and> ?djnt (\<Union>C)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    66
        unfolding pairwise_def
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    67
      proof (intro ballI conjI impI)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    68
        show "\<Union>C \<subseteq> D"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    69
          using C by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    70
      next
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    71
        fix x y
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    72
        assume "x \<in> \<Union>C" and "y \<in> \<Union>C" and "x \<noteq> y"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    73
        then obtain X Y where XY: "x \<in> X" "X \<in> C" "y \<in> Y" "Y \<in> C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    74
          by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    75
        then consider "X \<subseteq> Y" | "Y \<subseteq> X"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    76
          by (meson \<open>chain\<^sub>\<subseteq> C\<close> chain_subset_def)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    77
        then show "disjnt (cball (a x) (r x)) (cball (a y) (r y))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    78
        proof cases
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    79
          case 1
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    80
          with C XY \<open>x \<noteq> y\<close> show ?thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    81
            unfolding pairwise_def by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    82
        next
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    83
          case 2
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    84
          with C XY \<open>x \<noteq> y\<close> show ?thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    85
            unfolding pairwise_def by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    86
        qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    87
      qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    88
    qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    89
    obtain E where "E \<subseteq> D" and djntE: "?djnt E" and maximalE: "\<And>X. \<lbrakk>X \<subseteq> D; ?djnt X; E \<subseteq> X\<rbrakk> \<Longrightarrow> X = E"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    90
      using Zorn_Lemma [OF *] by safe blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    91
    show "\<exists>L. (L \<subseteq> K \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    92
               (\<forall>i\<in>L. B/2 ^ Suc n \<le> r i) \<and> ?djnt L \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    93
               (\<forall>i\<in>K. B/2 ^ Suc n < r i \<longrightarrow> (\<exists>j. j \<in> L \<and> ?cover_ar i j))) \<and> C \<subseteq> L"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    94
    proof (intro exI conjI ballI)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    95
      show "C \<union> E \<subseteq> K"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    96
        using D_def \<open>C \<subseteq> K\<close> \<open>E \<subseteq> D\<close> by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    97
      show "B/2 ^ Suc n \<le> r i" if i: "i \<in> C \<union> E" for i
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    98
        using i
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    99
      proof
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   100
        assume "i \<in> C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   101
        have "B/2 ^ Suc n \<le> B/2 ^ n"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   102
          using \<open>B > 0\<close> by (simp add: divide_simps)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   103
        also have "\<dots> \<le> r i"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   104
          using Ble \<open>i \<in> C\<close> by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   105
        finally show ?thesis .
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   106
      qed (use D_def \<open>E \<subseteq> D\<close> in auto)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   107
      show "?djnt (C \<union> E)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   108
        using D_def \<open>C \<subseteq> K\<close> \<open>E \<subseteq> D\<close> djntC djntE
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   109
        unfolding pairwise_def disjnt_def by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   110
    next
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   111
      fix i
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   112
      assume "i \<in> K"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   113
      show "B/2 ^ Suc n < r i \<longrightarrow> (\<exists>j. j \<in> C \<union> E \<and> ?cover_ar i j)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   114
      proof (cases "r i \<le> B/2^n")
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   115
        case False
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   116
        then show ?thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   117
          using cov_n \<open>i \<in> K\<close> by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   118
      next
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   119
        case True
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   120
        have "cball (a i) (r i) \<subseteq> ball (a j) (5 * r j)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   121
          if less: "B/2 ^ Suc n < r i" and j: "j \<in> C \<union> E"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   122
            and nondis: "\<not> disjnt (cball (a i) (r i)) (cball (a j) (r j))" for j
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   123
        proof -
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   124
          obtain x where x: "dist (a i) x \<le> r i" "dist (a j) x \<le> r j"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   125
            using nondis by (force simp: disjnt_def)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   126
          have "dist (a i) (a j) \<le> dist (a i) x + dist x (a j)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   127
            by (simp add: dist_triangle)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   128
          also have "\<dots> \<le> r i + r j"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   129
            by (metis add_mono_thms_linordered_semiring(1) dist_commute x)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   130
          finally have aij: "dist (a i) (a j) + r i < 5 * r j" if "r i < 2 * r j"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   131
            using that by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   132
          show ?thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   133
            using j
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   134
          proof
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   135
            assume "j \<in> C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   136
            have "B/2^n < 2 * r j"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   137
              using Ble True \<open>j \<in> C\<close> less by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   138
            with aij True show "cball (a i) (r i) \<subseteq> ball (a j) (5 * r j)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   139
              by (simp add: cball_subset_ball_iff)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   140
          next
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   141
            assume "j \<in> E"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   142
            then have "B/2 ^ n < 2 * r j"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   143
              using D_def \<open>E \<subseteq> D\<close> by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   144
            with True have "r i < 2 * r j"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   145
              by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   146
            with aij show "cball (a i) (r i) \<subseteq> ball (a j) (5 * r j)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   147
              by (simp add: cball_subset_ball_iff)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   148
          qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   149
        qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   150
      moreover have "\<exists>j. j \<in> C \<union> E \<and> \<not> disjnt (cball (a i) (r i)) (cball (a j) (r j))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   151
        if "B/2 ^ Suc n < r i"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   152
      proof (rule classical)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   153
        assume NON: "\<not> ?thesis"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   154
        show ?thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   155
        proof (cases "i \<in> D")
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   156
          case True
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   157
          have "insert i E = E"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   158
          proof (rule maximalE)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   159
            show "insert i E \<subseteq> D"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   160
              by (simp add: True \<open>E \<subseteq> D\<close>)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   161
            show "pairwise (\<lambda>i j. disjnt (cball (a i) (r i)) (cball (a j) (r j))) (insert i E)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   162
              using False NON by (auto simp: pairwise_insert djntE disjnt_sym)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   163
          qed auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   164
          then show ?thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   165
            using \<open>i \<in> K\<close> assms by fastforce
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   166
        next
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   167
          case False
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   168
          with that show ?thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   169
            by (auto simp: D_def disjnt_def \<open>i \<in> K\<close>)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   170
        qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   171
      qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   172
      ultimately
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   173
      show "B/2 ^ Suc n < r i \<longrightarrow>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   174
            (\<exists>j. j \<in> C \<union> E \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   175
                 \<not> disjnt (cball (a i) (r i)) (cball (a j) (r j)) \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   176
                 cball (a i) (r i) \<subseteq> ball (a j) (5 * r j))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   177
        by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   178
      qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   179
    qed auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   180
  qed (use assms in force)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   181
  then obtain F where FK: "\<And>n. F n \<subseteq> K"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   182
               and Fle: "\<And>n i. i \<in> F n \<Longrightarrow> B/2 ^ n \<le> r i"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   183
               and Fdjnt:  "\<And>n. ?djnt (F n)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   184
               and FF:  "\<And>n i. \<lbrakk>i \<in> K; B/2 ^ n < r i\<rbrakk>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   185
                        \<Longrightarrow> \<exists>j. j \<in> F n \<and> \<not> disjnt (cball (a i) (r i)) (cball (a j) (r j)) \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   186
                                cball (a i) (r i) \<subseteq> ball (a j) (5 * r j)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   187
               and inc:  "\<And>n. F n \<subseteq> F(Suc n)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   188
    by (force simp: all_conj_distrib)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   189
  show thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   190
  proof
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   191
    have *: "countable I"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   192
      if "I \<subseteq> K" and pw: "pairwise (\<lambda>i j. disjnt (cball (a i) (r i)) (cball (a j) (r j))) I" for I
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   193
    proof -
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   194
      show ?thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   195
      proof (rule countable_image_inj_on [of "\<lambda>i. cball(a i)(r i)"])
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   196
        show "countable ((\<lambda>i. cball (a i) (r i)) ` I)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   197
        proof (rule countable_disjoint_nonempty_interior_subsets)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   198
          show "disjoint ((\<lambda>i. cball (a i) (r i)) ` I)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   199
            by (auto simp: dest: pairwiseD [OF pw] intro: pairwise_imageI)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   200
          show "\<And>S. \<lbrakk>S \<in> (\<lambda>i. cball (a i) (r i)) ` I; interior S = {}\<rbrakk> \<Longrightarrow> S = {}"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   201
            using \<open>I \<subseteq> K\<close>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   202
            by (auto simp: not_less [symmetric])
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   203
        qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   204
      next
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   205
        have "\<And>x y. \<lbrakk>x \<in> I; y \<in> I; a x = a y; r x = r y\<rbrakk> \<Longrightarrow> x = y"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   206
          using pw \<open>I \<subseteq> K\<close> assms
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   207
          apply (clarsimp simp: pairwise_def disjnt_def)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   208
          by (metis assms centre_in_cball subsetD empty_iff inf.idem less_eq_real_def)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   209
        then show "inj_on (\<lambda>i. cball (a i) (r i)) I"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   210
          using \<open>I \<subseteq> K\<close> by (fastforce simp: inj_on_def cball_eq_cball_iff dest: assms)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   211
      qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   212
    qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   213
    show "(Union(range F)) \<subseteq> K"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   214
      using FK by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   215
    moreover show "pairwise (\<lambda>i j. disjnt (cball (a i) (r i)) (cball (a j) (r j))) (Union(range F))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   216
    proof (rule pairwise_chain_Union)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   217
      show "chain\<^sub>\<subseteq> (range F)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   218
        unfolding chain_subset_def by clarify (meson inc lift_Suc_mono_le linear subsetCE)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   219
    qed (use Fdjnt in blast)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   220
    ultimately show "countable (Union(range F))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   221
      by (blast intro: *)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   222
  next
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   223
    fix i assume "i \<in> K"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   224
    then obtain n where "(1/2) ^ n < r i / B"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   225
      using  \<open>B > 0\<close> assms real_arch_pow_inv by fastforce
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   226
    then have B2: "B/2 ^ n < r i"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   227
      using \<open>B > 0\<close> by (simp add: divide_simps)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   228
    have "0 < r i" "r i \<le> B"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   229
      by (auto simp: \<open>i \<in> K\<close> assms)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   230
    show "\<exists>j. j \<in> (Union(range F)) \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   231
          \<not> disjnt (cball (a i) (r i)) (cball (a j) (r j)) \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   232
          cball (a i) (r i) \<subseteq> ball (a j) (5 * r j)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   233
      using FF [OF \<open>i \<in> K\<close> B2] by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   234
  qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   235
qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   236
69683
8b3458ca0762 subsection is always %important
immler
parents: 69313
diff changeset
   237
subsection\<open>Vitali covering theorem\<close>
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   238
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
   239
lemma%unimportant Vitali_covering_lemma_cballs:
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   240
  fixes a :: "'a \<Rightarrow> 'b::euclidean_space"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   241
  assumes S: "S \<subseteq> (\<Union>i\<in>K. cball (a i) (r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   242
      and r: "\<And>i. i \<in> K \<Longrightarrow> 0 < r i \<and> r i \<le> B"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   243
  obtains C where "countable C" "C \<subseteq> K"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   244
     "pairwise (\<lambda>i j. disjnt (cball (a i) (r i)) (cball (a j) (r j))) C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   245
     "S \<subseteq> (\<Union>i\<in>C. cball (a i) (5 * r i))"
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
   246
proof%unimportant -
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   247
  obtain C where C: "countable C" "C \<subseteq> K"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   248
                    "pairwise (\<lambda>i j. disjnt (cball (a i) (r i)) (cball (a j) (r j))) C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   249
           and cov: "\<And>i. i \<in> K \<Longrightarrow> \<exists>j. j \<in> C \<and> \<not> disjnt (cball (a i) (r i)) (cball (a j) (r j)) \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   250
                        cball (a i) (r i) \<subseteq> ball (a j) (5 * r j)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   251
    by (rule Vitali_covering_lemma_cballs_balls [OF r, where a=a]) (blast intro: that)+
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   252
  show ?thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   253
  proof
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   254
    have "(\<Union>i\<in>K. cball (a i) (r i)) \<subseteq> (\<Union>i\<in>C. cball (a i) (5 * r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   255
      using cov subset_iff by fastforce
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   256
    with S show "S \<subseteq> (\<Union>i\<in>C. cball (a i) (5 * r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   257
      by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   258
  qed (use C in auto)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   259
qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   260
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
   261
lemma%important Vitali_covering_lemma_balls:
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   262
  fixes a :: "'a \<Rightarrow> 'b::euclidean_space"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   263
  assumes S: "S \<subseteq> (\<Union>i\<in>K. ball (a i) (r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   264
      and r: "\<And>i. i \<in> K \<Longrightarrow> 0 < r i \<and> r i \<le> B"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   265
  obtains C where "countable C" "C \<subseteq> K"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   266
     "pairwise (\<lambda>i j. disjnt (ball (a i) (r i)) (ball (a j) (r j))) C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   267
     "S \<subseteq> (\<Union>i\<in>C. ball (a i) (5 * r i))"
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
   268
proof%unimportant -
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   269
  obtain C where C: "countable C" "C \<subseteq> K"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   270
           and pw:  "pairwise (\<lambda>i j. disjnt (cball (a i) (r i)) (cball (a j) (r j))) C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   271
           and cov: "\<And>i. i \<in> K \<Longrightarrow> \<exists>j. j \<in> C \<and> \<not> disjnt (cball (a i) (r i)) (cball (a j) (r j)) \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   272
                        cball (a i) (r i) \<subseteq> ball (a j) (5 * r j)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   273
    by (rule Vitali_covering_lemma_cballs_balls [OF r, where a=a]) (blast intro: that)+
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   274
  show ?thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   275
  proof
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   276
    have "(\<Union>i\<in>K. ball (a i) (r i)) \<subseteq> (\<Union>i\<in>C. ball (a i) (5 * r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   277
      using cov subset_iff
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   278
      by clarsimp (meson less_imp_le mem_ball mem_cball subset_eq)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   279
    with S show "S \<subseteq> (\<Union>i\<in>C. ball (a i) (5 * r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   280
      by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   281
    show "pairwise (\<lambda>i j. disjnt (ball (a i) (r i)) (ball (a j) (r j))) C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   282
      using pw
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   283
      by (clarsimp simp: pairwise_def) (meson ball_subset_cball disjnt_subset1 disjnt_subset2)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   284
  qed (use C in auto)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   285
qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   286
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   287
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
   288
proposition%important Vitali_covering_theorem_cballs:
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   289
  fixes a :: "'a \<Rightarrow> 'n::euclidean_space"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   290
  assumes r: "\<And>i. i \<in> K \<Longrightarrow> 0 < r i"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   291
      and S: "\<And>x d. \<lbrakk>x \<in> S; 0 < d\<rbrakk>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   292
                     \<Longrightarrow> \<exists>i. i \<in> K \<and> x \<in> cball (a i) (r i) \<and> r i < d"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   293
  obtains C where "countable C" "C \<subseteq> K"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   294
     "pairwise (\<lambda>i j. disjnt (cball (a i) (r i)) (cball (a j) (r j))) C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   295
     "negligible(S - (\<Union>i \<in> C. cball (a i) (r i)))"
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
   296
proof%unimportant -
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   297
  let ?\<mu> = "measure lebesgue"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   298
  have *: "\<exists>C. countable C \<and> C \<subseteq> K \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   299
            pairwise (\<lambda>i j. disjnt (cball (a i) (r i)) (cball (a j) (r j))) C \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   300
            negligible(S - (\<Union>i \<in> C. cball (a i) (r i)))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   301
    if r01: "\<And>i. i \<in> K \<Longrightarrow> 0 < r i \<and> r i \<le> 1"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   302
       and Sd: "\<And>x d. \<lbrakk>x \<in> S; 0 < d\<rbrakk> \<Longrightarrow> \<exists>i. i \<in> K \<and> x \<in> cball (a i) (r i) \<and> r i < d"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   303
     for K r and a :: "'a \<Rightarrow> 'n"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   304
  proof -
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   305
    obtain C where C: "countable C" "C \<subseteq> K"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   306
      and pwC: "pairwise (\<lambda>i j. disjnt (cball (a i) (r i)) (cball (a j) (r j))) C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   307
      and cov: "\<And>i. i \<in> K \<Longrightarrow> \<exists>j. j \<in> C \<and> \<not> disjnt (cball (a i) (r i)) (cball (a j) (r j)) \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   308
                        cball (a i) (r i) \<subseteq> ball (a j) (5 * r j)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   309
      by (rule Vitali_covering_lemma_cballs_balls [of K r 1 a]) (auto simp: r01)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   310
    have ar_injective: "\<And>x y. \<lbrakk>x \<in> C; y \<in> C; a x = a y; r x = r y\<rbrakk> \<Longrightarrow> x = y"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   311
      using \<open>C \<subseteq> K\<close> pwC cov
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   312
      by (force simp: pairwise_def disjnt_def)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   313
    show ?thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   314
    proof (intro exI conjI)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   315
      show "negligible (S - (\<Union>i\<in>C. cball (a i) (r i)))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   316
      proof (clarsimp simp: negligible_on_intervals [of "S-T" for T])
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   317
        fix l u
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   318
        show "negligible ((S - (\<Union>i\<in>C. cball (a i) (r i))) \<inter> cbox l u)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   319
          unfolding negligible_outer_le
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   320
        proof (intro allI impI)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   321
          fix e::real
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   322
          assume "e > 0"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   323
          define D where "D \<equiv> {i \<in> C. \<not> disjnt (ball(a i) (5 * r i)) (cbox l u)}"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   324
          then have "D \<subseteq> C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   325
            by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   326
          have "countable D"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   327
            unfolding D_def using \<open>countable C\<close> by simp
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   328
          have UD: "(\<Union>i\<in>D. cball (a i) (r i)) \<in> lmeasurable"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   329
          proof (rule fmeasurableI2)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   330
            show "cbox (l - 6 *\<^sub>R One) (u + 6 *\<^sub>R One) \<in> lmeasurable"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   331
              by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   332
            have "y \<in> cbox (l - 6 *\<^sub>R One) (u + 6 *\<^sub>R One)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   333
              if "i \<in> C" and x: "x \<in> cbox l u" and ai: "dist (a i) y \<le> r i" "dist (a i) x < 5 * r i"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   334
              for i x y
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   335
            proof -
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   336
              have d6: "dist y x < 6 * r i"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   337
                using dist_triangle3 [of y x "a i"] that by linarith
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   338
              show ?thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   339
              proof (clarsimp simp: mem_box algebra_simps)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   340
                fix j::'n
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   341
                assume j: "j \<in> Basis"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   342
                then have xyj: "\<bar>x \<bullet> j - y \<bullet> j\<bar> \<le> dist y x"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   343
                  by (metis Basis_le_norm dist_commute dist_norm inner_diff_left)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   344
                have "l \<bullet> j \<le> x \<bullet> j"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   345
                  using \<open>j \<in> Basis\<close> mem_box \<open>x \<in> cbox l u\<close> by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   346
                also have "\<dots> \<le> y \<bullet> j + 6 * r i"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   347
                  using d6 xyj by (auto simp: algebra_simps)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   348
                also have "\<dots> \<le> y \<bullet> j + 6"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   349
                  using r01 [of i] \<open>C \<subseteq> K\<close> \<open>i \<in> C\<close> by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   350
                finally have l: "l \<bullet> j \<le> y \<bullet> j + 6" .
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   351
                have "y \<bullet> j \<le> x \<bullet> j + 6 * r i"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   352
                  using d6 xyj by (auto simp: algebra_simps)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   353
                also have "\<dots> \<le> u \<bullet> j + 6 * r i"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   354
                  using j  x by (auto simp: mem_box)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   355
                also have "\<dots> \<le> u \<bullet> j + 6"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   356
                  using r01 [of i] \<open>C \<subseteq> K\<close> \<open>i \<in> C\<close> by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   357
                finally have u: "y \<bullet> j \<le> u \<bullet> j + 6" .
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   358
                show "l \<bullet> j \<le> y \<bullet> j + 6 \<and> y \<bullet> j \<le> u \<bullet> j + 6"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   359
                  using l u by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   360
              qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   361
            qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   362
            then show "(\<Union>i\<in>D. cball (a i) (r i)) \<subseteq> cbox (l - 6 *\<^sub>R One) (u + 6 *\<^sub>R One)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   363
              by (force simp: D_def disjnt_def)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   364
            show "(\<Union>i\<in>D. cball (a i) (r i)) \<in> sets lebesgue"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   365
              using \<open>countable D\<close> by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   366
          qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   367
          obtain D1 where "D1 \<subseteq> D" "finite D1"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   368
            and measD1: "?\<mu> (\<Union>i\<in>D. cball (a i) (r i)) - e / 5 ^ DIM('n) < ?\<mu> (\<Union>i\<in>D1. cball (a i) (r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   369
          proof (rule measure_countable_Union_approachable [where e = "e / 5 ^ (DIM('n))"])
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   370
            show "countable ((\<lambda>i. cball (a i) (r i)) ` D)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   371
              using \<open>countable D\<close> by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   372
            show "\<And>d. d \<in> (\<lambda>i. cball (a i) (r i)) ` D \<Longrightarrow> d \<in> lmeasurable"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   373
              by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   374
            show "\<And>D'. \<lbrakk>D' \<subseteq> (\<lambda>i. cball (a i) (r i)) ` D; finite D'\<rbrakk> \<Longrightarrow> ?\<mu> (\<Union>D') \<le> ?\<mu> (\<Union>i\<in>D. cball (a i) (r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   375
              by (fastforce simp add: intro!: measure_mono_fmeasurable UD)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   376
          qed (use \<open>e > 0\<close> in \<open>auto dest: finite_subset_image\<close>)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   377
          show "\<exists>T. (S - (\<Union>i\<in>C. cball (a i) (r i))) \<inter>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   378
                    cbox l u \<subseteq> T \<and> T \<in> lmeasurable \<and> ?\<mu> T \<le> e"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   379
          proof (intro exI conjI)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   380
            show "(S - (\<Union>i\<in>C. cball (a i) (r i))) \<inter> cbox l u \<subseteq> (\<Union>i\<in>D - D1. ball (a i) (5 * r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   381
            proof clarify
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   382
              fix x
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   383
              assume x: "x \<in> cbox l u" "x \<in> S" "x \<notin> (\<Union>i\<in>C. cball (a i) (r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   384
              have "closed (\<Union>i\<in>D1. cball (a i) (r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   385
                using \<open>finite D1\<close> by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   386
              moreover have "x \<notin> (\<Union>j\<in>D1. cball (a j) (r j))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   387
                using x \<open>D1 \<subseteq> D\<close> unfolding D_def by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   388
              ultimately obtain q where "q > 0" and q: "ball x q \<subseteq> - (\<Union>i\<in>D1. cball (a i) (r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   389
                by (metis (no_types, lifting) ComplI open_contains_ball closed_def)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   390
              obtain i where "i \<in> K" and xi: "x \<in> cball (a i) (r i)" and ri: "r i < q/2"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   391
                using Sd [OF \<open>x \<in> S\<close>] \<open>q > 0\<close> half_gt_zero by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   392
              then obtain j where "j \<in> C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   393
                             and nondisj: "\<not> disjnt (cball (a i) (r i)) (cball (a j) (r j))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   394
                             and sub5j:  "cball (a i) (r i) \<subseteq> ball (a j) (5 * r j)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   395
                using cov [OF \<open>i \<in> K\<close>] by metis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   396
              show "x \<in> (\<Union>i\<in>D - D1. ball (a i) (5 * r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   397
              proof
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   398
                show "j \<in> D - D1"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   399
                proof
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   400
                  show "j \<in> D"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   401
                    using \<open>j \<in> C\<close> sub5j \<open>x \<in> cbox l u\<close> xi by (auto simp: D_def disjnt_def)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   402
                  obtain y where yi: "dist (a i) y \<le> r i" and yj: "dist (a j) y \<le> r j"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   403
                    using disjnt_def nondisj by fastforce
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   404
                  have "dist x y \<le> r i + r i"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   405
                    by (metis add_mono dist_commute dist_triangle_le mem_cball xi yi)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   406
                  also have "\<dots> < q"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   407
                    using ri by linarith
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   408
                  finally have "y \<in> ball x q"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   409
                    by simp
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   410
                  with yj q show "j \<notin> D1"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   411
                    by (auto simp: disjoint_UN_iff)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   412
                qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   413
                show "x \<in> ball (a j) (5 * r j)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   414
                  using xi sub5j by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   415
              qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   416
            qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   417
            have 3: "?\<mu> (\<Union>i\<in>D2. ball (a i) (5 * r i)) \<le> e"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   418
              if D2: "D2 \<subseteq> D - D1" and "finite D2" for D2
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   419
            proof -
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   420
              have rgt0: "0 < r i" if "i \<in> D2" for i
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   421
                using \<open>C \<subseteq> K\<close> D_def \<open>i \<in> D2\<close> D2 r01
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   422
                by (simp add: subset_iff)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   423
              then have inj: "inj_on (\<lambda>i. ball (a i) (5 * r i)) D2"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   424
                using \<open>C \<subseteq> K\<close> D2 by (fastforce simp: inj_on_def D_def ball_eq_ball_iff intro: ar_injective)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   425
              have "?\<mu> (\<Union>i\<in>D2. ball (a i) (5 * r i)) \<le> sum (?\<mu>) ((\<lambda>i. ball (a i) (5 * r i)) ` D2)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   426
                using that by (force intro: measure_Union_le)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   427
              also have "\<dots>  = (\<Sum>i\<in>D2. ?\<mu> (ball (a i) (5 * r i)))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   428
                by (simp add: comm_monoid_add_class.sum.reindex [OF inj])
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   429
              also have "\<dots> = (\<Sum>i\<in>D2. 5 ^ DIM('n) * ?\<mu> (ball (a i) (r i)))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   430
              proof (rule sum.cong [OF refl])
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   431
                fix i
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   432
                assume "i \<in> D2"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   433
                show "?\<mu> (ball (a i) (5 * r i)) = 5 ^ DIM('n) * ?\<mu> (ball (a i) (r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   434
                  using rgt0 [OF \<open>i \<in> D2\<close>] by (simp add: content_ball)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   435
              qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   436
              also have "\<dots> = (\<Sum>i\<in>D2. ?\<mu> (ball (a i) (r i))) * 5 ^ DIM('n)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   437
                by (simp add: sum_distrib_left mult.commute)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   438
              finally have "?\<mu> (\<Union>i\<in>D2. ball (a i) (5 * r i)) \<le> (\<Sum>i\<in>D2. ?\<mu> (ball (a i) (r i))) * 5 ^ DIM('n)" .
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   439
              moreover have "(\<Sum>i\<in>D2. ?\<mu> (ball (a i) (r i))) \<le> e / 5 ^ DIM('n)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   440
              proof -
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   441
                have D12_dis: "((\<Union>x\<in>D1. cball (a x) (r x)) \<inter> (\<Union>x\<in>D2. cball (a x) (r x))) \<le> {}"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   442
                proof clarify
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   443
                  fix w d1 d2
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   444
                  assume "d1 \<in> D1" "w d1 d2 \<in> cball (a d1) (r d1)" "d2 \<in> D2" "w d1 d2 \<in> cball (a d2) (r d2)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   445
                  then show "w d1 d2 \<in> {}"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   446
                    by (metis DiffE disjnt_iff subsetCE D2 \<open>D1 \<subseteq> D\<close> \<open>D \<subseteq> C\<close> pairwiseD [OF pwC, of d1 d2])
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   447
                qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   448
                have inj: "inj_on (\<lambda>i. cball (a i) (r i)) D2"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   449
                  using rgt0 D2 \<open>D \<subseteq> C\<close> by (force simp: inj_on_def cball_eq_cball_iff intro!: ar_injective)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   450
                have ds: "disjoint ((\<lambda>i. cball (a i) (r i)) ` D2)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   451
                  using D2 \<open>D \<subseteq> C\<close> by (auto intro: pairwiseI pairwiseD [OF pwC])
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   452
                have "(\<Sum>i\<in>D2. ?\<mu> (ball (a i) (r i))) = (\<Sum>i\<in>D2. ?\<mu> (cball (a i) (r i)))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   453
                  using rgt0 by (simp add: content_ball content_cball less_eq_real_def)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   454
                also have "\<dots> = sum ?\<mu> ((\<lambda>i. cball (a i) (r i)) ` D2)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   455
                  by (simp add: comm_monoid_add_class.sum.reindex [OF inj])
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   456
                also have "\<dots> = ?\<mu> (\<Union>i\<in>D2. cball (a i) (r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   457
                  by (auto intro: measure_Union' [symmetric] ds simp add: \<open>finite D2\<close>)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   458
                finally have "?\<mu> (\<Union>i\<in>D1. cball (a i) (r i)) + (\<Sum>i\<in>D2. ?\<mu> (ball (a i) (r i))) =
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   459
                              ?\<mu> (\<Union>i\<in>D1. cball (a i) (r i)) + ?\<mu> (\<Union>i\<in>D2. cball (a i) (r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   460
                  by simp
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   461
                also have "\<dots> = ?\<mu> (\<Union>i \<in> D1 \<union> D2. cball (a i) (r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   462
                  using D12_dis by (simp add: measure_Un3 \<open>finite D1\<close> \<open>finite D2\<close> fmeasurable.finite_UN)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   463
                also have "\<dots> \<le> ?\<mu> (\<Union>i\<in>D. cball (a i) (r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   464
                  using D2 \<open>D1 \<subseteq> D\<close> by (fastforce intro!: measure_mono_fmeasurable [OF _ _ UD] \<open>finite D1\<close> \<open>finite D2\<close>)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   465
                finally have "?\<mu> (\<Union>i\<in>D1. cball (a i) (r i)) + (\<Sum>i\<in>D2. ?\<mu> (ball (a i) (r i))) \<le> ?\<mu> (\<Union>i\<in>D. cball (a i) (r i))" .
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   466
                with measD1 show ?thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   467
                  by simp
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   468
              qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   469
                ultimately show ?thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   470
                  by (simp add: divide_simps)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   471
            qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   472
            have co: "countable (D - D1)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   473
              by (simp add: \<open>countable D\<close>)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   474
            show "(\<Union>i\<in>D - D1. ball (a i) (5 * r i)) \<in> lmeasurable"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   475
              using \<open>e > 0\<close> by (auto simp: fmeasurable_UN_bound [OF co _ 3])
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   476
            show "?\<mu> (\<Union>i\<in>D - D1. ball (a i) (5 * r i)) \<le> e"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   477
              using \<open>e > 0\<close> by (auto simp: measure_UN_bound [OF co _ 3])
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   478
          qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   479
        qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   480
      qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   481
    qed (use C pwC in auto)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   482
  qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   483
  define K' where "K' \<equiv> {i \<in> K. r i \<le> 1}"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   484
  have 1: "\<And>i. i \<in> K' \<Longrightarrow> 0 < r i \<and> r i \<le> 1"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   485
    using K'_def r by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   486
  have 2: "\<exists>i. i \<in> K' \<and> x \<in> cball (a i) (r i) \<and> r i < d"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   487
    if "x \<in> S \<and> 0 < d" for x d
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   488
    using that by (auto simp: K'_def dest!: S [where d = "min d 1"])
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   489
  have "K' \<subseteq> K"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   490
    using K'_def by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   491
  then show thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   492
    using * [OF 1 2] that by fastforce
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   493
qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   494
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   495
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
   496
proposition%important Vitali_covering_theorem_balls:
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   497
  fixes a :: "'a \<Rightarrow> 'b::euclidean_space"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   498
  assumes S: "\<And>x d. \<lbrakk>x \<in> S; 0 < d\<rbrakk> \<Longrightarrow> \<exists>i. i \<in> K \<and> x \<in> ball (a i) (r i) \<and> r i < d"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   499
  obtains C where "countable C" "C \<subseteq> K"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   500
     "pairwise (\<lambda>i j. disjnt (ball (a i) (r i)) (ball (a j) (r j))) C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   501
     "negligible(S - (\<Union>i \<in> C. ball (a i) (r i)))"
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
   502
proof%unimportant -
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   503
  have 1: "\<exists>i. i \<in> {i \<in> K. 0 < r i} \<and> x \<in> cball (a i) (r i) \<and> r i < d"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   504
         if xd: "x \<in> S" "d > 0" for x d
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   505
    by (metis (mono_tags, lifting) assms ball_eq_empty less_eq_real_def mem_Collect_eq mem_ball mem_cball not_le xd(1) xd(2))
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   506
  obtain C where C: "countable C" "C \<subseteq> K"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   507
             and pw: "pairwise (\<lambda>i j. disjnt (cball (a i) (r i)) (cball (a j) (r j))) C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   508
             and neg: "negligible(S - (\<Union>i \<in> C. cball (a i) (r i)))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   509
    by (rule Vitali_covering_theorem_cballs [of "{i \<in> K. 0 < r i}" r S a, OF _ 1]) auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   510
  show thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   511
  proof
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   512
    show "pairwise (\<lambda>i j. disjnt (ball (a i) (r i)) (ball (a j) (r j))) C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   513
      apply (rule pairwise_mono [OF pw])
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   514
      apply (auto simp: disjnt_def)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   515
      by (meson disjoint_iff_not_equal less_imp_le mem_cball)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   516
    have "negligible (\<Union>i\<in>C. sphere (a i) (r i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   517
      by (auto intro: negligible_sphere \<open>countable C\<close>)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   518
    then have "negligible (S - (\<Union>i \<in> C. cball(a i)(r i)) \<union> (\<Union>i \<in> C. sphere (a i) (r i)))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   519
      by (rule negligible_Un [OF neg])
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   520
    then show "negligible (S - (\<Union>i\<in>C. ball (a i) (r i)))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   521
      by (rule negligible_subset) force
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   522
  qed (use C in auto)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   523
qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   524
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   525
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
   526
lemma%unimportant negligible_eq_zero_density_alt:
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   527
     "negligible S \<longleftrightarrow>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   528
      (\<forall>x \<in> S. \<forall>e > 0.
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   529
        \<exists>d U. 0 < d \<and> d \<le> e \<and> S \<inter> ball x d \<subseteq> U \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   530
              U \<in> lmeasurable \<and> measure lebesgue U < e * measure lebesgue (ball x d))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   531
     (is "_ = (\<forall>x \<in> S. \<forall>e > 0. ?Q x e)")
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   532
proof (intro iffI ballI allI impI)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   533
  fix x and e :: real
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   534
  assume "negligible S" and "x \<in> S" and "e > 0"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   535
  then
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   536
  show "\<exists>d U. 0 < d \<and> d \<le> e \<and> S \<inter> ball x d \<subseteq> U \<and> U \<in> lmeasurable \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   537
              measure lebesgue U < e * measure lebesgue (ball x d)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   538
    apply (rule_tac x=e in exI)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   539
    apply (rule_tac x="S \<inter> ball x e" in exI)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   540
    apply (auto simp: negligible_imp_measurable negligible_Int negligible_imp_measure0 zero_less_measure_iff)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   541
    done
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   542
next
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   543
  assume R [rule_format]: "\<forall>x \<in> S. \<forall>e > 0. ?Q x e"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   544
  let ?\<mu> = "measure lebesgue"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   545
  have "\<exists>U. openin (subtopology euclidean S) U \<and> z \<in> U \<and> negligible U"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   546
    if "z \<in> S" for z
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   547
  proof (intro exI conjI)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   548
    show "openin (subtopology euclidean S) (S \<inter> ball z 1)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   549
      by (simp add: openin_open_Int)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   550
    show "z \<in> S \<inter> ball z 1"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   551
      using \<open>z \<in> S\<close> by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   552
    show "negligible (S \<inter> ball z 1)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   553
    proof (clarsimp simp: negligible_outer_le)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   554
      fix e :: "real"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   555
      assume "e > 0"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   556
      let ?K = "{(x,d). x \<in> S \<and> 0 < d \<and> ball x d \<subseteq> ball z 1 \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   557
                     (\<exists>U. S \<inter> ball x d \<subseteq> U \<and> U \<in> lmeasurable \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   558
                         ?\<mu> U < e / ?\<mu> (ball z 1) * ?\<mu> (ball x d))}"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   559
      obtain C where "countable C" and Csub: "C \<subseteq> ?K"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   560
        and pwC: "pairwise (\<lambda>i j. disjnt (ball (fst i) (snd i)) (ball (fst j) (snd j))) C"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   561
        and negC: "negligible((S \<inter> ball z 1) - (\<Union>i \<in> C. ball (fst i) (snd i)))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   562
      proof (rule Vitali_covering_theorem_balls [of "S \<inter> ball z 1" ?K fst snd])
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   563
        fix x and d :: "real"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   564
        assume x: "x \<in> S \<inter> ball z 1" and "d > 0"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   565
        obtain k where "k > 0" and k: "ball x k \<subseteq> ball z 1"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   566
          by (meson Int_iff open_ball openE x)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   567
        let ?\<epsilon> = "min (e / ?\<mu> (ball z 1) / 2) (min (d / 2) k)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   568
        obtain r U where r: "r > 0" "r \<le> ?\<epsilon>" and U: "S \<inter> ball x r \<subseteq> U" "U \<in> lmeasurable"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   569
          and mU: "?\<mu> U < ?\<epsilon> * ?\<mu> (ball x r)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   570
          using R [of x ?\<epsilon>] \<open>d > 0\<close> \<open>e > 0\<close> \<open>k > 0\<close> x by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   571
        show "\<exists>i. i \<in> ?K \<and> x \<in> ball (fst i) (snd i) \<and> snd i < d"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   572
        proof (rule exI [of _ "(x,r)"], simp, intro conjI exI)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   573
          have "ball x r \<subseteq> ball x k"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   574
            using r by (simp add: ball_subset_ball_iff)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   575
          also have "\<dots> \<subseteq> ball z 1"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   576
            using ball_subset_ball_iff k by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   577
          finally show "ball x r \<subseteq> ball z 1" .
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   578
          have "?\<epsilon> * ?\<mu> (ball x r) \<le> e * content (ball x r) / content (ball z 1)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   579
            using r \<open>e > 0\<close> by (simp add: ord_class.min_def divide_simps)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   580
          with mU show "?\<mu> U < e * content (ball x r) / content (ball z 1)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   581
            by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   582
        qed (use r U x in auto)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   583
      qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   584
      have "\<exists>U. case p of (x,d) \<Rightarrow> S \<inter> ball x d \<subseteq> U \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   585
                        U \<in> lmeasurable \<and> ?\<mu> U < e / ?\<mu> (ball z 1) * ?\<mu> (ball x d)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   586
        if "p \<in> C" for p
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   587
        using that Csub by auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   588
      then obtain U where U:
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   589
                "\<And>p. p \<in> C \<Longrightarrow>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   590
                       case p of (x,d) \<Rightarrow> S \<inter> ball x d \<subseteq> U p \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   591
                        U p \<in> lmeasurable \<and> ?\<mu> (U p) < e / ?\<mu> (ball z 1) * ?\<mu> (ball x d)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   592
        by (rule that [OF someI_ex])
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   593
      let ?T = "((S \<inter> ball z 1) - (\<Union>(x,d)\<in>C. ball x d)) \<union> \<Union>(U ` C)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   594
      show "\<exists>T. S \<inter> ball z 1 \<subseteq> T \<and> T \<in> lmeasurable \<and> ?\<mu> T \<le> e"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   595
      proof (intro exI conjI)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   596
        show "S \<inter> ball z 1 \<subseteq> ?T"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   597
          using U by fastforce
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   598
        { have Um: "U i \<in> lmeasurable" if "i \<in> C" for i
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   599
            using that U by blast
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   600
          have lee: "?\<mu> (\<Union>i\<in>I. U i) \<le> e" if "I \<subseteq> C" "finite I" for I
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   601
          proof -
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   602
            have "?\<mu> (\<Union>(x,d)\<in>I. ball x d) \<le> ?\<mu> (ball z 1)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   603
              apply (rule measure_mono_fmeasurable)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   604
              using \<open>I \<subseteq> C\<close> \<open>finite I\<close> Csub by (force simp: prod.case_eq_if sets.finite_UN)+
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   605
            then have le1: "(?\<mu> (\<Union>(x,d)\<in>I. ball x d) / ?\<mu> (ball z 1)) \<le> 1"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   606
              by simp
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   607
            have "?\<mu> (\<Union>i\<in>I. U i) \<le> (\<Sum>i\<in>I. ?\<mu> (U i))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   608
              using that U by (blast intro: measure_UNION_le)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   609
            also have "\<dots> \<le> (\<Sum>(x,r)\<in>I. e / ?\<mu> (ball z 1) * ?\<mu> (ball x r))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   610
              by (rule sum_mono) (use \<open>I \<subseteq> C\<close> U in force)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   611
            also have "\<dots> = (e / ?\<mu> (ball z 1)) * (\<Sum>(x,r)\<in>I. ?\<mu> (ball x r))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   612
              by (simp add: case_prod_app prod.case_distrib sum_distrib_left)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   613
            also have "\<dots> = e * (?\<mu> (\<Union>(x,r)\<in>I. ball x r) / ?\<mu> (ball z 1))"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   614
              apply (subst measure_UNION')
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   615
              using that pwC by (auto simp: case_prod_unfold elim: pairwise_mono)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   616
            also have "\<dots> \<le> e"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   617
              by (metis mult.commute mult.left_neutral real_mult_le_cancel_iff1 \<open>e > 0\<close> le1)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   618
            finally show ?thesis .
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   619
          qed
69313
b021008c5397 removed legacy input syntax
haftmann
parents: 68833
diff changeset
   620
          have "\<Union>(U ` C) \<in> lmeasurable" "?\<mu> (\<Union>(U ` C)) \<le> e"
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   621
            using \<open>e > 0\<close> Um lee
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   622
            by(auto intro!: fmeasurable_UN_bound [OF \<open>countable C\<close>] measure_UN_bound [OF \<open>countable C\<close>])
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   623
        }
69313
b021008c5397 removed legacy input syntax
haftmann
parents: 68833
diff changeset
   624
        moreover have "?\<mu> ?T = ?\<mu> (\<Union>(U ` C))"
b021008c5397 removed legacy input syntax
haftmann
parents: 68833
diff changeset
   625
        proof (rule measure_negligible_symdiff [OF \<open>\<Union>(U ` C) \<in> lmeasurable\<close>])
b021008c5397 removed legacy input syntax
haftmann
parents: 68833
diff changeset
   626
          show "negligible((\<Union>(U ` C) - ?T) \<union> (?T - \<Union>(U ` C)))"
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   627
            by (force intro!: negligible_subset [OF negC])
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   628
        qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   629
        ultimately show "?T \<in> lmeasurable"  "?\<mu> ?T \<le> e"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   630
          by (simp_all add: fmeasurable.Un negC negligible_imp_measurable split_def)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   631
      qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   632
    qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   633
  qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   634
  with locally_negligible_alt show "negligible S"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   635
    by metis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   636
qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   637
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
   638
proposition%important negligible_eq_zero_density:
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   639
   "negligible S \<longleftrightarrow>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   640
    (\<forall>x\<in>S. \<forall>r>0. \<forall>e>0. \<exists>d. 0 < d \<and> d \<le> r \<and>
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   641
                   (\<exists>U. S \<inter> ball x d \<subseteq> U \<and> U \<in> lmeasurable \<and> measure lebesgue U < e * measure lebesgue (ball x d)))"
68833
fde093888c16 tagged 21 theories in the Analysis library for the manual
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents: 68017
diff changeset
   642
proof%unimportant -
67996
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   643
  let ?Q = "\<lambda>x d e. \<exists>U. S \<inter> ball x d \<subseteq> U \<and> U \<in> lmeasurable \<and> measure lebesgue U < e * content (ball x d)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   644
  have "(\<forall>e>0. \<exists>d>0. d \<le> e \<and> ?Q x d e) = (\<forall>r>0. \<forall>e>0. \<exists>d>0. d \<le> r \<and> ?Q x d e)"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   645
    if "x \<in> S" for x
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   646
  proof (intro iffI allI impI)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   647
    fix r :: "real" and e :: "real"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   648
    assume L [rule_format]: "\<forall>e>0. \<exists>d>0. d \<le> e \<and> ?Q x d e" and "r > 0" "e > 0"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   649
    show "\<exists>d>0. d \<le> r \<and> ?Q x d e"
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   650
      using L [of "min r e"] apply (rule ex_forward)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   651
      using \<open>r > 0\<close> \<open>e > 0\<close>  by (auto intro: less_le_trans elim!: ex_forward)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   652
  qed auto
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   653
  then show ?thesis
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   654
    by (force simp: negligible_eq_zero_density_alt)
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   655
qed
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   656
6a9d1b31a7c5 Vitali covering theorem
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   657
end