src/HOL/Analysis/Lebesgue_Measure.thy
changeset 64267 b9a1486e79be
parent 64008 17a20ca86d62
child 64272 f76b6dda2e56
equal deleted inserted replaced
64265:8eb6365f5916 64267:b9a1486e79be
    80           by (intro Min_in) auto
    80           by (intro Min_in) auto
    81         then obtain m where m: "m \<in> S" "l m < r m" "l m = Min (l ` {i\<in>S. l i < r i})"
    81         then obtain m where m: "m \<in> S" "l m < r m" "l m = Min (l ` {i\<in>S. l i < r i})"
    82           by fastforce
    82           by fastforce
    83 
    83 
    84         have "(\<Sum>i\<in>S. F (r i) - F (l i)) = (F (r m) - F (l m)) + (\<Sum>i\<in>S - {m}. F (r i) - F (l i))"
    84         have "(\<Sum>i\<in>S. F (r i) - F (l i)) = (F (r m) - F (l m)) + (\<Sum>i\<in>S - {m}. F (r i) - F (l i))"
    85           using m psubset by (intro setsum.remove) auto
    85           using m psubset by (intro sum.remove) auto
    86         also have "(\<Sum>i\<in>S - {m}. F (r i) - F (l i)) \<le> F b - F (r m)"
    86         also have "(\<Sum>i\<in>S - {m}. F (r i) - F (l i)) \<le> F b - F (r m)"
    87         proof (intro psubset.IH)
    87         proof (intro psubset.IH)
    88           show "S - {m} \<subset> S"
    88           show "S - {m} \<subset> S"
    89             using \<open>m\<in>S\<close> by auto
    89             using \<open>m\<in>S\<close> by auto
    90           show "r m \<le> b"
    90           show "r m \<le> b"
   142             done
   142             done
   143           with \<open>j \<in> S\<close> have "F v - F u \<le> (\<Sum>i\<in>S - {j}. F (r i) - F (l i))"
   143           with \<open>j \<in> S\<close> have "F v - F u \<le> (\<Sum>i\<in>S - {j}. F (r i) - F (l i))"
   144             by (intro psubset) auto
   144             by (intro psubset) auto
   145           also have "\<dots> \<le> (\<Sum>i\<in>S. F (r i) - F (l i))"
   145           also have "\<dots> \<le> (\<Sum>i\<in>S. F (r i) - F (l i))"
   146             using psubset.prems
   146             using psubset.prems
   147             by (intro setsum_mono2 psubset) (auto intro: less_imp_le)
   147             by (intro sum_mono2 psubset) (auto intro: less_imp_le)
   148           finally show ?thesis .
   148           finally show ?thesis .
   149         next
   149         next
   150           assume "\<not> ?R"
   150           assume "\<not> ?R"
   151           then have j: "u \<le> r j" "l j \<le> v" "\<And>i. i \<in> S - {j} \<Longrightarrow> r i < r j \<or> l i > l j"
   151           then have j: "u \<le> r j" "l j \<le> v" "\<And>i. i \<in> S - {j} \<Longrightarrow> r i < r j \<or> l i > l j"
   152             by (auto simp: not_less)
   152             by (auto simp: not_less)
   153           let ?S1 = "{i \<in> S. l i < l j}"
   153           let ?S1 = "{i \<in> S. l i < l j}"
   154           let ?S2 = "{i \<in> S. r i > r j}"
   154           let ?S2 = "{i \<in> S. r i > r j}"
   155 
   155 
   156           have "(\<Sum>i\<in>S. F (r i) - F (l i)) \<ge> (\<Sum>i\<in>?S1 \<union> ?S2 \<union> {j}. F (r i) - F (l i))"
   156           have "(\<Sum>i\<in>S. F (r i) - F (l i)) \<ge> (\<Sum>i\<in>?S1 \<union> ?S2 \<union> {j}. F (r i) - F (l i))"
   157             using \<open>j \<in> S\<close> \<open>finite S\<close> psubset.prems j
   157             using \<open>j \<in> S\<close> \<open>finite S\<close> psubset.prems j
   158             by (intro setsum_mono2) (auto intro: less_imp_le)
   158             by (intro sum_mono2) (auto intro: less_imp_le)
   159           also have "(\<Sum>i\<in>?S1 \<union> ?S2 \<union> {j}. F (r i) - F (l i)) =
   159           also have "(\<Sum>i\<in>?S1 \<union> ?S2 \<union> {j}. F (r i) - F (l i)) =
   160             (\<Sum>i\<in>?S1. F (r i) - F (l i)) + (\<Sum>i\<in>?S2 . F (r i) - F (l i)) + (F (r j) - F (l j))"
   160             (\<Sum>i\<in>?S1. F (r i) - F (l i)) + (\<Sum>i\<in>?S2 . F (r i) - F (l i)) + (F (r j) - F (l j))"
   161             using psubset(1) psubset.prems(1) j
   161             using psubset(1) psubset.prems(1) j
   162             apply (subst setsum.union_disjoint)
   162             apply (subst sum.union_disjoint)
   163             apply simp_all
   163             apply simp_all
   164             apply (subst setsum.union_disjoint)
   164             apply (subst sum.union_disjoint)
   165             apply auto
   165             apply auto
   166             apply (metis less_le_not_le)
   166             apply (metis less_le_not_le)
   167             done
   167             done
   168           also (xtrans) have "(\<Sum>i\<in>?S1. F (r i) - F (l i)) \<ge> F (l j) - F u"
   168           also (xtrans) have "(\<Sum>i\<in>?S1. F (r i) - F (l i)) \<ge> F (l j) - F u"
   169             using \<open>j \<in> S\<close> \<open>finite S\<close> psubset.prems j
   169             using \<open>j \<in> S\<close> \<open>finite S\<close> psubset.prems j
   243       apply (frule Sprop2)
   243       apply (frule Sprop2)
   244       apply (subgoal_tac "delta i > 0")
   244       apply (subgoal_tac "delta i > 0")
   245       apply arith
   245       apply arith
   246       by (rule deltai_gt0)
   246       by (rule deltai_gt0)
   247     also have "... \<le> (\<Sum>i \<in> S. F(r i) - F(l i) + epsilon / 2^(i+2))"
   247     also have "... \<le> (\<Sum>i \<in> S. F(r i) - F(l i) + epsilon / 2^(i+2))"
   248       apply (rule setsum_mono)
   248       apply (rule sum_mono)
   249       apply simp
   249       apply simp
   250       apply (rule order_trans)
   250       apply (rule order_trans)
   251       apply (rule less_imp_le)
   251       apply (rule less_imp_le)
   252       apply (rule deltai_prop)
   252       apply (rule deltai_prop)
   253       by auto
   253       by auto
   254     also have "... = (\<Sum>i \<in> S. F(r i) - F(l i)) +
   254     also have "... = (\<Sum>i \<in> S. F(r i) - F(l i)) +
   255         (epsilon / 4) * (\<Sum>i \<in> S. (1 / 2)^i)" (is "_ = ?t + _")
   255         (epsilon / 4) * (\<Sum>i \<in> S. (1 / 2)^i)" (is "_ = ?t + _")
   256       by (subst setsum.distrib) (simp add: field_simps setsum_distrib_left)
   256       by (subst sum.distrib) (simp add: field_simps sum_distrib_left)
   257     also have "... \<le> ?t + (epsilon / 4) * (\<Sum> i < Suc n. (1 / 2)^i)"
   257     also have "... \<le> ?t + (epsilon / 4) * (\<Sum> i < Suc n. (1 / 2)^i)"
   258       apply (rule add_left_mono)
   258       apply (rule add_left_mono)
   259       apply (rule mult_left_mono)
   259       apply (rule mult_left_mono)
   260       apply (rule setsum_mono2)
   260       apply (rule sum_mono2)
   261       using egt0 apply auto
   261       using egt0 apply auto
   262       by (frule Sbound, auto)
   262       by (frule Sbound, auto)
   263     also have "... \<le> ?t + (epsilon / 2)"
   263     also have "... \<le> ?t + (epsilon / 2)"
   264       apply (rule add_left_mono)
   264       apply (rule add_left_mono)
   265       apply (subst geometric_sum)
   265       apply (subst geometric_sum)
   279       apply (rule aux2)
   279       apply (rule aux2)
   280       done
   280       done
   281     also have "... = (\<Sum>i\<in>S. F (r i) - F (l i)) + epsilon"
   281     also have "... = (\<Sum>i\<in>S. F (r i) - F (l i)) + epsilon"
   282       by auto
   282       by auto
   283     also have "... \<le> (\<Sum>i\<le>n. F (r i) - F (l i)) + epsilon"
   283     also have "... \<le> (\<Sum>i\<le>n. F (r i) - F (l i)) + epsilon"
   284       using finS Sbound Sprop by (auto intro!: add_right_mono setsum_mono3)
   284       using finS Sbound Sprop by (auto intro!: add_right_mono sum_mono3)
   285     finally have "ennreal (F b - F a) \<le> (\<Sum>i\<le>n. ennreal (F (r i) - F (l i))) + epsilon"
   285     finally have "ennreal (F b - F a) \<le> (\<Sum>i\<le>n. ennreal (F (r i) - F (l i))) + epsilon"
   286       using egt0 by (simp add: ennreal_plus[symmetric] setsum_nonneg del: ennreal_plus)
   286       using egt0 by (simp add: ennreal_plus[symmetric] sum_nonneg del: ennreal_plus)
   287     then show "ennreal (F b - F a) \<le> (\<Sum>i. ennreal (F (r i) - F (l i))) + (epsilon :: real)"
   287     then show "ennreal (F b - F a) \<le> (\<Sum>i. ennreal (F (r i) - F (l i))) + (epsilon :: real)"
   288       by (rule order_trans) (auto intro!: add_mono setsum_le_suminf simp del: setsum_ennreal)
   288       by (rule order_trans) (auto intro!: add_mono sum_le_suminf simp del: sum_ennreal)
   289   qed
   289   qed
   290   moreover have "(\<Sum>i. ennreal (F (r i) - F (l i))) \<le> ennreal (F b - F a)"
   290   moreover have "(\<Sum>i. ennreal (F (r i) - F (l i))) \<le> ennreal (F b - F a)"
   291     using \<open>a \<le> b\<close> by (auto intro!: suminf_le_const ennreal_le_iff[THEN iffD2] claim1)
   291     using \<open>a \<le> b\<close> by (auto intro!: suminf_le_const ennreal_le_iff[THEN iffD2] claim1)
   292   ultimately show "(\<Sum>n. ennreal (F (r n) - F (l n))) = ennreal (F b - F a)"
   292   ultimately show "(\<Sum>n. ennreal (F (r n) - F (l n))) = ennreal (F b - F a)"
   293     by (rule antisym[rotated])
   293     by (rule antisym[rotated])
   635 
   635 
   636 lemma lborel_affine:
   636 lemma lborel_affine:
   637   fixes t :: "'a::euclidean_space"
   637   fixes t :: "'a::euclidean_space"
   638   shows "c \<noteq> 0 \<Longrightarrow> lborel = density (distr lborel borel (\<lambda>x. t + c *\<^sub>R x)) (\<lambda>_. \<bar>c\<bar>^DIM('a))"
   638   shows "c \<noteq> 0 \<Longrightarrow> lborel = density (distr lborel borel (\<lambda>x. t + c *\<^sub>R x)) (\<lambda>_. \<bar>c\<bar>^DIM('a))"
   639   using lborel_affine_euclidean[where c="\<lambda>_::'a. c" and t=t]
   639   using lborel_affine_euclidean[where c="\<lambda>_::'a. c" and t=t]
   640   unfolding scaleR_scaleR[symmetric] scaleR_setsum_right[symmetric] euclidean_representation setprod_constant by simp
   640   unfolding scaleR_scaleR[symmetric] scaleR_sum_right[symmetric] euclidean_representation setprod_constant by simp
   641 
   641 
   642 lemma lborel_real_affine:
   642 lemma lborel_real_affine:
   643   "c \<noteq> 0 \<Longrightarrow> lborel = density (distr lborel borel (\<lambda>x. t + c * x)) (\<lambda>_. ennreal (abs c))"
   643   "c \<noteq> 0 \<Longrightarrow> lborel = density (distr lborel borel (\<lambda>x. t + c * x)) (\<lambda>_. ennreal (abs c))"
   644   using lborel_affine[of c t] by simp
   644   using lborel_affine[of c t] by simp
   645 
   645 
   720     by (auto simp: fun_eq_iff)
   720     by (auto simp: fun_eq_iff)
   721   then show ?thesis by auto
   721   then show ?thesis by auto
   722 next
   722 next
   723   assume "x \<noteq> 0" then show ?thesis
   723   assume "x \<noteq> 0" then show ?thesis
   724     using lebesgue_affine_measurable[of "\<lambda>_. x" 0]
   724     using lebesgue_affine_measurable[of "\<lambda>_. x" 0]
   725     unfolding scaleR_scaleR[symmetric] scaleR_setsum_right[symmetric] euclidean_representation
   725     unfolding scaleR_scaleR[symmetric] scaleR_sum_right[symmetric] euclidean_representation
   726     by (auto simp add: ac_simps)
   726     by (auto simp add: ac_simps)
   727 qed
   727 qed
   728 
   728 
   729 lemma
   729 lemma
   730   fixes m :: real and \<delta> :: "'a::euclidean_space"
   730   fixes m :: real and \<delta> :: "'a::euclidean_space"
   745       by (auto intro: inv_unique_comp o_bij)
   745       by (auto intro: inv_unique_comp o_bij)
   746     then have eq: "T m \<delta> ` S = T (1 / m) ((-1/m) *\<^sub>R \<delta>) -` S \<inter> space lebesgue"
   746     then have eq: "T m \<delta> ` S = T (1 / m) ((-1/m) *\<^sub>R \<delta>) -` S \<inter> space lebesgue"
   747       using bij_vimage_eq_inv_image[OF \<open>bij ?T'\<close>, of S] by auto
   747       using bij_vimage_eq_inv_image[OF \<open>bij ?T'\<close>, of S] by auto
   748 
   748 
   749     have trans_eq_T: "(\<lambda>x. \<delta> + (\<Sum>j\<in>Basis. (m * (x \<bullet> j)) *\<^sub>R j)) = T m \<delta>" for m \<delta>
   749     have trans_eq_T: "(\<lambda>x. \<delta> + (\<Sum>j\<in>Basis. (m * (x \<bullet> j)) *\<^sub>R j)) = T m \<delta>" for m \<delta>
   750       unfolding T_def[abs_def] scaleR_scaleR[symmetric] scaleR_setsum_right[symmetric]
   750       unfolding T_def[abs_def] scaleR_scaleR[symmetric] scaleR_sum_right[symmetric]
   751       by (auto simp add: euclidean_representation ac_simps)
   751       by (auto simp add: euclidean_representation ac_simps)
   752 
   752 
   753     have T[measurable]: "T r d \<in> lebesgue \<rightarrow>\<^sub>M lebesgue" for r d
   753     have T[measurable]: "T r d \<in> lebesgue \<rightarrow>\<^sub>M lebesgue" for r d
   754       using lebesgue_affine_measurable[of "\<lambda>_. r" d]
   754       using lebesgue_affine_measurable[of "\<lambda>_. r" d]
   755       by (cases "r = 0") (auto simp: trans_eq_T T_def[abs_def])
   755       by (cases "r = 0") (auto simp: trans_eq_T T_def[abs_def])