765 also have "\<dots> = density (distr lebesgue lebesgue T) (\<lambda>_. (\<Prod>j\<in>Basis. \<bar>c j\<bar>))" |
765 also have "\<dots> = density (distr lebesgue lebesgue T) (\<lambda>_. (\<Prod>j\<in>Basis. \<bar>c j\<bar>))" |
766 by (subst completion.completion_distr_eq) (auto simp: eq measurable_completion) |
766 by (subst completion.completion_distr_eq) (auto simp: eq measurable_completion) |
767 finally show "lebesgue = density (distr lebesgue lebesgue T) (\<lambda>_. (\<Prod>j\<in>Basis. \<bar>c j\<bar>))" . |
767 finally show "lebesgue = density (distr lebesgue lebesgue T) (\<lambda>_. (\<Prod>j\<in>Basis. \<bar>c j\<bar>))" . |
768 qed |
768 qed |
769 |
769 |
770 lemma lebesgue_measurable_scaling[measurable]: "( *\<^sub>R) x \<in> lebesgue \<rightarrow>\<^sub>M lebesgue" |
770 lemma lebesgue_measurable_scaling[measurable]: "(*\<^sub>R) x \<in> lebesgue \<rightarrow>\<^sub>M lebesgue" |
771 proof cases |
771 proof cases |
772 assume "x = 0" |
772 assume "x = 0" |
773 then have "( *\<^sub>R) x = (\<lambda>x. 0::'a)" |
773 then have "(*\<^sub>R) x = (\<lambda>x. 0::'a)" |
774 by (auto simp: fun_eq_iff) |
774 by (auto simp: fun_eq_iff) |
775 then show ?thesis by auto |
775 then show ?thesis by auto |
776 next |
776 next |
777 assume "x \<noteq> 0" then show ?thesis |
777 assume "x \<noteq> 0" then show ?thesis |
778 using lebesgue_affine_measurable[of "\<lambda>_. x" 0] |
778 using lebesgue_affine_measurable[of "\<lambda>_. x" 0] |
858 by (subst lborel_real_affine[of "-1" 0]) |
858 by (subst lborel_real_affine[of "-1" 0]) |
859 (auto simp: density_1 one_ennreal_def[symmetric]) |
859 (auto simp: density_1 one_ennreal_def[symmetric]) |
860 |
860 |
861 lemma lborel_distr_mult: |
861 lemma lborel_distr_mult: |
862 assumes "(c::real) \<noteq> 0" |
862 assumes "(c::real) \<noteq> 0" |
863 shows "distr lborel borel (( * ) c) = density lborel (\<lambda>_. inverse \<bar>c\<bar>)" |
863 shows "distr lborel borel ((*) c) = density lborel (\<lambda>_. inverse \<bar>c\<bar>)" |
864 proof- |
864 proof- |
865 have "distr lborel borel (( * ) c) = distr lborel lborel (( * ) c)" by (simp cong: distr_cong) |
865 have "distr lborel borel ((*) c) = distr lborel lborel ((*) c)" by (simp cong: distr_cong) |
866 also from assms have "... = density lborel (\<lambda>_. inverse \<bar>c\<bar>)" |
866 also from assms have "... = density lborel (\<lambda>_. inverse \<bar>c\<bar>)" |
867 by (subst lborel_real_affine[of "inverse c" 0]) (auto simp: o_def distr_density_distr) |
867 by (subst lborel_real_affine[of "inverse c" 0]) (auto simp: o_def distr_density_distr) |
868 finally show ?thesis . |
868 finally show ?thesis . |
869 qed |
869 qed |
870 |
870 |
871 lemma lborel_distr_mult': |
871 lemma lborel_distr_mult': |
872 assumes "(c::real) \<noteq> 0" |
872 assumes "(c::real) \<noteq> 0" |
873 shows "lborel = density (distr lborel borel (( * ) c)) (\<lambda>_. \<bar>c\<bar>)" |
873 shows "lborel = density (distr lborel borel ((*) c)) (\<lambda>_. \<bar>c\<bar>)" |
874 proof- |
874 proof- |
875 have "lborel = density lborel (\<lambda>_. 1)" by (rule density_1[symmetric]) |
875 have "lborel = density lborel (\<lambda>_. 1)" by (rule density_1[symmetric]) |
876 also from assms have "(\<lambda>_. 1 :: ennreal) = (\<lambda>_. inverse \<bar>c\<bar> * \<bar>c\<bar>)" by (intro ext) simp |
876 also from assms have "(\<lambda>_. 1 :: ennreal) = (\<lambda>_. inverse \<bar>c\<bar> * \<bar>c\<bar>)" by (intro ext) simp |
877 also have "density lborel ... = density (density lborel (\<lambda>_. inverse \<bar>c\<bar>)) (\<lambda>_. \<bar>c\<bar>)" |
877 also have "density lborel ... = density (density lborel (\<lambda>_. inverse \<bar>c\<bar>)) (\<lambda>_. \<bar>c\<bar>)" |
878 by (subst density_density_eq) (auto simp: ennreal_mult) |
878 by (subst density_density_eq) (auto simp: ennreal_mult) |
879 also from assms have "density lborel (\<lambda>_. inverse \<bar>c\<bar>) = distr lborel borel (( * ) c)" |
879 also from assms have "density lborel (\<lambda>_. inverse \<bar>c\<bar>) = distr lborel borel ((*) c)" |
880 by (rule lborel_distr_mult[symmetric]) |
880 by (rule lborel_distr_mult[symmetric]) |
881 finally show ?thesis . |
881 finally show ?thesis . |
882 qed |
882 qed |
883 |
883 |
884 lemma lborel_distr_plus: "distr lborel borel ((+) c) = (lborel :: real measure)" |
884 lemma lborel_distr_plus: "distr lborel borel ((+) c) = (lborel :: real measure)" |
1117 obtain M where "0 < M" "S \<subseteq> ball 0 M" |
1117 obtain M where "0 < M" "S \<subseteq> ball 0 M" |
1118 using \<open>bounded S\<close> by (auto dest: bounded_subset_ballD) |
1118 using \<open>bounded S\<close> by (auto dest: bounded_subset_ballD) |
1119 |
1119 |
1120 let ?f = "\<lambda>n. root DIM('a) (Suc n)" |
1120 let ?f = "\<lambda>n. root DIM('a) (Suc n)" |
1121 |
1121 |
1122 have vimage_eq_image: "( *\<^sub>R) (?f n) -` S = ( *\<^sub>R) (1 / ?f n) ` S" for n |
1122 have vimage_eq_image: "(*\<^sub>R) (?f n) -` S = (*\<^sub>R) (1 / ?f n) ` S" for n |
1123 apply safe |
1123 apply safe |
1124 subgoal for x by (rule image_eqI[of _ _ "?f n *\<^sub>R x"]) auto |
1124 subgoal for x by (rule image_eqI[of _ _ "?f n *\<^sub>R x"]) auto |
1125 subgoal by auto |
1125 subgoal by auto |
1126 done |
1126 done |
1127 |
1127 |
1139 have "(\<Sum>n. ennreal (1 / Suc n)) = top" |
1139 have "(\<Sum>n. ennreal (1 / Suc n)) = top" |
1140 using not_summable_harmonic[where 'a=real] summable_Suc_iff[where f="\<lambda>n. 1 / (real n)"] |
1140 using not_summable_harmonic[where 'a=real] summable_Suc_iff[where f="\<lambda>n. 1 / (real n)"] |
1141 by (intro summable_iff_suminf_neq_top) (auto simp add: inverse_eq_divide) |
1141 by (intro summable_iff_suminf_neq_top) (auto simp add: inverse_eq_divide) |
1142 then have "top * emeasure lebesgue S = (\<Sum>n. (1 / ?f n)^DIM('a) * emeasure lebesgue S)" |
1142 then have "top * emeasure lebesgue S = (\<Sum>n. (1 / ?f n)^DIM('a) * emeasure lebesgue S)" |
1143 unfolding ennreal_suminf_multc eq by simp |
1143 unfolding ennreal_suminf_multc eq by simp |
1144 also have "\<dots> = (\<Sum>n. emeasure lebesgue (( *\<^sub>R) (?f n) -` S))" |
1144 also have "\<dots> = (\<Sum>n. emeasure lebesgue ((*\<^sub>R) (?f n) -` S))" |
1145 unfolding vimage_eq_image using emeasure_lebesgue_affine[of "1 / ?f n" 0 S for n] by simp |
1145 unfolding vimage_eq_image using emeasure_lebesgue_affine[of "1 / ?f n" 0 S for n] by simp |
1146 also have "\<dots> = emeasure lebesgue (\<Union>n. ( *\<^sub>R) (?f n) -` S)" |
1146 also have "\<dots> = emeasure lebesgue (\<Union>n. (*\<^sub>R) (?f n) -` S)" |
1147 proof (intro suminf_emeasure) |
1147 proof (intro suminf_emeasure) |
1148 show "disjoint_family (\<lambda>n. ( *\<^sub>R) (?f n) -` S)" |
1148 show "disjoint_family (\<lambda>n. (*\<^sub>R) (?f n) -` S)" |
1149 unfolding disjoint_family_on_def |
1149 unfolding disjoint_family_on_def |
1150 proof safe |
1150 proof safe |
1151 fix m n :: nat and x assume "m \<noteq> n" "?f m *\<^sub>R x \<in> S" "?f n *\<^sub>R x \<in> S" |
1151 fix m n :: nat and x assume "m \<noteq> n" "?f m *\<^sub>R x \<in> S" "?f n *\<^sub>R x \<in> S" |
1152 with eq1[of "?f m / ?f n" "?f n *\<^sub>R x"] show "x \<in> {}" |
1152 with eq1[of "?f m / ?f n" "?f n *\<^sub>R x"] show "x \<in> {}" |
1153 by auto |
1153 by auto |
1154 qed |
1154 qed |
1155 have "( *\<^sub>R) (?f i) -` S \<in> sets lebesgue" for i |
1155 have "(*\<^sub>R) (?f i) -` S \<in> sets lebesgue" for i |
1156 using measurable_sets[OF lebesgue_measurable_scaling[of "?f i"] S] by auto |
1156 using measurable_sets[OF lebesgue_measurable_scaling[of "?f i"] S] by auto |
1157 then show "range (\<lambda>i. ( *\<^sub>R) (?f i) -` S) \<subseteq> sets lebesgue" |
1157 then show "range (\<lambda>i. (*\<^sub>R) (?f i) -` S) \<subseteq> sets lebesgue" |
1158 by auto |
1158 by auto |
1159 qed |
1159 qed |
1160 also have "\<dots> \<le> emeasure lebesgue (ball 0 M :: 'a set)" |
1160 also have "\<dots> \<le> emeasure lebesgue (ball 0 M :: 'a set)" |
1161 using less_M by (intro emeasure_mono) auto |
1161 using less_M by (intro emeasure_mono) auto |
1162 also have "\<dots> < top" |
1162 also have "\<dots> < top" |