# HG changeset patch # User paulson # Date 1565956427 -3600 # Node ID 87dffe9700bdfc984ed7f8b1980260501a958396 # Parent 2970fdc230cc2d292dbe2fad94df4df019103b4b# Parent 7ce95a5c4aa86a7dca5a292778f96af978109094 merged diff -r 2970fdc230cc -r 87dffe9700bd src/HOL/Analysis/Change_Of_Vars.thy --- a/src/HOL/Analysis/Change_Of_Vars.thy Fri Aug 16 11:40:13 2019 +0200 +++ b/src/HOL/Analysis/Change_Of_Vars.thy Fri Aug 16 12:53:47 2019 +0100 @@ -490,126 +490,6 @@ qed qed -proposition lebesgue_regular_inner: - assumes "S \ sets lebesgue" - obtains K C where "negligible K" "\n::nat. compact(C n)" "S = (\n. C n) \ K" -proof - - have "\T. closed T \ T \ S \ (S - T) \ lmeasurable \ emeasure lebesgue (S - T) < ennreal ((1/2)^n)" for n - using sets_lebesgue_inner_closed assms - by (metis sets_lebesgue_inner_closed zero_less_divide_1_iff zero_less_numeral zero_less_power) - then obtain C where clo: "\n. closed (C n)" and subS: "\n. C n \ S" - and mea: "\n. (S - C n) \ lmeasurable" - and less: "\n. emeasure lebesgue (S - C n) < ennreal ((1/2)^n)" - by metis - have "\F. (\n::nat. compact(F n)) \ (\n. F n) = C m" for m::nat - by (metis clo closed_Union_compact_subsets) - then obtain D :: "[nat,nat] \ 'a set" where D: "\m n. compact(D m n)" "\m. (\n. D m n) = C m" - by metis - let ?C = "from_nat_into (\m. range (D m))" - have "countable (\m. range (D m))" - by blast - have "range (from_nat_into (\m. range (D m))) = (\m. range (D m))" - using range_from_nat_into by simp - then have CD: "\m n. ?C k = D m n" for k - by (metis (mono_tags, lifting) UN_iff rangeE range_eqI) - show thesis - proof - show "negligible (S - (\n. C n))" - proof (clarsimp simp: negligible_outer_le) - fix e :: "real" - assume "e > 0" - then obtain n where n: "(1/2)^n < e" - using real_arch_pow_inv [of e "1/2"] by auto - show "\T. S - (\n. C n) \ T \ T \ lmeasurable \ measure lebesgue T \ e" - proof (intro exI conjI) - show "S - (\n. C n) \ S - C n" - by blast - show "S - C n \ lmeasurable" - by (simp add: mea) - show "measure lebesgue (S - C n) \ e" - using less [of n] n - by (simp add: emeasure_eq_measure2 less_le mea) - qed - qed - show "compact (?C n)" for n - using CD D by metis - show "S = (\n. ?C n) \ (S - (\n. C n))" (is "_ = ?rhs") - proof - show "S \ ?rhs" - using D by fastforce - show "?rhs \ S" - using subS D CD by auto (metis Sup_upper range_eqI subsetCE) - qed - qed -qed - - -lemma sets_lebesgue_continuous_image: - assumes T: "T \ sets lebesgue" and contf: "continuous_on S f" - and negim: "\T. \negligible T; T \ S\ \ negligible(f ` T)" and "T \ S" - shows "f ` T \ sets lebesgue" -proof - - obtain K C where "negligible K" and com: "\n::nat. compact(C n)" and Teq: "T = (\n. C n) \ K" - using lebesgue_regular_inner [OF T] by metis - then have comf: "\n::nat. compact(f ` C n)" - by (metis Un_subset_iff Union_upper \T \ S\ compact_continuous_image contf continuous_on_subset rangeI) - have "((\n. f ` C n) \ f ` K) \ sets lebesgue" - proof (rule sets.Un) - have "K \ S" - using Teq \T \ S\ by blast - show "(\n. f ` C n) \ sets lebesgue" - proof (rule sets.countable_Union) - show "range (\n. f ` C n) \ sets lebesgue" - using borel_compact comf by (auto simp: borel_compact) - qed auto - show "f ` K \ sets lebesgue" - by (simp add: \K \ S\ \negligible K\ negim negligible_imp_sets) - qed - then show ?thesis - by (simp add: Teq image_Un image_Union) -qed - -lemma differentiable_image_in_sets_lebesgue: - fixes f :: "'m::euclidean_space \ 'n::euclidean_space" - assumes S: "S \ sets lebesgue" and dim: "DIM('m) \ DIM('n)" and f: "f differentiable_on S" - shows "f`S \ sets lebesgue" -proof (rule sets_lebesgue_continuous_image [OF S]) - show "continuous_on S f" - by (meson differentiable_imp_continuous_on f) - show "\T. \negligible T; T \ S\ \ negligible (f ` T)" - using differentiable_on_subset f - by (auto simp: intro!: negligible_differentiable_image_negligible [OF dim]) -qed auto - -lemma sets_lebesgue_on_continuous_image: - assumes S: "S \ sets lebesgue" and X: "X \ sets (lebesgue_on S)" and contf: "continuous_on S f" - and negim: "\T. \negligible T; T \ S\ \ negligible(f ` T)" - shows "f ` X \ sets (lebesgue_on (f ` S))" -proof - - have "X \ S" - by (metis S X sets.Int_space_eq2 sets_restrict_space_iff) - moreover have "f ` S \ sets lebesgue" - using S contf negim sets_lebesgue_continuous_image by blast - moreover have "f ` X \ sets lebesgue" - by (metis S X contf negim sets_lebesgue_continuous_image sets_restrict_space_iff space_restrict_space space_restrict_space2) - ultimately show ?thesis - by (auto simp: sets_restrict_space_iff) -qed - -lemma differentiable_image_in_sets_lebesgue_on: - fixes f :: "'m::euclidean_space \ 'n::euclidean_space" - assumes S: "S \ sets lebesgue" and X: "X \ sets (lebesgue_on S)" and dim: "DIM('m) \ DIM('n)" - and f: "f differentiable_on S" - shows "f ` X \ sets (lebesgue_on (f`S))" -proof (rule sets_lebesgue_on_continuous_image [OF S X]) - show "continuous_on S f" - by (meson differentiable_imp_continuous_on f) - show "\T. \negligible T; T \ S\ \ negligible (f ` T)" - using differentiable_on_subset f - by (auto simp: intro!: negligible_differentiable_image_negligible [OF dim]) -qed - - proposition fixes f :: "real^'n::{finite,wellorder} \ real^'n::_" assumes S: "S \ lmeasurable" diff -r 2970fdc230cc -r 87dffe9700bd src/HOL/Analysis/Equivalence_Lebesgue_Henstock_Integration.thy --- a/src/HOL/Analysis/Equivalence_Lebesgue_Henstock_Integration.thy Fri Aug 16 11:40:13 2019 +0200 +++ b/src/HOL/Analysis/Equivalence_Lebesgue_Henstock_Integration.thy Fri Aug 16 12:53:47 2019 +0100 @@ -4466,6 +4466,194 @@ apply (auto simp: in_borel_measurable_borel vimage_def) done +subsection \Lebesgue sets and continuous images\ + +proposition lebesgue_regular_inner: + assumes "S \ sets lebesgue" + obtains K C where "negligible K" "\n::nat. compact(C n)" "S = (\n. C n) \ K" +proof - + have "\T. closed T \ T \ S \ (S - T) \ lmeasurable \ emeasure lebesgue (S - T) < ennreal ((1/2)^n)" for n + using sets_lebesgue_inner_closed assms + by (metis sets_lebesgue_inner_closed zero_less_divide_1_iff zero_less_numeral zero_less_power) + then obtain C where clo: "\n. closed (C n)" and subS: "\n. C n \ S" + and mea: "\n. (S - C n) \ lmeasurable" + and less: "\n. emeasure lebesgue (S - C n) < ennreal ((1/2)^n)" + by metis + have "\F. (\n::nat. compact(F n)) \ (\n. F n) = C m" for m::nat + by (metis clo closed_Union_compact_subsets) + then obtain D :: "[nat,nat] \ 'a set" where D: "\m n. compact(D m n)" "\m. (\n. D m n) = C m" + by metis + let ?C = "from_nat_into (\m. range (D m))" + have "countable (\m. range (D m))" + by blast + have "range (from_nat_into (\m. range (D m))) = (\m. range (D m))" + using range_from_nat_into by simp + then have CD: "\m n. ?C k = D m n" for k + by (metis (mono_tags, lifting) UN_iff rangeE range_eqI) + show thesis + proof + show "negligible (S - (\n. C n))" + proof (clarsimp simp: negligible_outer_le) + fix e :: "real" + assume "e > 0" + then obtain n where n: "(1/2)^n < e" + using real_arch_pow_inv [of e "1/2"] by auto + show "\T. S - (\n. C n) \ T \ T \ lmeasurable \ measure lebesgue T \ e" + proof (intro exI conjI) + show "S - (\n. C n) \ S - C n" + by blast + show "S - C n \ lmeasurable" + by (simp add: mea) + show "measure lebesgue (S - C n) \ e" + using less [of n] n + by (simp add: emeasure_eq_measure2 less_le mea) + qed + qed + show "compact (?C n)" for n + using CD D by metis + show "S = (\n. ?C n) \ (S - (\n. C n))" (is "_ = ?rhs") + proof + show "S \ ?rhs" + using D by fastforce + show "?rhs \ S" + using subS D CD by auto (metis Sup_upper range_eqI subsetCE) + qed + qed +qed + +lemma sets_lebesgue_continuous_image: + assumes T: "T \ sets lebesgue" and contf: "continuous_on S f" + and negim: "\T. \negligible T; T \ S\ \ negligible(f ` T)" and "T \ S" + shows "f ` T \ sets lebesgue" +proof - + obtain K C where "negligible K" and com: "\n::nat. compact(C n)" and Teq: "T = (\n. C n) \ K" + using lebesgue_regular_inner [OF T] by metis + then have comf: "\n::nat. compact(f ` C n)" + by (metis Un_subset_iff Union_upper \T \ S\ compact_continuous_image contf continuous_on_subset rangeI) + have "((\n. f ` C n) \ f ` K) \ sets lebesgue" + proof (rule sets.Un) + have "K \ S" + using Teq \T \ S\ by blast + show "(\n. f ` C n) \ sets lebesgue" + proof (rule sets.countable_Union) + show "range (\n. f ` C n) \ sets lebesgue" + using borel_compact comf by (auto simp: borel_compact) + qed auto + show "f ` K \ sets lebesgue" + by (simp add: \K \ S\ \negligible K\ negim negligible_imp_sets) + qed + then show ?thesis + by (simp add: Teq image_Un image_Union) +qed + +lemma differentiable_image_in_sets_lebesgue: + fixes f :: "'m::euclidean_space \ 'n::euclidean_space" + assumes S: "S \ sets lebesgue" and dim: "DIM('m) \ DIM('n)" and f: "f differentiable_on S" + shows "f`S \ sets lebesgue" +proof (rule sets_lebesgue_continuous_image [OF S]) + show "continuous_on S f" + by (meson differentiable_imp_continuous_on f) + show "\T. \negligible T; T \ S\ \ negligible (f ` T)" + using differentiable_on_subset f + by (auto simp: intro!: negligible_differentiable_image_negligible [OF dim]) +qed auto + +lemma sets_lebesgue_on_continuous_image: + assumes S: "S \ sets lebesgue" and X: "X \ sets (lebesgue_on S)" and contf: "continuous_on S f" + and negim: "\T. \negligible T; T \ S\ \ negligible(f ` T)" + shows "f ` X \ sets (lebesgue_on (f ` S))" +proof - + have "X \ S" + by (metis S X sets.Int_space_eq2 sets_restrict_space_iff) + moreover have "f ` S \ sets lebesgue" + using S contf negim sets_lebesgue_continuous_image by blast + moreover have "f ` X \ sets lebesgue" + by (metis S X contf negim sets_lebesgue_continuous_image sets_restrict_space_iff space_restrict_space space_restrict_space2) + ultimately show ?thesis + by (auto simp: sets_restrict_space_iff) +qed + +lemma differentiable_image_in_sets_lebesgue_on: + fixes f :: "'m::euclidean_space \ 'n::euclidean_space" + assumes S: "S \ sets lebesgue" and X: "X \ sets (lebesgue_on S)" and dim: "DIM('m) \ DIM('n)" + and f: "f differentiable_on S" + shows "f ` X \ sets (lebesgue_on (f`S))" +proof (rule sets_lebesgue_on_continuous_image [OF S X]) + show "continuous_on S f" + by (meson differentiable_imp_continuous_on f) + show "\T. \negligible T; T \ S\ \ negligible (f ` T)" + using differentiable_on_subset f + by (auto simp: intro!: negligible_differentiable_image_negligible [OF dim]) +qed + +subsection \Affine lemmas\ + +lemma borel_measurable_affine: + fixes f :: "'a :: euclidean_space \ 'b :: euclidean_space" + assumes f: "f \ borel_measurable lebesgue" and "c \ 0" + shows "(\x. f(t + c *\<^sub>R x)) \ borel_measurable lebesgue" +proof - + { fix a b + have "{x. f x \ cbox a b} \ sets lebesgue" + using f cbox_borel lebesgue_measurable_vimage_borel by blast + then have "(\x. (x - t) /\<^sub>R c) ` {x. f x \ cbox a b} \ sets lebesgue" + proof (rule differentiable_image_in_sets_lebesgue) + show "(\x. (x - t) /\<^sub>R c) differentiable_on {x. f x \ cbox a b}" + unfolding differentiable_on_def differentiable_def + by (rule \c \ 0\ derivative_eq_intros strip exI | simp)+ + qed auto + moreover + have "{x. f(t + c *\<^sub>R x) \ cbox a b} = (\x. (x-t) /\<^sub>R c) ` {x. f x \ cbox a b}" + using \c \ 0\ by (auto simp: image_def) + ultimately have "{x. f(t + c *\<^sub>R x) \ cbox a b} \ sets lebesgue" + by (auto simp: borel_measurable_vimage_closed_interval) } + then show ?thesis + by (subst lebesgue_on_UNIV_eq [symmetric]; auto simp: borel_measurable_vimage_closed_interval) +qed + +lemma lebesgue_integrable_real_affine: + fixes f :: "real \ 'a :: euclidean_space" + assumes f: "integrable lebesgue f" and "c \ 0" + shows "integrable lebesgue (\x. f(t + c * x))" +proof - + have "(\x. norm (f x)) \ borel_measurable lebesgue" + by (simp add: borel_measurable_integrable f) + then show ?thesis + using assms borel_measurable_affine [of f c] + unfolding integrable_iff_bounded + by (subst (asm) nn_integral_real_affine_lebesgue[where c=c and t=t]) (auto simp: ennreal_mult_less_top) +qed + +lemma lebesgue_integrable_real_affine_iff: + fixes f :: "real \ 'a :: euclidean_space" + shows "c \ 0 \ integrable lebesgue (\x. f(t + c * x)) \ integrable lebesgue f" + using lebesgue_integrable_real_affine[of f c t] + lebesgue_integrable_real_affine[of "\x. f(t + c * x)" "1/c" "-t/c"] + by (auto simp: field_simps) + +lemma\<^marker>\tag important\ lebesgue_integral_real_affine: + fixes f :: "real \ 'a :: euclidean_space" and c :: real + assumes c: "c \ 0" shows "(\x. f x \ lebesgue) = \c\ *\<^sub>R (\x. f(t + c * x) \lebesgue)" +proof cases + have "(\x. t + c * x) \ lebesgue \\<^sub>M lebesgue" + using lebesgue_affine_measurable[where c= "\x::real. c"] \c \ 0\ by simp + moreover + assume "integrable lebesgue f" + ultimately show ?thesis + by (subst lebesgue_real_affine[OF c, of t]) (auto simp: integral_density integral_distr) +next + assume "\ integrable lebesgue f" with c show ?thesis + by (simp add: lebesgue_integrable_real_affine_iff not_integrable_integral_eq) +qed + +lemma has_bochner_integral_lebesgue_real_affine_iff: + fixes i :: "'a :: euclidean_space" + shows "c \ 0 \ + has_bochner_integral lebesgue f i \ + has_bochner_integral lebesgue (\x. f(t + c * x)) (i /\<^sub>R \c\)" + unfolding has_bochner_integral_iff lebesgue_integrable_real_affine_iff + by (simp_all add: lebesgue_integral_real_affine[symmetric] divideR_right cong: conj_cong) + subsection\More results on integrability\ lemma integrable_on_all_intervals_UNIV: diff -r 2970fdc230cc -r 87dffe9700bd src/HOL/Analysis/Improper_Integral.thy --- a/src/HOL/Analysis/Improper_Integral.thy Fri Aug 16 11:40:13 2019 +0200 +++ b/src/HOL/Analysis/Improper_Integral.thy Fri Aug 16 12:53:47 2019 +0100 @@ -1,3 +1,7 @@ +(* Title: HOL/Analysis/Improper_Integral.thy + Author: LC Paulson (ported from HOL Light) +*) + section \Continuity of the indefinite integral; improper integral theorem\ theory "Improper_Integral" @@ -66,6 +70,180 @@ by (metis assms equiintegrable_on_Un equiintegrable_on_sing insert_is_Un) +lemma equiintegrable_cmul: + assumes F: "F equiintegrable_on I" + shows "(\c \ {-k..k}. \f \ F. {(\x. c *\<^sub>R f x)}) equiintegrable_on I" + unfolding equiintegrable_on_def + proof (intro conjI impI allI ballI) + show "f integrable_on I" + if "f \ (\c\{- k..k}. \f\F. {\x. c *\<^sub>R f x})" + for f :: "'a \ 'b" + using that assms equiintegrable_on_integrable integrable_cmul by blast + show "\\. gauge \ \ (\f \. f \ (\c\{- k..k}. \f\F. {\x. c *\<^sub>R f x}) \ \ tagged_division_of I + \ \ fine \ \ norm ((\(x, K)\\. content K *\<^sub>R f x) - integral I f) < \)" + if "\ > 0" for \ + proof - + obtain \ where "gauge \" + and \: "\f \. \f \ F; \ tagged_division_of I; \ fine \\ + \ norm ((\(x,K) \ \. content K *\<^sub>R f x) - integral I f) < \ / (\k\ + 1)" + using assms \\ > 0\ unfolding equiintegrable_on_def + by (metis add.commute add.right_neutral add_strict_mono divide_pos_pos norm_eq_zero real_norm_def zero_less_norm_iff zero_less_one) + moreover have "norm ((\(x, K)\\. content K *\<^sub>R c *\<^sub>R (f x)) - integral I (\x. c *\<^sub>R f x)) < \" + if c: "c \ {- k..k}" + and "f \ F" "\ tagged_division_of I" "\ fine \" + for \ c f + proof - + have "norm ((\x\\. case x of (x, K) \ content K *\<^sub>R c *\<^sub>R f x) - integral I (\x. c *\<^sub>R f x)) + = \c\ * norm ((\x\\. case x of (x, K) \ content K *\<^sub>R f x) - integral I f)" + by (simp add: algebra_simps scale_sum_right case_prod_unfold flip: norm_scaleR) + also have "\ \ (\k\ + 1) * norm ((\x\\. case x of (x, K) \ content K *\<^sub>R f x) - integral I f)" + using c by (auto simp: mult_right_mono) + also have "\ < (\k\ + 1) * (\ / (\k\ + 1))" + by (rule mult_strict_left_mono) (use \ less_eq_real_def that in auto) + also have "\ = \" + by auto + finally show ?thesis . + qed + ultimately show ?thesis + by (rule_tac x="\" in exI) auto + qed +qed + + +lemma equiintegrable_add: + assumes F: "F equiintegrable_on I" and G: "G equiintegrable_on I" + shows "(\f \ F. \g \ G. {(\x. f x + g x)}) equiintegrable_on I" + unfolding equiintegrable_on_def +proof (intro conjI impI allI ballI) + show "f integrable_on I" + if "f \ (\f\F. \g\G. {\x. f x + g x})" for f + using that equiintegrable_on_integrable assms by (auto intro: integrable_add) + show "\\. gauge \ \ (\f \. f \ (\f\F. \g\G. {\x. f x + g x}) \ \ tagged_division_of I + \ \ fine \ \ norm ((\(x, K)\\. content K *\<^sub>R f x) - integral I f) < \)" + if "\ > 0" for \ + proof - + obtain \1 where "gauge \1" + and \1: "\f \. \f \ F; \ tagged_division_of I; \1 fine \\ + \ norm ((\(x,K) \ \. content K *\<^sub>R f x) - integral I f) < \/2" + using assms \\ > 0\ unfolding equiintegrable_on_def by (meson half_gt_zero_iff) + obtain \2 where "gauge \2" + and \2: "\g \. \g \ G; \ tagged_division_of I; \2 fine \\ + \ norm ((\(x,K) \ \. content K *\<^sub>R g x) - integral I g) < \/2" + using assms \\ > 0\ unfolding equiintegrable_on_def by (meson half_gt_zero_iff) + have "gauge (\x. \1 x \ \2 x)" + using \gauge \1\ \gauge \2\ by blast + moreover have "norm ((\(x,K) \ \. content K *\<^sub>R h x) - integral I h) < \" + if h: "h \ (\f\F. \g\G. {\x. f x + g x})" + and \: "\ tagged_division_of I" and fine: "(\x. \1 x \ \2 x) fine \" + for h \ + proof - + obtain f g where "f \ F" "g \ G" and heq: "h = (\x. f x + g x)" + using h by blast + then have int: "f integrable_on I" "g integrable_on I" + using F G equiintegrable_on_def by blast+ + have "norm ((\(x,K) \ \. content K *\<^sub>R h x) - integral I h) + = norm ((\(x,K) \ \. content K *\<^sub>R f x + content K *\<^sub>R g x) - (integral I f + integral I g))" + by (simp add: heq algebra_simps integral_add int) + also have "\ = norm (((\(x,K) \ \. content K *\<^sub>R f x) - integral I f + (\(x,K) \ \. content K *\<^sub>R g x) - integral I g))" + by (simp add: sum.distrib algebra_simps case_prod_unfold) + also have "\ \ norm ((\(x,K) \ \. content K *\<^sub>R f x) - integral I f) + norm ((\(x,K) \ \. content K *\<^sub>R g x) - integral I g)" + by (metis (mono_tags) add_diff_eq norm_triangle_ineq) + also have "\ < \/2 + \/2" + using \1 [OF \f \ F\ \] \2 [OF \g \ G\ \] fine by (simp add: fine_Int) + finally show ?thesis by simp + qed + ultimately show ?thesis + by meson + qed +qed + +lemma equiintegrable_minus: + assumes "F equiintegrable_on I" + shows "(\f \ F. {(\x. - f x)}) equiintegrable_on I" + by (force intro: equiintegrable_on_subset [OF equiintegrable_cmul [OF assms, of 1]]) + +lemma equiintegrable_diff: + assumes F: "F equiintegrable_on I" and G: "G equiintegrable_on I" + shows "(\f \ F. \g \ G. {(\x. f x - g x)}) equiintegrable_on I" + by (rule equiintegrable_on_subset [OF equiintegrable_add [OF F equiintegrable_minus [OF G]]]) auto + + +lemma equiintegrable_sum: + fixes F :: "('a::euclidean_space \ 'b::euclidean_space) set" + assumes "F equiintegrable_on cbox a b" + shows "(\I \ Collect finite. \c \ {c. (\i \ I. c i \ 0) \ sum c I = 1}. + \f \ I \ F. {(\x. sum (\i::'j. c i *\<^sub>R f i x) I)}) equiintegrable_on cbox a b" + (is "?G equiintegrable_on _") + unfolding equiintegrable_on_def +proof (intro conjI impI allI ballI) + show "f integrable_on cbox a b" if "f \ ?G" for f + using that assms by (auto simp: equiintegrable_on_def intro!: integrable_sum integrable_cmul) + show "\\. gauge \ + \ (\g \. g \ ?G \ \ tagged_division_of cbox a b \ \ fine \ + \ norm ((\(x,K) \ \. content K *\<^sub>R g x) - integral (cbox a b) g) < \)" + if "\ > 0" for \ + proof - + obtain \ where "gauge \" + and \: "\f \. \f \ F; \ tagged_division_of cbox a b; \ fine \\ + \ norm ((\(x,K) \ \. content K *\<^sub>R f x) - integral (cbox a b) f) < \ / 2" + using assms \\ > 0\ unfolding equiintegrable_on_def by (meson half_gt_zero_iff) + moreover have "norm ((\(x,K) \ \. content K *\<^sub>R g x) - integral (cbox a b) g) < \" + if g: "g \ ?G" + and \: "\ tagged_division_of cbox a b" + and fine: "\ fine \" + for \ g + proof - + obtain I c f where "finite I" and 0: "\i::'j. i \ I \ 0 \ c i" + and 1: "sum c I = 1" and f: "f \ I \ F" and geq: "g = (\x. \i\I. c i *\<^sub>R f i x)" + using g by auto + have fi_int: "f i integrable_on cbox a b" if "i \ I" for i + by (metis Pi_iff assms equiintegrable_on_def f that) + have *: "integral (cbox a b) (\x. c i *\<^sub>R f i x) = (\(x, K)\\. integral K (\x. c i *\<^sub>R f i x))" + if "i \ I" for i + proof - + have "f i integrable_on cbox a b" + by (metis Pi_iff assms equiintegrable_on_def f that) + then show ?thesis + by (intro \ integrable_cmul integral_combine_tagged_division_topdown) + qed + have "finite \" + using \ by blast + have swap: "(\(x,K)\\. content K *\<^sub>R (\i\I. c i *\<^sub>R f i x)) + = (\i\I. c i *\<^sub>R (\(x,K)\\. content K *\<^sub>R f i x))" + by (simp add: scale_sum_right case_prod_unfold algebra_simps) (rule sum.swap) + have "norm ((\(x, K)\\. content K *\<^sub>R g x) - integral (cbox a b) g) + = norm ((\i\I. c i *\<^sub>R ((\(x,K)\\. content K *\<^sub>R f i x) - integral (cbox a b) (f i))))" + unfolding geq swap + by (simp add: scaleR_right.sum algebra_simps integral_sum fi_int integrable_cmul \finite I\ sum_subtractf flip: sum_diff) + also have "\ \ (\i\I. c i * \ / 2)" + proof (rule sum_norm_le) + show "norm (c i *\<^sub>R ((\(xa, K)\\. content K *\<^sub>R f i xa) - integral (cbox a b) (f i))) \ c i * \ / 2" + if "i \ I" for i + proof - + have "norm ((\(x, K)\\. content K *\<^sub>R f i x) - integral (cbox a b) (f i)) \ \/2" + using \ [OF _ \ fine, of "f i"] funcset_mem [OF f] that by auto + then show ?thesis + using that by (auto simp: 0 mult.assoc intro: mult_left_mono) + qed + qed + also have "\ < \" + using 1 \\ > 0\ by (simp add: flip: sum_divide_distrib sum_distrib_right) + finally show ?thesis . + qed + ultimately show ?thesis + by (rule_tac x="\" in exI) auto + qed +qed + +corollary equiintegrable_sum_real: + fixes F :: "(real \ 'b::euclidean_space) set" + assumes "F equiintegrable_on {a..b}" + shows "(\I \ Collect finite. \c \ {c. (\i \ I. c i \ 0) \ sum c I = 1}. + \f \ I \ F. {(\x. sum (\i. c i *\<^sub>R f i x) I)}) + equiintegrable_on {a..b}" + using equiintegrable_sum [of F a b] assms by auto + + text\ Basic combining theorems for the interval of integration.\ lemma equiintegrable_on_null [simp]: @@ -1171,7 +1349,6 @@ qed - corollary equiintegrable_halfspace_restrictions_ge: fixes f :: "'a::euclidean_space \ 'b::euclidean_space" assumes F: "F equiintegrable_on cbox a b" and f: "f \ F" @@ -1202,6 +1379,37 @@ using equiintegrable_reflect [OF *] by (auto simp: eq) qed +corollary equiintegrable_halfspace_restrictions_lt: + fixes f :: "'a::euclidean_space \ 'b::euclidean_space" + assumes F: "F equiintegrable_on cbox a b" and f: "f \ F" + and norm_f: "\h x. \h \ F; x \ cbox a b\ \ norm(h x) \ norm(f x)" + shows "(\i \ Basis. \c. \h \ F. {(\x. if x \ i < c then h x else 0)}) equiintegrable_on cbox a b" + (is "?G equiintegrable_on cbox a b") +proof - + have *: "(\i\Basis. \c. \h\F. {\x. if c \ x \ i then h x else 0}) equiintegrable_on cbox a b" + using equiintegrable_halfspace_restrictions_ge [OF F f] norm_f by auto + have "(\x. if x \ i < c then h x else 0) = (\x. h x - (if c \ x \ i then h x else 0))" + if "i \ Basis" "h \ F" for i c h + using that by force + then show ?thesis + by (blast intro: equiintegrable_on_subset [OF equiintegrable_diff [OF F *]]) +qed + +corollary equiintegrable_halfspace_restrictions_gt: + fixes f :: "'a::euclidean_space \ 'b::euclidean_space" + assumes F: "F equiintegrable_on cbox a b" and f: "f \ F" + and norm_f: "\h x. \h \ F; x \ cbox a b\ \ norm(h x) \ norm(f x)" + shows "(\i \ Basis. \c. \h \ F. {(\x. if x \ i > c then h x else 0)}) equiintegrable_on cbox a b" + (is "?G equiintegrable_on cbox a b") +proof - + have *: "(\i\Basis. \c. \h\F. {\x. if c \ x \ i then h x else 0}) equiintegrable_on cbox a b" + using equiintegrable_halfspace_restrictions_le [OF F f] norm_f by auto + have "(\x. if x \ i > c then h x else 0) = (\x. h x - (if c \ x \ i then h x else 0))" + if "i \ Basis" "h \ F" for i c h + using that by force + then show ?thesis + by (blast intro: equiintegrable_on_subset [OF equiintegrable_diff [OF F *]]) +qed proposition equiintegrable_closed_interval_restrictions: fixes f :: "'a::euclidean_space \ 'b::euclidean_space" @@ -1662,5 +1870,404 @@ qed qed +subsection\Second Mean Value Theorem\ + + + +subsection\Second mean value theorem and corollaries\ + +lemma level_approx: + fixes f :: "real \ real" and n::nat + assumes f: "\x. x \ S \ 0 \ f x \ f x \ 1" and "x \ S" "n \ 0" + shows "\f x - (\k = Suc 0..n. if k / n \ f x then inverse n else 0)\ < inverse n" + (is "?lhs < _") +proof - + have "n * f x \ 0" + using assms by auto + then obtain m::nat where m: "floor(n * f x) = int m" + using nonneg_int_cases zero_le_floor by blast + then have kn: "real k / real n \ f x \ k \ m" for k + using \n \ 0\ by (simp add: divide_simps mult.commute) linarith + then have "Suc n / real n \ f x \ Suc n \ m" + by blast + have "real n * f x \ real n" + by (simp add: \x \ S\ f mult_left_le) + then have "m \ n" + using m by linarith + have "?lhs = \f x - (\k \ {Suc 0..n} \ {..m}. inverse n)\" + by (subst sum.inter_restrict) (auto simp: kn) + also have "\ < inverse n" + using \m \ n\ \n \ 0\ m + by (simp add: min_absorb2 divide_simps mult.commute) linarith + finally show ?thesis . +qed + + +lemma SMVT_lemma2: + fixes f :: "real \ real" + assumes f: "f integrable_on {a..b}" + and g: "\x y. x \ y \ g x \ g y" + shows "(\y::real. {\x. if g x \ y then f x else 0}) equiintegrable_on {a..b}" +proof - + have ffab: "{f} equiintegrable_on {a..b}" + by (metis equiintegrable_on_sing f interval_cbox) + then have ff: "{f} equiintegrable_on (cbox a b)" + by simp + have ge: "(\c. {\x. if x \ c then f x else 0}) equiintegrable_on {a..b}" + using equiintegrable_halfspace_restrictions_ge [OF ff] by auto + have gt: "(\c. {\x. if x > c then f x else 0}) equiintegrable_on {a..b}" + using equiintegrable_halfspace_restrictions_gt [OF ff] by auto + have 0: "{(\x. 0)} equiintegrable_on {a..b}" + by (metis box_real(2) equiintegrable_on_sing integrable_0) + have \: "(\x. if g x \ y then f x else 0) \ {(\x. 0), f} \ (\z. {\x. if z < x then f x else 0}) \ (\z. {\x. if z \ x then f x else 0})" + for y + proof (cases "(\x. g x \ y) \ (\x. \ (g x \ y))") + let ?\ = "Inf {x. g x \ y}" + case False + have lower: "?\ \ x" if "g x \ y" for x + apply (rule cInf_lower) + using False + apply (auto simp: that bdd_below_def) + by (meson dual_order.trans g linear) + have greatest: "?\ \ z" if "(\x. g x \ y \ z \ x)" for z + by (metis False cInf_greatest empty_iff mem_Collect_eq that) + show ?thesis + proof (cases "g ?\ \ y") + case True + then obtain \ where \: "\x. g x \ y \ x \ \" + by (metis g lower order.trans) \ \in fact y is @{term ?\}}\ + then show ?thesis + by (force simp: \) + next + case False + have "(y \ g x) = (?\ < x)" for x + proof + show "?\ < x" if "y \ g x" + using that False less_eq_real_def lower by blast + show "y \ g x" if "?\ < x" + by (metis g greatest le_less_trans that less_le_trans linear not_less) + qed + then obtain \ where \: "\x. g x \ y \ x > \" .. + then show ?thesis + by (force simp: \) + qed + qed auto + show ?thesis + apply (rule equiintegrable_on_subset [OF equiintegrable_on_Un [OF gt equiintegrable_on_Un [OF ge equiintegrable_on_Un [OF ffab 0]]]]) + using \ apply (simp add: UN_subset_iff) + done +qed + + +lemma SMVT_lemma4: + fixes f :: "real \ real" + assumes f: "f integrable_on {a..b}" + and "a \ b" + and g: "\x y. x \ y \ g x \ g y" + and 01: "\x. \a \ x; x \ b\ \ 0 \ g x \ g x \ 1" + obtains c where "a \ c" "c \ b" "((\x. g x *\<^sub>R f x) has_integral integral {c..b} f) {a..b}" +proof - + have "connected ((\x. integral {x..b} f) ` {a..b})" + by (simp add: f indefinite_integral_continuous_1' connected_continuous_image) + moreover have "compact ((\x. integral {x..b} f) ` {a..b})" + by (simp add: compact_continuous_image f indefinite_integral_continuous_1') + ultimately obtain m M where int_fab: "(\x. integral {x..b} f) ` {a..b} = {m..M}" + using connected_compact_interval_1 by meson + have "\c. c \ {a..b} \ + integral {c..b} f = + integral {a..b} (\x. (\k = 1..n. if g x \ real k / real n then inverse n *\<^sub>R f x else 0))" for n + proof (cases "n=0") + case True + then show ?thesis + using \a \ b\ by auto + next + case False + have "(\c::real. {\x. if g x \ c then f x else 0}) equiintegrable_on {a..b}" + using SMVT_lemma2 [OF f g] . + then have int: "(\x. if g x \ c then f x else 0) integrable_on {a..b}" for c + by (simp add: equiintegrable_on_def) + have int': "(\x. if g x \ c then u * f x else 0) integrable_on {a..b}" for c u + proof - + have "(\x. if g x \ c then u * f x else 0) = (\x. u * (if g x \ c then f x else 0))" + by (force simp: if_distrib) + then show ?thesis + using integrable_on_cmult_left [OF int] by simp + qed + have "\d. d \ {a..b} \ integral {a..b} (\x. if g x \ y then f x else 0) = integral {d..b} f" for y + proof - + let ?X = "{x. g x \ y}" + have *: "\a. ?X = {x. a \ x} \ ?X = {x. a < x}" + if 1: "?X \ {}" and 2: "?X \ UNIV" + proof - + let ?\ = "Inf{x. g x \ y}" + have lower: "?\ \ x" if "g x \ y" for x + apply (rule cInf_lower) + using 1 2 apply (auto simp: that bdd_below_def) + by (meson dual_order.trans g linear) + have greatest: "?\ \ z" if "(\x. g x \ y \ z \ x)" for z + by (metis cInf_greatest mem_Collect_eq that 1) + show ?thesis + proof (cases "g ?\ \ y") + case True + then obtain \ where \: "\x. g x \ y \ x \ \" + by (metis g lower order.trans) \ \in fact y is @{term ?\}}\ + then show ?thesis + by (force simp: \) + next + case False + have "(y \ g x) = (?\ < x)" for x + proof + show "?\ < x" if "y \ g x" + using that False less_eq_real_def lower by blast + show "y \ g x" if "?\ < x" + by (metis g greatest le_less_trans that less_le_trans linear not_less) + qed + then obtain \ where \: "\x. g x \ y \ x > \" .. + then show ?thesis + by (force simp: \) + qed + qed + then consider "?X = {}" | "?X = UNIV" | d where "?X = {x. d \ x} \?X = {x. d < x}" + by metis + then have "\d. d \ {a..b} \ integral {a..b} (\x. if x \ ?X then f x else 0) = integral {d..b} f" + proof cases + case 1 + then show ?thesis + using \a \ b\ by auto + next + case 2 + then show ?thesis + using \a \ b\ by auto + next + case (3 d) + show ?thesis + proof (cases "d < a") + case True + with 3 show ?thesis + apply (rule_tac x=a in exI) + apply (auto simp: \a \ b\ iff del: mem_Collect_eq intro!: Henstock_Kurzweil_Integration.integral_cong, simp_all) + done + next + case False + show ?thesis + proof (cases "b < d") + case True + have "integral {a..b} (\x. if x \ {x. y \ g x} then f x else 0) = integral {a..b} (\x. 0)" + by (rule Henstock_Kurzweil_Integration.integral_cong) (use 3 True in fastforce) + then show ?thesis + using \a \ b\ by auto + next + case False + with \\ d < a\ have eq: "Collect ((\) d) \ {a..b} = {d..b}" "Collect ((<) d) \ {a..b} = {d<..b}" + by force+ + moreover have "integral {d<..b} f = integral {d..b} f" + by (rule integral_spike_set [OF empty_imp_negligible negligible_subset [OF negligible_sing [of d]]]) auto + ultimately + show ?thesis + using \\ d < a\ False 3 + apply (rule_tac x=d in exI) + apply (auto simp: \a \ b\ iff del: mem_Collect_eq; subst Henstock_Kurzweil_Integration.integral_restrict_Int) + apply (simp_all add: \a \ b\ not_less eq) + done + qed + qed + qed + then show ?thesis + by auto + qed + then have "\k. \d. d \ {a..b} \ integral {a..b} (\x. if real k / real n \ g x then f x else 0) = integral {d..b} f" + by meson + then obtain d where dab: "\k. d k \ {a..b}" + and deq: "\k::nat. integral {a..b} (\x. if k/n \ g x then f x else 0) = integral {d k..b} f" + by metis + have "(\k = 1..n. integral {a..b} (\x. if real k / real n \ g x then f x else 0)) /\<^sub>R n \ {m..M}" + unfolding scaleR_right.sum + proof (intro conjI allI impI convex [THEN iffD1, rule_format]) + show "integral {a..b} (\xa. if real k / real n \ g xa then f xa else 0) \ {m..M}" for k + by (metis (no_types, lifting) deq image_eqI int_fab dab) + qed (use \n \ 0\ in auto) + then have "\c. c \ {a..b} \ + integral {c..b} f = inverse n *\<^sub>R (\k = 1..n. integral {a..b} (\x. if g x \ real k / real n then f x else 0))" + by (metis (no_types, lifting) int_fab imageE) + then show ?thesis + by (simp add: sum_distrib_left if_distrib integral_sum int' flip: integral_mult_right cong: if_cong) + qed + then obtain c where cab: "\n. c n \ {a..b}" + and c: "\n. integral {c n..b} f = integral {a..b} (\x. (\k = 1..n. if g x \ real k / real n then f x /\<^sub>R n else 0))" + by metis + obtain d and \ :: "nat\nat" + where "d \ {a..b}" and \: "strict_mono \" and d: "(c \ \) \ d" and non0: "\n. \ n \ Suc 0" + proof - + have "compact{a..b}" + by auto + with cab obtain d and s0 + where "d \ {a..b}" and s0: "strict_mono s0" and tends: "(c \ s0) \ d" + unfolding compact_def + using that by blast + show thesis + proof + show "d \ {a..b}" + by fact + show "strict_mono (s0 \ Suc)" + using s0 by (auto simp: strict_mono_def) + show "(c \ (s0 \ Suc)) \ d" + by (metis tends LIMSEQ_subseq_LIMSEQ Suc_less_eq comp_assoc strict_mono_def) + show "\n. (s0 \ Suc) n \ Suc 0" + by (metis comp_apply le0 not_less_eq_eq old.nat.exhaust s0 seq_suble) + qed + qed + define \ where "\ \ \n x. \k = Suc 0..\ n. if k/(\ n) \ g x then f x /\<^sub>R (\ n) else 0" + define \ where "\ \ \n x. \k = Suc 0..\ n. if k/(\ n) \ g x then inverse (\ n) else 0" + have **: "(\x. g x *\<^sub>R f x) integrable_on cbox a b \ + (\n. integral (cbox a b) (\ n)) \ integral (cbox a b) (\x. g x *\<^sub>R f x)" + proof (rule equiintegrable_limit) + have \: "((\n. \x. (\k = Suc 0..n. if k / n \ g x then inverse n *\<^sub>R f x else 0)) ` {Suc 0..}) equiintegrable_on {a..b}" + proof - + have *: "(\c::real. {\x. if g x \ c then f x else 0}) equiintegrable_on {a..b}" + using SMVT_lemma2 [OF f g] . + show ?thesis + apply (rule equiintegrable_on_subset [OF equiintegrable_sum_real [OF *]], clarify) + apply (rule_tac a="{Suc 0..n}" in UN_I, force) + apply (rule_tac a="\k. inverse n" in UN_I, auto) + apply (rule_tac x="\k x. if real k / real n \ g x then f x else 0" in bexI) + apply (force intro: sum.cong)+ + done + qed + show "range \ equiintegrable_on cbox a b" + unfolding \_def + by (auto simp: non0 intro: equiintegrable_on_subset [OF \]) + show "(\n. \ n x) \ g x *\<^sub>R f x" + if x: "x \ cbox a b" for x + proof - + have eq: "\ n x = \ n x *\<^sub>R f x" for n + by (auto simp: \_def \_def sum_distrib_right if_distrib intro: sum.cong) + show ?thesis + unfolding eq + proof (rule tendsto_scaleR [OF _ tendsto_const]) + show "(\n. \ n x) \ g x" + unfolding lim_sequentially dist_real_def + proof (intro allI impI) + fix e :: real + assume "e > 0" + then obtain N where "N \ 0" "0 < inverse (real N)" and N: "inverse (real N) < e" + using real_arch_inverse by metis + moreover have "\\ n x - g x\ < inverse (real N)" if "n\N" for n + proof - + have "\g x - \ n x\ < inverse (real (\ n))" + unfolding \_def + proof (rule level_approx [of "{a..b}" g]) + show "\ n \ 0" + by (metis Suc_n_not_le_n non0) + qed (use x 01 non0 in auto) + also have "\ \ inverse N" + using seq_suble [OF \] \N \ 0\ non0 that by (auto intro: order_trans simp: divide_simps) + finally show ?thesis + by linarith + qed + ultimately show "\N. \n\N. \\ n x - g x\ < e" + using less_trans by blast + qed + qed + qed + qed + show thesis + proof + show "a \ d" "d \ b" + using \d \ {a..b}\ atLeastAtMost_iff by blast+ + show "((\x. g x *\<^sub>R f x) has_integral integral {d..b} f) {a..b}" + unfolding has_integral_iff + proof + show "(\x. g x *\<^sub>R f x) integrable_on {a..b}" + using ** by simp + show "integral {a..b} (\x. g x *\<^sub>R f x) = integral {d..b} f" + proof (rule tendsto_unique) + show "(\n. integral {c(\ n)..b} f) \ integral {a..b} (\x. g x *\<^sub>R f x)" + using ** by (simp add: c \_def) + show "(\n. integral {c(\ n)..b} f) \ integral {d..b} f" + using indefinite_integral_continuous_1' [OF f] + using d unfolding o_def + apply (simp add: continuous_on_eq_continuous_within) + apply (drule_tac x=d in bspec) + using \d \ {a..b}\ apply blast + apply (simp add: continuous_within_sequentially o_def) + using cab by auto + qed auto + qed + qed +qed + + +theorem second_mean_value_theorem_full: + fixes f :: "real \ real" + assumes f: "f integrable_on {a..b}" and "a \ b" + and g: "\x y. \a \ x; x \ y; y \ b\ \ g x \ g y" + obtains c where "c \ {a..b}" + and "((\x. g x * f x) has_integral (g a * integral {a..c} f + g b * integral {c..b} f)) {a..b}" +proof - + have gab: "g a \ g b" + using \a \ b\ g by blast + then consider "g a < g b" | "g a = g b" + by linarith + then show thesis + proof cases + case 1 + define h where "h \ \x. if x < a then 0 else if b < x then 1 + else (g x - g a) / (g b - g a)" + obtain c where "a \ c" "c \ b" and c: "((\x. h x *\<^sub>R f x) has_integral integral {c..b} f) {a..b}" + proof (rule SMVT_lemma4 [OF f \a \ b\, of h]) + show "h x \ h y" "0 \ h x \ h x \ 1" if "x \ y" for x y + using that gab by (auto simp: divide_simps g h_def) + qed + show ?thesis + proof + show "c \ {a..b}" + using \a \ c\ \c \ b\ by auto + have I: "((\x. g x * f x - g a * f x) has_integral (g b - g a) * integral {c..b} f) {a..b}" + proof (subst has_integral_cong) + show "g x * f x - g a * f x = (g b - g a) * h x *\<^sub>R f x" + if "x \ {a..b}" for x + using 1 that by (simp add: h_def divide_simps algebra_simps) + show "((\x. (g b - g a) * h x *\<^sub>R f x) has_integral (g b - g a) * integral {c..b} f) {a..b}" + using has_integral_mult_right [OF c, of "g b - g a"] . + qed + have II: "((\x. g a * f x) has_integral g a * integral {a..b} f) {a..b}" + using has_integral_mult_right [where c = "g a", OF integrable_integral [OF f]] . + have "((\x. g x * f x) has_integral (g b - g a) * integral {c..b} f + g a * integral {a..b} f) {a..b}" + using has_integral_add [OF I II] by simp + then show "((\x. g x * f x) has_integral g a * integral {a..c} f + g b * integral {c..b} f) {a..b}" + by (simp add: algebra_simps flip: integral_combine [OF \a \ c\ \c \ b\ f]) + qed + next + case 2 + show ?thesis + proof + show "a \ {a..b}" + by (simp add: \a \ b\) + have "((\x. g x * f x) has_integral g a * integral {a..b} f) {a..b}" + proof (rule has_integral_eq) + show "((\x. g a * f x) has_integral g a * integral {a..b} f) {a..b}" + using f has_integral_mult_right by blast + show "g a * f x = g x * f x" + if "x \ {a..b}" for x + by (metis atLeastAtMost_iff g less_eq_real_def not_le that 2) + qed + then show "((\x. g x * f x) has_integral g a * integral {a..a} f + g b * integral {a..b} f) {a..b}" + by (simp add: 2) + qed + qed +qed + + +corollary second_mean_value_theorem: + fixes f :: "real \ real" + assumes f: "f integrable_on {a..b}" and "a \ b" + and g: "\x y. \a \ x; x \ y; y \ b\ \ g x \ g y" + obtains c where "c \ {a..b}" + "integral {a..b} (\x. g x * f x) + = g a * integral {a..c} f + g b * integral {c..b} f" + using second_mean_value_theorem_full [where g=g, OF assms] + by (metis (full_types) integral_unique) + + end diff -r 2970fdc230cc -r 87dffe9700bd src/HOL/Analysis/Lebesgue_Measure.thy --- a/src/HOL/Analysis/Lebesgue_Measure.thy Fri Aug 16 11:40:13 2019 +0200 +++ b/src/HOL/Analysis/Lebesgue_Measure.thy Fri Aug 16 12:53:47 2019 +0100 @@ -396,6 +396,14 @@ using major by auto qed +lemma integral_eq_zero_null_sets: + assumes "S \ null_sets lebesgue" + shows "integral\<^sup>L (lebesgue_on S) f = 0" +proof (rule integral_eq_zero_AE) + show "AE x in lebesgue_on S. f x = 0" + by (metis (no_types, lifting) assms AE_not_in lebesgue_on_mono null_setsD2 null_sets_restrict_space order_refl) +qed + lemma shows sets_lborel[simp, measurable_cong]: "sets lborel = sets borel" and space_lborel[simp]: "space lborel = space borel" @@ -846,6 +854,26 @@ finally show "lebesgue = density (distr lebesgue lebesgue T) (\_. (\j\Basis. \c j\))" . qed +corollary lebesgue_real_affine: + "c \ 0 \ lebesgue = density (distr lebesgue lebesgue (\x. t + c * x)) (\_. ennreal (abs c))" + using lebesgue_affine_euclidean [where c= "\x::real. c"] by simp + +lemma nn_integral_real_affine_lebesgue: + fixes c :: real assumes f[measurable]: "f \ borel_measurable lebesgue" and c: "c \ 0" + shows "(\\<^sup>+x. f x \lebesgue) = ennreal\c\ * (\\<^sup>+x. f(t + c * x) \lebesgue)" +proof - + have "(\\<^sup>+x. f x \lebesgue) = (\\<^sup>+x. f x \density (distr lebesgue lebesgue (\x. t + c * x)) (\x. ennreal \c\))" + using lebesgue_real_affine c by auto + also have "\ = \\<^sup>+ x. ennreal \c\ * f x \distr lebesgue lebesgue (\x. t + c * x)" + by (subst nn_integral_density) auto + also have "\ = ennreal \c\ * integral\<^sup>N (distr lebesgue lebesgue (\x. t + c * x)) f" + using f measurable_distr_eq1 nn_integral_cmult by blast + also have "\ = \c\ * (\\<^sup>+x. f(t + c * x) \lebesgue)" + using lebesgue_affine_measurable[where c= "\x::real. c"] + by (subst nn_integral_distr) (force+) + finally show ?thesis . +qed + lemma lebesgue_measurable_scaling[measurable]: "(*\<^sub>R) x \ lebesgue \\<^sub>M lebesgue" proof cases assume "x = 0"