src/HOL/Analysis/Bochner_Integration.thy
changeset 68046 6aba668aea78
parent 67399 eab6ce8368fa
child 68073 fad29d2a17a5
equal deleted inserted replaced
68041:d45b78cb86cf 68046:6aba668aea78
   472   with f have "simple_bochner_integral M f = (\<integral>\<^sup>Sx. f x \<partial>M)"
   472   with f have "simple_bochner_integral M f = (\<integral>\<^sup>Sx. f x \<partial>M)"
   473     unfolding simple_integral_def
   473     unfolding simple_integral_def
   474     by (subst simple_bochner_integral_partition[OF f(1), where g="\<lambda>x. ennreal (f x)" and v=enn2real])
   474     by (subst simple_bochner_integral_partition[OF f(1), where g="\<lambda>x. ennreal (f x)" and v=enn2real])
   475        (auto intro: f simple_function_compose1 elim: simple_bochner_integrable.cases
   475        (auto intro: f simple_function_compose1 elim: simple_bochner_integrable.cases
   476              intro!: sum.cong ennreal_cong_mult
   476              intro!: sum.cong ennreal_cong_mult
   477              simp: sum_ennreal[symmetric] ac_simps ennreal_mult
   477              simp: ac_simps ennreal_mult
   478              simp del: sum_ennreal)
   478              reorient: sum_ennreal)
   479   also have "\<dots> = (\<integral>\<^sup>+x. f x \<partial>M)"
   479   also have "\<dots> = (\<integral>\<^sup>+x. f x \<partial>M)"
   480     using f
   480     using f
   481     by (intro nn_integral_eq_simple_integral[symmetric])
   481     by (intro nn_integral_eq_simple_integral[symmetric])
   482        (auto simp: simple_function_compose1 simple_bochner_integrable.simps)
   482        (auto simp: simple_function_compose1 simple_bochner_integrable.simps)
   483   finally show ?thesis .
   483   finally show ?thesis .
   501     by (auto intro!: simple_bochner_integral_norm_bound)
   501     by (auto intro!: simple_bochner_integral_norm_bound)
   502   also have "\<dots> = (\<integral>\<^sup>+x. norm (s x - t x) \<partial>M)"
   502   also have "\<dots> = (\<integral>\<^sup>+x. norm (s x - t x) \<partial>M)"
   503     using simple_bochner_integrable_compose2[of "\<lambda>x y. norm (x - y)" M "s" "t"] s t
   503     using simple_bochner_integrable_compose2[of "\<lambda>x y. norm (x - y)" M "s" "t"] s t
   504     by (auto intro!: simple_bochner_integral_eq_nn_integral)
   504     by (auto intro!: simple_bochner_integral_eq_nn_integral)
   505   also have "\<dots> \<le> (\<integral>\<^sup>+x. ennreal (norm (f x - s x)) + ennreal (norm (f x - t x)) \<partial>M)"
   505   also have "\<dots> \<le> (\<integral>\<^sup>+x. ennreal (norm (f x - s x)) + ennreal (norm (f x - t x)) \<partial>M)"
   506     by (auto intro!: nn_integral_mono simp: ennreal_plus[symmetric] simp del: ennreal_plus)
   506     by (auto intro!: nn_integral_mono reorient: ennreal_plus)
   507        (metis (erased, hide_lams) add_diff_cancel_left add_diff_eq diff_add_eq order_trans
   507        (metis (erased, hide_lams) add_diff_cancel_left add_diff_eq diff_add_eq order_trans
   508               norm_minus_commute norm_triangle_ineq4 order_refl)
   508               norm_minus_commute norm_triangle_ineq4 order_refl)
   509   also have "\<dots> = ?S + ?T"
   509   also have "\<dots> = ?S + ?T"
   510    by (rule nn_integral_add) auto
   510    by (rule nn_integral_add) auto
   511   finally show ?thesis .
   511   finally show ?thesis .
   591     show "eventually (\<lambda>i. ?f i \<le> (\<integral>\<^sup>+ x. (norm (f x - sf i x)) \<partial>M) + \<integral>\<^sup>+ x. (norm (g x - sg i x)) \<partial>M) sequentially"
   591     show "eventually (\<lambda>i. ?f i \<le> (\<integral>\<^sup>+ x. (norm (f x - sf i x)) \<partial>M) + \<integral>\<^sup>+ x. (norm (g x - sg i x)) \<partial>M) sequentially"
   592       (is "eventually (\<lambda>i. ?f i \<le> ?g i) sequentially")
   592       (is "eventually (\<lambda>i. ?f i \<le> ?g i) sequentially")
   593     proof (intro always_eventually allI)
   593     proof (intro always_eventually allI)
   594       fix i have "?f i \<le> (\<integral>\<^sup>+ x. (norm (f x - sf i x)) + ennreal (norm (g x - sg i x)) \<partial>M)"
   594       fix i have "?f i \<le> (\<integral>\<^sup>+ x. (norm (f x - sf i x)) + ennreal (norm (g x - sg i x)) \<partial>M)"
   595         by (auto intro!: nn_integral_mono norm_diff_triangle_ineq
   595         by (auto intro!: nn_integral_mono norm_diff_triangle_ineq
   596                  simp del: ennreal_plus simp add: ennreal_plus[symmetric])
   596                  reorient: ennreal_plus)
   597       also have "\<dots> = ?g i"
   597       also have "\<dots> = ?g i"
   598         by (intro nn_integral_add) auto
   598         by (intro nn_integral_add) auto
   599       finally show "?f i \<le> ?g i" .
   599       finally show "?f i \<le> ?g i" .
   600     qed
   600     qed
   601     show "?g \<longlonglongrightarrow> 0"
   601     show "?g \<longlonglongrightarrow> 0"
   744   also have "\<dots> < \<infinity>"
   744   also have "\<dots> < \<infinity>"
   745     using s by (subst nn_integral_cmult_indicator) (auto simp: \<open>0 \<le> m\<close> simple_bochner_integrable.simps ennreal_mult_less_top less_top)
   745     using s by (subst nn_integral_cmult_indicator) (auto simp: \<open>0 \<le> m\<close> simple_bochner_integrable.simps ennreal_mult_less_top less_top)
   746   finally have s_fin: "(\<integral>\<^sup>+x. norm (s i x) \<partial>M) < \<infinity>" .
   746   finally have s_fin: "(\<integral>\<^sup>+x. norm (s i x) \<partial>M) < \<infinity>" .
   747 
   747 
   748   have "(\<integral>\<^sup>+ x. norm (f x) \<partial>M) \<le> (\<integral>\<^sup>+ x. ennreal (norm (f x - s i x)) + ennreal (norm (s i x)) \<partial>M)"
   748   have "(\<integral>\<^sup>+ x. norm (f x) \<partial>M) \<le> (\<integral>\<^sup>+ x. ennreal (norm (f x - s i x)) + ennreal (norm (s i x)) \<partial>M)"
   749     by (auto intro!: nn_integral_mono simp del: ennreal_plus simp add: ennreal_plus[symmetric])
   749     by (auto intro!: nn_integral_mono reorient: ennreal_plus)
   750        (metis add.commute norm_triangle_sub)
   750        (metis add.commute norm_triangle_sub)
   751   also have "\<dots> = (\<integral>\<^sup>+x. norm (f x - s i x) \<partial>M) + (\<integral>\<^sup>+x. norm (s i x) \<partial>M)"
   751   also have "\<dots> = (\<integral>\<^sup>+x. norm (f x - s i x) \<partial>M) + (\<integral>\<^sup>+x. norm (s i x) \<partial>M)"
   752     by (rule nn_integral_add) auto
   752     by (rule nn_integral_add) auto
   753   also have "\<dots> < \<infinity>"
   753   also have "\<dots> < \<infinity>"
   754     using s_fin f_s_fin by auto
   754     using s_fin f_s_fin by auto
   780         by (auto intro!: simple_bochner_integral_norm_bound)
   780         by (auto intro!: simple_bochner_integral_norm_bound)
   781       also have "\<dots> = (\<integral>\<^sup>+x. norm (s n x) \<partial>M)"
   781       also have "\<dots> = (\<integral>\<^sup>+x. norm (s n x) \<partial>M)"
   782         by (intro simple_bochner_integral_eq_nn_integral)
   782         by (intro simple_bochner_integral_eq_nn_integral)
   783            (auto intro: s simple_bochner_integrable_compose2)
   783            (auto intro: s simple_bochner_integrable_compose2)
   784       also have "\<dots> \<le> (\<integral>\<^sup>+x. ennreal (norm (f x - s n x)) + norm (f x) \<partial>M)"
   784       also have "\<dots> \<le> (\<integral>\<^sup>+x. ennreal (norm (f x - s n x)) + norm (f x) \<partial>M)"
   785         by (auto intro!: nn_integral_mono simp del: ennreal_plus simp add: ennreal_plus[symmetric])
   785         by (auto intro!: nn_integral_mono reorient: ennreal_plus)
   786            (metis add.commute norm_minus_commute norm_triangle_sub)
   786            (metis add.commute norm_minus_commute norm_triangle_sub)
   787       also have "\<dots> = ?t n"
   787       also have "\<dots> = ?t n"
   788         by (rule nn_integral_add) auto
   788         by (rule nn_integral_add) auto
   789       finally show "norm (?s n) \<le> ?t n" .
   789       finally show "norm (?s n) \<le> ?t n" .
   790     qed
   790     qed
   825       by (intro always_eventually allI simple_bochner_integral_bounded s t f)
   825       by (intro always_eventually allI simple_bochner_integral_bounded s t f)
   826     show "(\<lambda>i. ?S i + ?T i) \<longlonglongrightarrow> ennreal 0"
   826     show "(\<lambda>i. ?S i + ?T i) \<longlonglongrightarrow> ennreal 0"
   827       using tendsto_add[OF \<open>?S \<longlonglongrightarrow> 0\<close> \<open>?T \<longlonglongrightarrow> 0\<close>] by simp
   827       using tendsto_add[OF \<open>?S \<longlonglongrightarrow> 0\<close> \<open>?T \<longlonglongrightarrow> 0\<close>] by simp
   828   qed
   828   qed
   829   then have "(\<lambda>i. norm (?s i - ?t i)) \<longlonglongrightarrow> 0"
   829   then have "(\<lambda>i. norm (?s i - ?t i)) \<longlonglongrightarrow> 0"
   830     by (simp add: ennreal_0[symmetric] del: ennreal_0)
   830     by (simp reorient: ennreal_0)
   831   ultimately have "norm (x - y) = 0"
   831   ultimately have "norm (x - y) = 0"
   832     by (rule LIMSEQ_unique)
   832     by (rule LIMSEQ_unique)
   833   then show "x = y" by simp
   833   then show "x = y" by simp
   834 qed
   834 qed
   835 
   835 
  1171         using M[OF n] by auto
  1171         using M[OF n] by auto
  1172       have "norm (?s n - ?s m) \<le> ?S n + ?S m"
  1172       have "norm (?s n - ?s m) \<le> ?S n + ?S m"
  1173         by (intro simple_bochner_integral_bounded s f)
  1173         by (intro simple_bochner_integral_bounded s f)
  1174       also have "\<dots> < ennreal (e / 2) + e / 2"
  1174       also have "\<dots> < ennreal (e / 2) + e / 2"
  1175         by (intro add_strict_mono M n m)
  1175         by (intro add_strict_mono M n m)
  1176       also have "\<dots> = e" using \<open>0<e\<close> by (simp del: ennreal_plus add: ennreal_plus[symmetric])
  1176       also have "\<dots> = e" using \<open>0<e\<close> by (simp reorient: ennreal_plus)
  1177       finally show "dist (?s n) (?s m) < e"
  1177       finally show "dist (?s n) (?s m) < e"
  1178         using \<open>0<e\<close> by (simp add: dist_norm ennreal_less_iff)
  1178         using \<open>0<e\<close> by (simp add: dist_norm ennreal_less_iff)
  1179     qed
  1179     qed
  1180   qed
  1180   qed
  1181   then obtain x where "?s \<longlonglongrightarrow> x" ..
  1181   then obtain x where "?s \<longlonglongrightarrow> x" ..
  1216       using u'
  1216       using u'
  1217     proof eventually_elim
  1217     proof eventually_elim
  1218       fix x assume "(\<lambda>i. u i x) \<longlonglongrightarrow> u' x"
  1218       fix x assume "(\<lambda>i. u i x) \<longlonglongrightarrow> u' x"
  1219       from tendsto_diff[OF tendsto_const[of "u' x"] this]
  1219       from tendsto_diff[OF tendsto_const[of "u' x"] this]
  1220       show "(\<lambda>i. ennreal (norm (u' x - u i x))) \<longlonglongrightarrow> 0"
  1220       show "(\<lambda>i. ennreal (norm (u' x - u i x))) \<longlonglongrightarrow> 0"
  1221         by (simp add: tendsto_norm_zero_iff ennreal_0[symmetric] del: ennreal_0)
  1221         by (simp add: tendsto_norm_zero_iff reorient: ennreal_0)
  1222     qed
  1222     qed
  1223   qed (insert bnd w_nonneg, auto)
  1223   qed (insert bnd w_nonneg, auto)
  1224   then show ?thesis by simp
  1224   then show ?thesis by simp
  1225 qed
  1225 qed
  1226 
  1226 
  2114     }
  2114     }
  2115     then show "eventually (\<lambda>n. norm((\<integral>x. u n x \<partial>M) - (\<integral>x. f x \<partial>M)) \<le> (\<integral>\<^sup>+x. norm(u n x - f x) \<partial>M)) F"
  2115     then show "eventually (\<lambda>n. norm((\<integral>x. u n x \<partial>M) - (\<integral>x. f x \<partial>M)) \<le> (\<integral>\<^sup>+x. norm(u n x - f x) \<partial>M)) F"
  2116       by auto
  2116       by auto
  2117   qed
  2117   qed
  2118   then have "((\<lambda>n. norm((\<integral>x. u n x \<partial>M) - (\<integral>x. f x \<partial>M))) \<longlongrightarrow> 0) F"
  2118   then have "((\<lambda>n. norm((\<integral>x. u n x \<partial>M) - (\<integral>x. f x \<partial>M))) \<longlongrightarrow> 0) F"
  2119     by (simp add: ennreal_0[symmetric] del: ennreal_0)
  2119     by (simp reorient: ennreal_0)
  2120   then have "((\<lambda>n. ((\<integral>x. u n x \<partial>M) - (\<integral>x. f x \<partial>M))) \<longlongrightarrow> 0) F" using tendsto_norm_zero_iff by blast
  2120   then have "((\<lambda>n. ((\<integral>x. u n x \<partial>M) - (\<integral>x. f x \<partial>M))) \<longlongrightarrow> 0) F" using tendsto_norm_zero_iff by blast
  2121   then show ?thesis using Lim_null by auto
  2121   then show ?thesis using Lim_null by auto
  2122 qed
  2122 qed
  2123 
  2123 
  2124 text \<open>The next lemma asserts that, if a sequence of functions converges in $L^1$, then
  2124 text \<open>The next lemma asserts that, if a sequence of functions converges in $L^1$, then
  2212     moreover then have "liminf (\<lambda>n. ennreal (norm(u (r n) x))) \<le> 0"
  2212     moreover then have "liminf (\<lambda>n. ennreal (norm(u (r n) x))) \<le> 0"
  2213       by (rule order_trans[rotated]) (auto intro: Liminf_le_Limsup)
  2213       by (rule order_trans[rotated]) (auto intro: Liminf_le_Limsup)
  2214     ultimately have "(\<lambda>n. ennreal (norm(u (r n) x))) \<longlonglongrightarrow> 0"
  2214     ultimately have "(\<lambda>n. ennreal (norm(u (r n) x))) \<longlonglongrightarrow> 0"
  2215       using tendsto_Limsup[of sequentially "\<lambda>n. ennreal (norm(u (r n) x))"] by auto
  2215       using tendsto_Limsup[of sequentially "\<lambda>n. ennreal (norm(u (r n) x))"] by auto
  2216     then have "(\<lambda>n. norm(u (r n) x)) \<longlonglongrightarrow> 0"
  2216     then have "(\<lambda>n. norm(u (r n) x)) \<longlonglongrightarrow> 0"
  2217       by (simp add: ennreal_0[symmetric] del: ennreal_0)
  2217       by (simp reorient: ennreal_0)
  2218     then have "(\<lambda>n. u (r n) x) \<longlonglongrightarrow> 0"
  2218     then have "(\<lambda>n. u (r n) x) \<longlonglongrightarrow> 0"
  2219       by (simp add: tendsto_norm_zero_iff)
  2219       by (simp add: tendsto_norm_zero_iff)
  2220   }
  2220   }
  2221   ultimately have "AE x in M. (\<lambda>n. u (r n) x) \<longlonglongrightarrow> 0" by auto
  2221   ultimately have "AE x in M. (\<lambda>n. u (r n) x) \<longlonglongrightarrow> 0" by auto
  2222   then show ?thesis using \<open>strict_mono r\<close> by auto
  2222   then show ?thesis using \<open>strict_mono r\<close> by auto