src/HOL/Probability/Levy.thy
changeset 67977 557ea2740125
parent 67682 00c436488398
child 70817 dd675800469d
equal deleted inserted replaced
67976:75b94eb58c3d 67977:557ea2740125
    88     assume "T \<ge> 0"
    88     assume "T \<ge> 0"
    89     let ?f' = "\<lambda>(t, x). indicator {-T<..<T} t *\<^sub>R ?f t x"
    89     let ?f' = "\<lambda>(t, x). indicator {-T<..<T} t *\<^sub>R ?f t x"
    90     { fix x
    90     { fix x
    91       have 1: "complex_interval_lebesgue_integrable lborel u v (\<lambda>t. ?f t x)" for u v :: real
    91       have 1: "complex_interval_lebesgue_integrable lborel u v (\<lambda>t. ?f t x)" for u v :: real
    92         using Levy_Inversion_aux2[of "x - b" "x - a"]
    92         using Levy_Inversion_aux2[of "x - b" "x - a"]
    93         apply (simp add: interval_lebesgue_integrable_def del: times_divide_eq_left)
    93         apply (simp add: interval_lebesgue_integrable_def set_integrable_def del: times_divide_eq_left)
    94         apply (intro integrableI_bounded_set_indicator[where B="b - a"] conjI impI)
    94         apply (intro integrableI_bounded_set_indicator[where B="b - a"] conjI impI)
    95         apply (auto intro!: AE_I [of _ _ "{0}"] simp: assms)
    95         apply (auto intro!: AE_I [of _ _ "{0}"] simp: assms)
    96         done
    96         done
    97       have "(CLBINT t. ?f' (t, x)) = (CLBINT t=-T..T. ?f t x)"
    97       have "(CLBINT t. ?f' (t, x)) = (CLBINT t=-T..T. ?f t x)"
    98         using \<open>T \<ge> 0\<close> by (simp add: interval_lebesgue_integral_def)
    98         using \<open>T \<ge> 0\<close> by (simp add: interval_lebesgue_integral_def set_lebesgue_integral_def)
    99       also have "\<dots> = (CLBINT t=-T..(0 :: real). ?f t x) + (CLBINT t=(0 :: real)..T. ?f t x)"
    99       also have "\<dots> = (CLBINT t=-T..(0 :: real). ?f t x) + (CLBINT t=(0 :: real)..T. ?f t x)"
   100           (is "_ = _ + ?t")
   100           (is "_ = _ + ?t")
   101         using 1 by (intro interval_integral_sum[symmetric]) (simp add: min_absorb1 max_absorb2 \<open>T \<ge> 0\<close>)
   101         using 1 by (intro interval_integral_sum[symmetric]) (simp add: min_absorb1 max_absorb2 \<open>T \<ge> 0\<close>)
   102       also have "(CLBINT t=-T..(0 :: real). ?f t x) = (CLBINT t=(0::real)..T. ?f (-t) x)"
   102       also have "(CLBINT t=-T..(0 :: real). ?f t x) = (CLBINT t=(0::real)..T. ?f (-t) x)"
   103         by (subst interval_integral_reflect) auto
   103         by (subst interval_integral_reflect) auto
   128       finally have "(CLBINT t. ?f' (t, x)) =
   128       finally have "(CLBINT t. ?f' (t, x)) =
   129           2 * (sgn (x - a) * Si (T * abs (x - a)) - sgn (x - b) * Si (T * abs (x - b)))" .
   129           2 * (sgn (x - a) * Si (T * abs (x - a)) - sgn (x - b) * Si (T * abs (x - b)))" .
   130     } note main_eq = this
   130     } note main_eq = this
   131     have "(CLBINT t=-T..T. ?F t * \<phi> t) =
   131     have "(CLBINT t=-T..T. ?F t * \<phi> t) =
   132       (CLBINT t. (CLINT x | M. ?F t * iexp (t * x) * indicator {-T<..<T} t))"
   132       (CLBINT t. (CLINT x | M. ?F t * iexp (t * x) * indicator {-T<..<T} t))"
   133       using \<open>T \<ge> 0\<close> unfolding \<phi>_def char_def interval_lebesgue_integral_def
   133       using \<open>T \<ge> 0\<close> unfolding \<phi>_def char_def interval_lebesgue_integral_def set_lebesgue_integral_def
   134       by (auto split: split_indicator intro!: Bochner_Integration.integral_cong)
   134       by (auto split: split_indicator intro!: Bochner_Integration.integral_cong)
   135     also have "\<dots> = (CLBINT t. (CLINT x | M. ?f' (t, x)))"
   135     also have "\<dots> = (CLBINT t. (CLINT x | M. ?f' (t, x)))"
   136       by (auto intro!: Bochner_Integration.integral_cong simp: field_simps exp_diff exp_minus split: split_indicator)
   136       by (auto intro!: Bochner_Integration.integral_cong simp: field_simps exp_diff exp_minus split: split_indicator)
   137     also have "\<dots> = (CLINT x | M. (CLBINT t. ?f' (t, x)))"
   137     also have "\<dots> = (CLINT x | M. (CLBINT t. ?f' (t, x)))"
   138     proof (intro P.Fubini_integral [symmetric] integrableI_bounded_set [where B="b - a"])
   138     proof (intro P.Fubini_integral [symmetric] integrableI_bounded_set [where B="b - a"])
   321     (* TODO: make this automatic somehow? *)
   321     (* TODO: make this automatic somehow? *)
   322     have Mn2 [simp]: "\<And>x. complex_integrable (M n) (\<lambda>t. exp (\<i> * complex_of_real (x * t)))"
   322     have Mn2 [simp]: "\<And>x. complex_integrable (M n) (\<lambda>t. exp (\<i> * complex_of_real (x * t)))"
   323       by (rule Mn.integrable_const_bound [where B = 1], auto)
   323       by (rule Mn.integrable_const_bound [where B = 1], auto)
   324     have Mn3: "set_integrable (M n \<Otimes>\<^sub>M lborel) (UNIV \<times> {- u..u}) (\<lambda>a. 1 - exp (\<i> * complex_of_real (snd a * fst a)))"
   324     have Mn3: "set_integrable (M n \<Otimes>\<^sub>M lborel) (UNIV \<times> {- u..u}) (\<lambda>a. 1 - exp (\<i> * complex_of_real (snd a * fst a)))"
   325       using \<open>0 < u\<close>
   325       using \<open>0 < u\<close>
       
   326       unfolding set_integrable_def
   326       by (intro integrableI_bounded_set_indicator [where B="2"])
   327       by (intro integrableI_bounded_set_indicator [where B="2"])
   327          (auto simp: lborel.emeasure_pair_measure_Times ennreal_mult_less_top not_less top_unique
   328          (auto simp: lborel.emeasure_pair_measure_Times ennreal_mult_less_top not_less top_unique
   328                split: split_indicator
   329                split: split_indicator
   329                intro!: order_trans [OF norm_triangle_ineq4])
   330                intro!: order_trans [OF norm_triangle_ineq4])
   330     have "(CLBINT t:{-u..u}. 1 - char (M n) t) =
   331     have "(CLBINT t:{-u..u}. 1 - char (M n) t) =
   331         (CLBINT t:{-u..u}. (CLINT x | M n. 1 - iexp (t * x)))"
   332         (CLBINT t:{-u..u}. (CLINT x | M n. 1 - iexp (t * x)))"
   332       unfolding char_def by (rule set_lebesgue_integral_cong, auto simp del: of_real_mult)
   333       unfolding char_def by (rule set_lebesgue_integral_cong, auto simp del: of_real_mult)
   333     also have "\<dots> = (CLBINT t. (CLINT x | M n. indicator {-u..u} t *\<^sub>R (1 - iexp (t * x))))"
   334     also have "\<dots> = (CLBINT t. (CLINT x | M n. indicator {-u..u} t *\<^sub>R (1 - iexp (t * x))))"
       
   335       unfolding set_lebesgue_integral_def
   334       by (rule Bochner_Integration.integral_cong) (auto split: split_indicator)
   336       by (rule Bochner_Integration.integral_cong) (auto split: split_indicator)
   335     also have "\<dots> = (CLINT x | M n. (CLBINT t:{-u..u}. 1 - iexp (t * x)))"
   337     also have "\<dots> = (CLINT x | M n. (CLBINT t:{-u..u}. 1 - iexp (t * x)))"
   336       using Mn3 by (subst P.Fubini_integral) (auto simp: indicator_times split_beta')
   338       using Mn3 by (subst P.Fubini_integral) (auto simp: indicator_times split_beta' set_integrable_def set_lebesgue_integral_def)
   337     also have "\<dots> = (CLINT x | M n. (if x = 0 then 0 else 2 * (u  - sin (u * x) / x)))"
   339     also have "\<dots> = (CLINT x | M n. (if x = 0 then 0 else 2 * (u  - sin (u * x) / x)))"
   338       using \<open>u > 0\<close> by (intro Bochner_Integration.integral_cong, auto simp add: * simp del: of_real_mult)
   340       using \<open>u > 0\<close> by (intro Bochner_Integration.integral_cong, auto simp add: * simp del: of_real_mult)
   339     also have "\<dots> = (LINT x | M n. (if x = 0 then 0 else 2 * (u  - sin (u * x) / x)))"
   341     also have "\<dots> = (LINT x | M n. (if x = 0 then 0 else 2 * (u  - sin (u * x) / x)))"
   340       by (rule integral_complex_of_real)
   342       by (rule integral_complex_of_real)
   341     finally have "Re (CLBINT t:{-u..u}. 1 - char (M n) t) =
   343     finally have "Re (CLBINT t:{-u..u}. 1 - char (M n) t) =
   342        (LINT x | M n. (if x = 0 then 0 else 2 * (u  - sin (u * x) / x)))" by simp
   344        (LINT x | M n. (if x = 0 then 0 else 2 * (u  - sin (u * x) / x)))" by simp
   343     also have "\<dots> \<ge> (LINT x : {x. abs x \<ge> 2 / u} | M n. u)"
   345     also have "\<dots> \<ge> (LINT x : {x. abs x \<ge> 2 / u} | M n. u)"
   344     proof -
   346     proof -
   345       have "complex_integrable (M n) (\<lambda>x. CLBINT t:{-u..u}. 1 - iexp (snd (x, t) * fst (x, t)))"
   347       have "complex_integrable (M n) (\<lambda>x. CLBINT t:{-u..u}. 1 - iexp (snd (x, t) * fst (x, t)))"
   346         using Mn3 by (intro P.integrable_fst) (simp add: indicator_times split_beta')
   348         using Mn3 unfolding set_integrable_def set_lebesgue_integral_def
       
   349         by (intro P.integrable_fst) (simp add: indicator_times split_beta')
   347       hence "complex_integrable (M n) (\<lambda>x. if x = 0 then 0 else 2 * (u  - sin (u * x) / x))"
   350       hence "complex_integrable (M n) (\<lambda>x. if x = 0 then 0 else 2 * (u  - sin (u * x) / x))"
   348         using \<open>u > 0\<close> by (subst integrable_cong) (auto simp add: * simp del: of_real_mult)
   351         using \<open>u > 0\<close>
       
   352         unfolding set_integrable_def
       
   353         by (subst integrable_cong) (auto simp add: * simp del: of_real_mult)
   349       hence **: "integrable (M n) (\<lambda>x. if x = 0 then 0 else 2 * (u  - sin (u * x) / x))"
   354       hence **: "integrable (M n) (\<lambda>x. if x = 0 then 0 else 2 * (u  - sin (u * x) / x))"
   350         unfolding complex_of_real_integrable_eq .
   355         unfolding complex_of_real_integrable_eq .
   351       have "2 * sin x \<le> x" if "2 \<le> x" for x :: real
   356       have "2 * sin x \<le> x" if "2 \<le> x" for x :: real
   352         by (rule order_trans[OF _ \<open>2 \<le> x\<close>]) auto
   357         by (rule order_trans[OF _ \<open>2 \<le> x\<close>]) auto
   353       moreover have "x \<le> 2 * sin x" if "x \<le> - 2" for x :: real
   358       moreover have "x \<le> 2 * sin x" if "x \<le> - 2" for x :: real
   354         by (rule order_trans[OF \<open>x \<le> - 2\<close>]) auto
   359         by (rule order_trans[OF \<open>x \<le> - 2\<close>]) auto
   355       moreover have "x < 0 \<Longrightarrow> x \<le> sin x" for x :: real
   360       moreover have "x < 0 \<Longrightarrow> x \<le> sin x" for x :: real
   356         using sin_x_le_x[of "-x"] by simp
   361         using sin_x_le_x[of "-x"] by simp
   357       ultimately show ?thesis
   362       ultimately show ?thesis
   358         using \<open>u > 0\<close>
   363         using \<open>u > 0\<close> unfolding set_lebesgue_integral_def
   359         by (intro integral_mono [OF _ **])
   364         by (intro integral_mono [OF _ **])
   360            (auto simp: divide_simps sin_x_le_x mult.commute[of u] mult_neg_pos top_unique less_top[symmetric]
   365            (auto simp: divide_simps sin_x_le_x mult.commute[of u] mult_neg_pos top_unique less_top[symmetric]
   361                  split: split_indicator)
   366                  split: split_indicator)
   362     qed
   367     qed
   363     also (xtrans) have "(LINT x : {x. abs x \<ge> 2 / u} | M n. u) =
   368     also (xtrans) have "(LINT x : {x. abs x \<ge> 2 / u} | M n. u) = u * measure (M n) {x. abs x \<ge> 2 / u}"
   364         u * measure (M n) {x. abs x \<ge> 2 / u}"
   369       unfolding set_lebesgue_integral_def
   365       by (simp add: Mn.emeasure_eq_measure)
   370       by (simp add: Mn.emeasure_eq_measure)
   366     finally show "Re (CLBINT t:{-u..u}. 1 - char (M n) t) \<ge> u * measure (M n) {x. abs x \<ge> 2 / u}" .
   371     finally show "Re (CLBINT t:{-u..u}. 1 - char (M n) t) \<ge> u * measure (M n) {x. abs x \<ge> 2 / u}" .
   367   qed
   372   qed
   368 
   373 
   369   have tight_aux: "\<And>\<epsilon>. \<epsilon> > 0 \<Longrightarrow> \<exists>a b. a < b \<and> (\<forall>n. 1 - \<epsilon> < measure (M n) {a<..b})"
   374   have tight_aux: "\<And>\<epsilon>. \<epsilon> > 0 \<Longrightarrow> \<exists>a b. a < b \<and> (\<forall>n. 1 - \<epsilon> < measure (M n) {a<..b})"
   378     then obtain d where "d > 0 \<and> (\<forall>t. (abs t < d \<longrightarrow> cmod (char M' t - 1) < \<epsilon> / 4))" ..
   383     then obtain d where "d > 0 \<and> (\<forall>t. (abs t < d \<longrightarrow> cmod (char M' t - 1) < \<epsilon> / 4))" ..
   379     hence d0: "d > 0" and d1: "\<And>t. abs t < d \<Longrightarrow> cmod (char M' t - 1) < \<epsilon> / 4" by auto
   384     hence d0: "d > 0" and d1: "\<And>t. abs t < d \<Longrightarrow> cmod (char M' t - 1) < \<epsilon> / 4" by auto
   380     have 1: "\<And>x. cmod (1 - char M' x) \<le> 2"
   385     have 1: "\<And>x. cmod (1 - char M' x) \<le> 2"
   381       by (rule order_trans [OF norm_triangle_ineq4], auto simp add: M'.cmod_char_le_1)
   386       by (rule order_trans [OF norm_triangle_ineq4], auto simp add: M'.cmod_char_le_1)
   382     then have 2: "\<And>u v. complex_set_integrable lborel {u..v} (\<lambda>x. 1 - char M' x)"
   387     then have 2: "\<And>u v. complex_set_integrable lborel {u..v} (\<lambda>x. 1 - char M' x)"
       
   388       unfolding set_integrable_def
   383       by (intro integrableI_bounded_set_indicator[where B=2]) (auto simp: emeasure_lborel_Icc_eq)
   389       by (intro integrableI_bounded_set_indicator[where B=2]) (auto simp: emeasure_lborel_Icc_eq)
   384     have 3: "\<And>u v. set_integrable lborel {u..v} (\<lambda>x. cmod (1 - char M' x))"
   390     have 3: "\<And>u v. integrable lborel (\<lambda>x. indicat_real {u..v} x *\<^sub>R cmod (1 - char M' x))"
   385       by (intro borel_integrable_compact[OF compact_Icc] continuous_at_imp_continuous_on
   391       by (intro borel_integrable_compact[OF compact_Icc] continuous_at_imp_continuous_on
   386                 continuous_intros ballI M'.isCont_char continuous_intros)
   392                 continuous_intros ballI M'.isCont_char continuous_intros)
   387     have "cmod (CLBINT t:{-d/2..d/2}. 1 - char M' t) \<le> LBINT t:{-d/2..d/2}. cmod (1 - char M' t)"
   393     have "cmod (CLBINT t:{-d/2..d/2}. 1 - char M' t) \<le> LBINT t:{-d/2..d/2}. cmod (1 - char M' t)"
       
   394       unfolding set_lebesgue_integral_def
   388       using integral_norm_bound[of _ "\<lambda>x. indicator {u..v} x *\<^sub>R (1 - char M' x)" for u v] by simp
   395       using integral_norm_bound[of _ "\<lambda>x. indicator {u..v} x *\<^sub>R (1 - char M' x)" for u v] by simp
   389     also have 4: "\<dots> \<le> LBINT t:{-d/2..d/2}. \<epsilon> / 4"
   396     also have 4: "\<dots> \<le> LBINT t:{-d/2..d/2}. \<epsilon> / 4"
       
   397       unfolding set_lebesgue_integral_def
   390       apply (rule integral_mono [OF 3])
   398       apply (rule integral_mono [OF 3])
   391        apply (simp add: emeasure_lborel_Icc_eq)
   399        apply (simp add: emeasure_lborel_Icc_eq)
   392       apply (case_tac "x \<in> {-d/2..d/2}")
   400       apply (case_tac "x \<in> {-d/2..d/2}")
   393        apply auto
   401        apply auto
   394       apply (subst norm_minus_commute)
   402       apply (subst norm_minus_commute)
   395       apply (rule less_imp_le)
   403       apply (rule less_imp_le)
   396       apply (rule d1 [simplified])
   404       apply (rule d1 [simplified])
   397       using d0 apply auto
   405       using d0 apply auto
   398       done
   406       done
   399     also from d0 4 have "\<dots> = d * \<epsilon> / 4"
   407     also from d0 4 have "\<dots> = d * \<epsilon> / 4"
   400       by simp
   408       unfolding set_lebesgue_integral_def by simp
   401     finally have bound: "cmod (CLBINT t:{-d/2..d/2}. 1 - char M' t) \<le> d * \<epsilon> / 4" .
   409     finally have bound: "cmod (CLBINT t:{-d/2..d/2}. 1 - char M' t) \<le> d * \<epsilon> / 4" .
   402     have "cmod (1 - char (M n) x) \<le> 2" for n x
   410     have "cmod (1 - char (M n) x) \<le> 2" for n x
   403       by (rule order_trans [OF norm_triangle_ineq4], auto simp add: Mn.cmod_char_le_1)
   411       by (rule order_trans [OF norm_triangle_ineq4], auto simp add: Mn.cmod_char_le_1)
   404     then have "(\<lambda>n. CLBINT t:{-d/2..d/2}. 1 - char (M n) t) \<longlonglongrightarrow> (CLBINT t:{-d/2..d/2}. 1 - char M' t)"
   412     then have "(\<lambda>n. CLBINT t:{-d/2..d/2}. 1 - char (M n) t) \<longlonglongrightarrow> (CLBINT t:{-d/2..d/2}. 1 - char M' t)"
       
   413       unfolding set_lebesgue_integral_def
   405       apply (intro integral_dominated_convergence[where w="\<lambda>x. indicator {-d/2..d/2} x *\<^sub>R 2"])
   414       apply (intro integral_dominated_convergence[where w="\<lambda>x. indicator {-d/2..d/2} x *\<^sub>R 2"])
   406       apply (auto intro!: char_conv tendsto_intros
   415       apply (auto intro!: char_conv tendsto_intros
   407                   simp: emeasure_lborel_Icc_eq
   416                   simp: emeasure_lborel_Icc_eq
   408                   split: split_indicator)
   417                   split: split_indicator)
   409       done
   418       done