src/HOL/Analysis/Lebesgue_Measure.thy
changeset 69064 5840724b1d71
parent 68403 223172b97d0b
child 69260 0a9688695a1b
equal deleted inserted replaced
69045:8c240fdeffcb 69064:5840724b1d71
   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"