src/HOL/Probability/Projective_Limit.thy
changeset 67399 eab6ce8368fa
parent 66453 cc19f7ca2ed6
child 69260 0a9688695a1b
equal deleted inserted replaced
67398:5eb932e604a2 67399:eab6ce8368fa
    45 lemma compactE':
    45 lemma compactE':
    46   fixes S :: "'a :: metric_space set"
    46   fixes S :: "'a :: metric_space set"
    47   assumes "compact S" "\<forall>n\<ge>m. f n \<in> S"
    47   assumes "compact S" "\<forall>n\<ge>m. f n \<in> S"
    48   obtains l r where "l \<in> S" "strict_mono (r::nat\<Rightarrow>nat)" "((f \<circ> r) \<longlongrightarrow> l) sequentially"
    48   obtains l r where "l \<in> S" "strict_mono (r::nat\<Rightarrow>nat)" "((f \<circ> r) \<longlongrightarrow> l) sequentially"
    49 proof atomize_elim
    49 proof atomize_elim
    50   have "strict_mono (op + m)" by (simp add: strict_mono_def)
    50   have "strict_mono ((+) m)" by (simp add: strict_mono_def)
    51   have "\<forall>n. (f o (\<lambda>i. m + i)) n \<in> S" using assms by auto
    51   have "\<forall>n. (f o (\<lambda>i. m + i)) n \<in> S" using assms by auto
    52   from seq_compactE[OF \<open>compact S\<close>[unfolded compact_eq_seq_compact_metric] this] guess l r .
    52   from seq_compactE[OF \<open>compact S\<close>[unfolded compact_eq_seq_compact_metric] this] guess l r .
    53   hence "l \<in> S" "strict_mono ((\<lambda>i. m + i) o r) \<and> (f \<circ> ((\<lambda>i. m + i) o r)) \<longlonglongrightarrow> l"
    53   hence "l \<in> S" "strict_mono ((\<lambda>i. m + i) o r) \<and> (f \<circ> ((\<lambda>i. m + i) o r)) \<longlonglongrightarrow> l"
    54     using strict_mono_o[OF \<open>strict_mono (op + m)\<close> \<open>strict_mono r\<close>] by (auto simp: o_def)
    54     using strict_mono_o[OF \<open>strict_mono ((+) m)\<close> \<open>strict_mono r\<close>] by (auto simp: o_def)
    55   thus "\<exists>l r. l \<in> S \<and> strict_mono r \<and> (f \<circ> r) \<longlonglongrightarrow> l" by blast
    55   thus "\<exists>l r. l \<in> S \<and> strict_mono r \<and> (f \<circ> r) \<longlonglongrightarrow> l" by blast
    56 qed
    56 qed
    57 
    57 
    58 sublocale finmap_seqs_into_compact \<subseteq> subseqs "\<lambda>n s. (\<exists>l. (\<lambda>i. ((f o s) i)\<^sub>F n) \<longlonglongrightarrow> l)"
    58 sublocale finmap_seqs_into_compact \<subseteq> subseqs "\<lambda>n s. (\<exists>l. (\<lambda>i. ((f o s) i)\<^sub>F n) \<longlonglongrightarrow> l)"
    59 proof
    59 proof
    72   thus "\<exists>r'. strict_mono r' \<and> (\<exists>l. (\<lambda>i. ((f \<circ> (s \<circ> r')) i)\<^sub>F n) \<longlonglongrightarrow> l)" by (auto simp: o_def)
    72   thus "\<exists>r'. strict_mono r' \<and> (\<exists>l. (\<lambda>i. ((f \<circ> (s \<circ> r')) i)\<^sub>F n) \<longlonglongrightarrow> l)" by (auto simp: o_def)
    73 qed
    73 qed
    74 
    74 
    75 lemma (in finmap_seqs_into_compact) diagonal_tendsto: "\<exists>l. (\<lambda>i. (f (diagseq i))\<^sub>F n) \<longlonglongrightarrow> l"
    75 lemma (in finmap_seqs_into_compact) diagonal_tendsto: "\<exists>l. (\<lambda>i. (f (diagseq i))\<^sub>F n) \<longlonglongrightarrow> l"
    76 proof -
    76 proof -
    77   obtain l where "(\<lambda>i. ((f o (diagseq o op + (Suc n))) i)\<^sub>F n) \<longlonglongrightarrow> l"
    77   obtain l where "(\<lambda>i. ((f o (diagseq o (+) (Suc n))) i)\<^sub>F n) \<longlonglongrightarrow> l"
    78   proof (atomize_elim, rule diagseq_holds)
    78   proof (atomize_elim, rule diagseq_holds)
    79     fix r s n
    79     fix r s n
    80     assume "strict_mono (r :: nat \<Rightarrow> nat)"
    80     assume "strict_mono (r :: nat \<Rightarrow> nat)"
    81     assume "\<exists>l. (\<lambda>i. ((f \<circ> s) i)\<^sub>F n) \<longlonglongrightarrow> l"
    81     assume "\<exists>l. (\<lambda>i. ((f \<circ> s) i)\<^sub>F n) \<longlonglongrightarrow> l"
    82     then obtain l where "((\<lambda>i. (f i)\<^sub>F n) o s) \<longlonglongrightarrow> l"
    82     then obtain l where "((\<lambda>i. (f i)\<^sub>F n) o s) \<longlonglongrightarrow> l"
   294     also have "\<dots> < ennreal (1 * enn2real ?a)"
   294     also have "\<dots> < ennreal (1 * enn2real ?a)"
   295     proof (intro ennreal_lessI mult_strict_right_mono)
   295     proof (intro ennreal_lessI mult_strict_right_mono)
   296       have "(\<Sum>i = 1..n. 2 powr - real i) = (\<Sum>i = 1..<Suc n. (1/2) ^ i)"
   296       have "(\<Sum>i = 1..n. 2 powr - real i) = (\<Sum>i = 1..<Suc n. (1/2) ^ i)"
   297         by (rule sum.cong) (auto simp: powr_realpow powr_divide power_divide powr_minus_divide)
   297         by (rule sum.cong) (auto simp: powr_realpow powr_divide power_divide powr_minus_divide)
   298       also have "{1..<Suc n} = {..<Suc n} - {0}" by auto
   298       also have "{1..<Suc n} = {..<Suc n} - {0}" by auto
   299       also have "sum (op ^ (1 / 2::real)) ({..<Suc n} - {0}) =
   299       also have "sum ((^) (1 / 2::real)) ({..<Suc n} - {0}) =
   300         sum (op ^ (1 / 2)) ({..<Suc n}) - 1" by (auto simp: sum_diff1)
   300         sum ((^) (1 / 2)) ({..<Suc n}) - 1" by (auto simp: sum_diff1)
   301       also have "\<dots> < 1" by (subst geometric_sum) auto
   301       also have "\<dots> < 1" by (subst geometric_sum) auto
   302       finally show "(\<Sum>i = 1..n. 2 powr - enn2real i) < 1" by simp
   302       finally show "(\<Sum>i = 1..n. 2 powr - enn2real i) < 1" by simp
   303     qed (auto simp: r enn2real_positive_iff)
   303     qed (auto simp: r enn2real_positive_iff)
   304     also have "\<dots> = ?a" by (auto simp: r)
   304     also have "\<dots> = ?a" by (auto simp: r)
   305     also have "\<dots> \<le> \<mu>G (Z n)"
   305     also have "\<dots> \<le> \<mu>G (Z n)"