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]) |