src/HOL/Probability/Sinc_Integral.thy
changeset 79599 2c18ac57e92e
parent 75462 7448423e5dba
child 80175 200107cdd3ac
equal deleted inserted replaced
79598:66cbd1ef0db1 79599:2c18ac57e92e
   214   have int: "set_integrable lborel {0<..} (\<lambda>x. exp (- x) * (x + 1) :: real)"
   214   have int: "set_integrable lborel {0<..} (\<lambda>x. exp (- x) * (x + 1) :: real)"
   215     unfolding distrib_left
   215     unfolding distrib_left
   216     using has_bochner_integral_I0i_power_exp_m[of 0] has_bochner_integral_I0i_power_exp_m[of 1]
   216     using has_bochner_integral_I0i_power_exp_m[of 0] has_bochner_integral_I0i_power_exp_m[of 1]
   217     by (intro set_integral_add) (auto dest!: integrable.intros simp: ac_simps set_integrable_def)
   217     by (intro set_integral_add) (auto dest!: integrable.intros simp: ac_simps set_integrable_def)
   218 
   218 
   219   have "((\<lambda>t::real. LBINT x:{0<..}. ?F x t) \<longlongrightarrow> LBINT x::real:{0<..}. 0) at_top"
   219   have "((\<lambda>t::real. LBINT x:{0<..}. ?F x t) \<longlongrightarrow> (LBINT x::real:{0<..}. 0)) at_top"
   220     unfolding set_lebesgue_integral_def
   220     unfolding set_lebesgue_integral_def
   221   proof (rule integral_dominated_convergence_at_top[OF _ _ int [unfolded set_integrable_def]], 
   221   proof (rule integral_dominated_convergence_at_top[OF _ _ int [unfolded set_integrable_def]], 
   222          simp_all del: abs_divide split: split_indicator)
   222          simp_all del: abs_divide split: split_indicator)
   223     have *: "0 < x \<Longrightarrow> \<bar>x * sin t + cos t\<bar> / (1 + x\<^sup>2) \<le> (x * 1 + 1) / 1" for x t :: real
   223     have *: "0 < x \<Longrightarrow> \<bar>x * sin t + cos t\<bar> / (1 + x\<^sup>2) \<le> (x * 1 + 1) / 1" for x t :: real
   224       by (intro frac_le abs_triangle_ineq[THEN order_trans] add_mono)
   224       by (intro frac_le abs_triangle_ineq[THEN order_trans] add_mono)
   276   proof eventually_elim
   276   proof eventually_elim
   277     fix t :: real assume "t \<ge> 0"
   277     fix t :: real assume "t \<ge> 0"
   278     have "Si t = LBINT x=0..t. sin x * (LBINT u=0..\<infinity>. exp (-(u * x)))"
   278     have "Si t = LBINT x=0..t. sin x * (LBINT u=0..\<infinity>. exp (-(u * x)))"
   279       unfolding Si_def using \<open>0 \<le> t\<close>
   279       unfolding Si_def using \<open>0 \<le> t\<close>
   280       by (intro interval_integral_discrete_difference[where X="{0}"]) (auto simp: LBINT_I0i_exp_mscale)
   280       by (intro interval_integral_discrete_difference[where X="{0}"]) (auto simp: LBINT_I0i_exp_mscale)
   281     also have "\<dots> = LBINT x. (LBINT u=ereal 0..\<infinity>. indicator {0 <..< t} x *\<^sub>R sin x * exp (-(u * x)))"
   281     also have "\<dots> = (LBINT x. (LBINT u=ereal 0..\<infinity>. indicator {0 <..< t} x *\<^sub>R sin x * exp (-(u * x))))"
   282       using \<open>0\<le>t\<close> by (simp add: zero_ereal_def interval_lebesgue_integral_le_eq mult_ac set_lebesgue_integral_def)
   282       using \<open>0\<le>t\<close> by (simp add: zero_ereal_def interval_lebesgue_integral_le_eq mult_ac set_lebesgue_integral_def)
   283     also have "\<dots> = LBINT x. (LBINT u. indicator ({0<..} \<times> {0 <..< t}) (u, x) *\<^sub>R (sin x * exp (-(u * x))))"
   283     also have "\<dots> = (LBINT x. (LBINT u. indicator ({0<..} \<times> {0 <..< t}) (u, x) *\<^sub>R (sin x * exp (-(u * x)))))"
   284       apply (subst interval_integral_Ioi)
   284       apply (subst interval_integral_Ioi)
   285       unfolding set_lebesgue_integral_def  by(simp_all add: indicator_times ac_simps )
   285       unfolding set_lebesgue_integral_def  by(simp_all add: indicator_times ac_simps )
   286     also have "\<dots> = LBINT u. (LBINT x. indicator ({0<..} \<times> {0 <..< t}) (u, x) *\<^sub>R (sin x * exp (-(u * x))))"
   286     also have "\<dots> = (LBINT u. (LBINT x. indicator ({0<..} \<times> {0 <..< t}) (u, x) *\<^sub>R (sin x * exp (-(u * x)))))"
   287     proof (intro lborel_pair.Fubini_integral[symmetric] lborel_pair.Fubini_integrable)
   287     proof (intro lborel_pair.Fubini_integral[symmetric] lborel_pair.Fubini_integrable)
   288       show "(\<lambda>(x, y). indicator ({0<..} \<times> {0<..<t}) (y, x) *\<^sub>R (sin x * exp (- (y * x))))
   288       show "(\<lambda>(x, y). indicator ({0<..} \<times> {0<..<t}) (y, x) *\<^sub>R (sin x * exp (- (y * x))))
   289           \<in> borel_measurable (lborel \<Otimes>\<^sub>M lborel)" (is "?f \<in> borel_measurable _")
   289           \<in> borel_measurable (lborel \<Otimes>\<^sub>M lborel)" (is "?f \<in> borel_measurable _")
   290         by measurable
   290         by measurable
   291 
   291 
   292       have "AE x in lborel. indicator {0..t} x *\<^sub>R abs (sinc x) = LBINT y. norm (?f (x, y))"
   292       have "AE x in lborel. indicator {0..t} x *\<^sub>R abs (sinc x) = (LBINT y. norm (?f (x, y)))"
   293         using AE_lborel_singleton[of 0] AE_lborel_singleton[of t]
   293         using AE_lborel_singleton[of 0] AE_lborel_singleton[of t]
   294       proof eventually_elim
   294       proof eventually_elim
   295         fix x :: real assume x: "x \<noteq> 0" "x \<noteq> t"
   295         fix x :: real assume x: "x \<noteq> 0" "x \<noteq> t"
   296         have "LBINT y. \<bar>indicator ({0<..} \<times> {0<..<t}) (y, x) *\<^sub>R (sin x * exp (- (y * x)))\<bar> =
   296         have "(LBINT y. \<bar>indicator ({0<..} \<times> {0<..<t}) (y, x) *\<^sub>R (sin x * exp (- (y * x)))\<bar>) =
   297             LBINT y. \<bar>sin x\<bar> * exp (- (y * x)) * indicator {0<..} y * indicator {0<..<t} x"
   297               (LBINT y. \<bar>sin x\<bar> * exp (- (y * x)) * indicator {0<..} y * indicator {0<..<t} x)"
   298           by (intro Bochner_Integration.integral_cong) (auto split: split_indicator simp: abs_mult)
   298           by (intro Bochner_Integration.integral_cong) (auto split: split_indicator simp: abs_mult)
   299         also have "\<dots> = \<bar>sin x\<bar> * indicator {0<..<t} x * (LBINT y=0..\<infinity>.  exp (- (y * x)))"
   299         also have "\<dots> = \<bar>sin x\<bar> * indicator {0<..<t} x * (LBINT y=0..\<infinity>.  exp (- (y * x)))"
   300           by (cases "x > 0")
   300           by (cases "x > 0")
   301              (auto simp: field_simps interval_lebesgue_integral_0_infty set_lebesgue_integral_def split: split_indicator)
   301              (auto simp: field_simps interval_lebesgue_integral_0_infty set_lebesgue_integral_def split: split_indicator)
   302         also have "\<dots> = \<bar>sin x\<bar> * indicator {0<..<t} x * (1 / x)"
   302         also have "\<dots> = \<bar>sin x\<bar> * indicator {0<..<t} x * (1 / x)"
   303           by (cases "x > 0") (auto simp add: LBINT_I0i_exp_mscale)
   303           by (cases "x > 0") (auto simp add: LBINT_I0i_exp_mscale)
   304         also have "\<dots> = indicator {0..t} x *\<^sub>R \<bar>sinc x\<bar>"
   304         also have "\<dots> = indicator {0..t} x *\<^sub>R \<bar>sinc x\<bar>"
   305           using x by (simp add: field_simps split: split_indicator)
   305           using x by (simp add: field_simps split: split_indicator)
   306         finally show "indicator {0..t} x *\<^sub>R abs (sinc x) = LBINT y. norm (?f (x, y))"
   306         finally show "indicator {0..t} x *\<^sub>R abs (sinc x) = (LBINT y. norm (?f (x, y)))"
   307           by simp
   307           by simp
   308       qed
   308       qed
   309       moreover have "integrable lborel (\<lambda>x. indicat_real {0..t} x *\<^sub>R \<bar>sinc x\<bar>)"
   309       moreover have "integrable lborel (\<lambda>x. indicat_real {0..t} x *\<^sub>R \<bar>sinc x\<bar>)"
   310         by (auto intro!: borel_integrable_compact continuous_intros simp del: real_scaleR_def)
   310         by (auto intro!: borel_integrable_compact continuous_intros simp del: real_scaleR_def)
   311       ultimately show "integrable lborel (\<lambda>x. LBINT y. norm (?f (x, y)))"
   311       ultimately show "integrable lborel (\<lambda>x. LBINT y. norm (?f (x, y)))"
   314       have "0 < x \<Longrightarrow> set_integrable lborel {0<..} (\<lambda>y. sin x * exp (- (y * x)))" for x :: real
   314       have "0 < x \<Longrightarrow> set_integrable lborel {0<..} (\<lambda>y. sin x * exp (- (y * x)))" for x :: real
   315           by (intro set_integrable_mult_right integrable_I0i_exp_mscale)
   315           by (intro set_integrable_mult_right integrable_I0i_exp_mscale)
   316       then show "AE x in lborel. integrable lborel (\<lambda>y. ?f (x, y))"
   316       then show "AE x in lborel. integrable lborel (\<lambda>y. ?f (x, y))"
   317         by (intro AE_I2) (auto simp: indicator_times set_integrable_def split: split_indicator)
   317         by (intro AE_I2) (auto simp: indicator_times set_integrable_def split: split_indicator)
   318     qed
   318     qed
   319     also have "... = LBINT u=0..\<infinity>. (LBINT x=0..t. exp (-(u * x)) * sin x)"
   319     also have "... = (LBINT u=0..\<infinity>. (LBINT x=0..t. exp (-(u * x)) * sin x))"
   320       using \<open>0\<le>t\<close>
   320       using \<open>0\<le>t\<close>
   321       by (auto simp: interval_lebesgue_integral_def set_lebesgue_integral_def zero_ereal_def ac_simps
   321       by (auto simp: interval_lebesgue_integral_def set_lebesgue_integral_def zero_ereal_def ac_simps
   322                split: split_indicator intro!: Bochner_Integration.integral_cong)
   322                split: split_indicator intro!: Bochner_Integration.integral_cong)
   323     also have "\<dots> = LBINT u=0..\<infinity>. 1 / (1 + u\<^sup>2) - 1 / (1 + u\<^sup>2) * (exp (- (u * t)) * (u * sin t + cos t))"
   323     also have "\<dots> = (LBINT u=0..\<infinity>. 1 / (1 + u\<^sup>2) - 1 / (1 + u\<^sup>2) * (exp (- (u * t)) * (u * sin t + cos t)))"
   324       by (auto simp: divide_simps LBINT_I0c_exp_mscale_sin intro!: interval_integral_cong)
   324       by (auto simp: divide_simps LBINT_I0c_exp_mscale_sin intro!: interval_integral_cong)
   325     also have "... = pi / 2 - (LBINT u=0..\<infinity>. exp (- (u * t)) * (u * sin t + cos t) / (1 + u^2))"
   325     also have "... = pi / 2 - (LBINT u=0..\<infinity>. exp (- (u * t)) * (u * sin t + cos t) / (1 + u^2))"
   326       using Si_at_top_integrable[OF \<open>0\<le>t\<close>] by (simp add: integrable_I0i_1_div_plus_square LBINT_I0i_1_div_plus_square)
   326       using Si_at_top_integrable[OF \<open>0\<le>t\<close>] by (simp add: integrable_I0i_1_div_plus_square LBINT_I0i_1_div_plus_square)
   327     finally show "pi / 2 - (LBINT u=0..\<infinity>. exp (-(u * t)) * (u * sin t + cos t) / (1 + u^2)) = Si t" ..
   327     finally show "pi / 2 - (LBINT u=0..\<infinity>. exp (-(u * t)) * (u * sin t + cos t) / (1 + u^2)) = Si t" ..
   328   qed
   328   qed
   369       by (auto intro!: derivative_intros continuous_at_imp_continuous_on isCont_sinc)
   369       by (auto intro!: derivative_intros continuous_at_imp_continuous_on isCont_sinc)
   370     also have "\<dots> = (LBINT t=ereal (0 * \<theta>)..T * \<theta>. sin t / t)"
   370     also have "\<dots> = (LBINT t=ereal (0 * \<theta>)..T * \<theta>. sin t / t)"
   371       by (rule interval_integral_discrete_difference[of "{0}"]) auto
   371       by (rule interval_integral_discrete_difference[of "{0}"]) auto
   372     finally have "(LBINT t=ereal 0..T. sin (t * \<theta>) / t) = (LBINT t=ereal 0..T * \<theta>. sin t / t)"
   372     finally have "(LBINT t=ereal 0..T. sin (t * \<theta>) / t) = (LBINT t=ereal 0..T * \<theta>. sin t / t)"
   373       by simp
   373       by simp
   374     hence "LBINT x. indicator {0<..<T} x * sin (x * \<theta>) / x =
   374     hence "(LBINT x. indicator {0<..<T} x * sin (x * \<theta>) / x) = (LBINT x. indicator {0<..<T * \<theta>} x * sin x / x)"
   375         LBINT x. indicator {0<..<T * \<theta>} x * sin x / x"
       
   376       using assms \<open>0 < \<theta>\<close> unfolding interval_lebesgue_integral_def einterval_eq zero_ereal_def
   375       using assms \<open>0 < \<theta>\<close> unfolding interval_lebesgue_integral_def einterval_eq zero_ereal_def
   377         by (auto simp: ac_simps set_lebesgue_integral_def)
   376         by (auto simp: ac_simps set_lebesgue_integral_def)
   378   } note aux1 = this
   377   } note aux1 = this
   379   { assume "0 > \<theta>"
   378   { assume "0 > \<theta>"
   380     have [simp]: "integrable lborel (\<lambda>x. sin (x * \<theta>) * indicator {0<..<T} x / x)"
   379     have [simp]: "integrable lborel (\<lambda>x. sin (x * \<theta>) * indicator {0<..<T} x / x)"
   388       by (auto intro!: derivative_intros continuous_at_imp_continuous_on isCont_sinc)
   387       by (auto intro!: derivative_intros continuous_at_imp_continuous_on isCont_sinc)
   389     also have "\<dots> = (LBINT t=ereal (0 * -\<theta>)..T * -\<theta>. sin t / t)"
   388     also have "\<dots> = (LBINT t=ereal (0 * -\<theta>)..T * -\<theta>. sin t / t)"
   390       by (rule interval_integral_discrete_difference[of "{0}"]) auto
   389       by (rule interval_integral_discrete_difference[of "{0}"]) auto
   391     finally have "(LBINT t=ereal 0..T. sin (t * -\<theta>) / t) = (LBINT t=ereal 0..T * -\<theta>. sin t / t)"
   390     finally have "(LBINT t=ereal 0..T. sin (t * -\<theta>) / t) = (LBINT t=ereal 0..T * -\<theta>. sin t / t)"
   392       by simp
   391       by simp
   393     hence "LBINT x. indicator {0<..<T} x * sin (x * \<theta>) / x =
   392     hence "(LBINT x. indicator {0<..<T} x * sin (x * \<theta>) / x) =
   394        - (LBINT x. indicator {0<..<- (T * \<theta>)} x * sin x / x)"
   393        - (LBINT x. indicator {0<..<- (T * \<theta>)} x * sin x / x)"
   395       using assms \<open>0 > \<theta>\<close> unfolding interval_lebesgue_integral_def einterval_eq zero_ereal_def
   394       using assms \<open>0 > \<theta>\<close> unfolding interval_lebesgue_integral_def einterval_eq zero_ereal_def
   396         by (auto simp add: field_simps mult_le_0_iff set_lebesgue_integral_def split: if_split_asm)
   395         by (auto simp add: field_simps mult_le_0_iff set_lebesgue_integral_def split: if_split_asm)
   397   } note aux2 = this
   396   } note aux2 = this
   398   show ?thesis
   397   show ?thesis