src/HOL/Probability/Infinite_Product_Measure.thy
changeset 55415 05f5fdb8d093
parent 55414 eab03e9cee8a
child 55417 01fbfb60c33e
equal deleted inserted replaced
55414:eab03e9cee8a 55415:05f5fdb8d093
   188       from Ex_w[OF A(1,2) this J(1-3), of 0] guess w0 .. note w0 = this
   188       from Ex_w[OF A(1,2) this J(1-3), of 0] guess w0 .. note w0 = this
   189 
   189 
   190       let ?P =
   190       let ?P =
   191         "\<lambda>k wk w. w \<in> space (Pi\<^sub>M (J (Suc k)) M) \<and> restrict w (J k) = wk \<and>
   191         "\<lambda>k wk w. w \<in> space (Pi\<^sub>M (J (Suc k)) M) \<and> restrict w (J k) = wk \<and>
   192           (\<forall>n. ?a / 2 ^ (Suc k + 1) \<le> ?q (Suc k) n w)"
   192           (\<forall>n. ?a / 2 ^ (Suc k + 1) \<le> ?q (Suc k) n w)"
   193       def w \<equiv> "nat_rec w0 (\<lambda>k wk. Eps (?P k wk))"
   193       def w \<equiv> "rec_nat w0 (\<lambda>k wk. Eps (?P k wk))"
   194 
   194 
   195       { fix k have w: "w k \<in> space (Pi\<^sub>M (J k) M) \<and>
   195       { fix k have w: "w k \<in> space (Pi\<^sub>M (J k) M) \<and>
   196           (\<forall>n. ?a / 2 ^ (k + 1) \<le> ?q k n (w k)) \<and> (k \<noteq> 0 \<longrightarrow> restrict (w k) (J (k - 1)) = w (k - 1))"
   196           (\<forall>n. ?a / 2 ^ (k + 1) \<le> ?q k n (w k)) \<and> (k \<noteq> 0 \<longrightarrow> restrict (w k) (J (k - 1)) = w (k - 1))"
   197         proof (induct k)
   197         proof (induct k)
   198           case 0 with w0 show ?case
   198           case 0 with w0 show ?case
   199             unfolding w_def nat_rec_0 by auto
   199             unfolding w_def rec_nat_0 by auto
   200         next
   200         next
   201           case (Suc k)
   201           case (Suc k)
   202           then have wk: "w k \<in> space (Pi\<^sub>M (J k) M)" by auto
   202           then have wk: "w k \<in> space (Pi\<^sub>M (J k) M)" by auto
   203           have "\<exists>w'. ?P k (w k) w'"
   203           have "\<exists>w'. ?P k (w k) w'"
   204           proof cases
   204           proof cases
   239               using w' J_mono[of k "Suc k"] wk unfolding *
   239               using w' J_mono[of k "Suc k"] wk unfolding *
   240               by (intro exI[of _ ?w])
   240               by (intro exI[of _ ?w])
   241                  (auto split: split_merge intro!: extensional_merge_sub ext simp: space_PiM PiE_iff)
   241                  (auto split: split_merge intro!: extensional_merge_sub ext simp: space_PiM PiE_iff)
   242           qed
   242           qed
   243           then have "?P k (w k) (w (Suc k))"
   243           then have "?P k (w k) (w (Suc k))"
   244             unfolding w_def nat_rec_Suc unfolding w_def[symmetric]
   244             unfolding w_def rec_nat_Suc unfolding w_def[symmetric]
   245             by (rule someI_ex)
   245             by (rule someI_ex)
   246           then show ?case by auto
   246           then show ?case by auto
   247         qed
   247         qed
   248         moreover
   248         moreover
   249         from w have "w k \<in> space (Pi\<^sub>M (J k) M)" by auto
   249         from w have "w k \<in> space (Pi\<^sub>M (J k) M)" by auto
   478   using measurable_compose[OF measurable_Pair[OF f g] measurable_comb_seq] by simp
   478   using measurable_compose[OF measurable_Pair[OF f g] measurable_comb_seq] by simp
   479 
   479 
   480 lemma comb_seq_0: "comb_seq 0 \<omega> \<omega>' = \<omega>'"
   480 lemma comb_seq_0: "comb_seq 0 \<omega> \<omega>' = \<omega>'"
   481   by (auto simp add: comb_seq_def)
   481   by (auto simp add: comb_seq_def)
   482 
   482 
   483 lemma comb_seq_Suc: "comb_seq (Suc n) \<omega> \<omega>' = comb_seq n \<omega> (nat_case (\<omega> n) \<omega>')"
   483 lemma comb_seq_Suc: "comb_seq (Suc n) \<omega> \<omega>' = comb_seq n \<omega> (case_nat (\<omega> n) \<omega>')"
   484   by (auto simp add: comb_seq_def not_less less_Suc_eq le_imp_diff_is_add intro!: ext split: nat.split)
   484   by (auto simp add: comb_seq_def not_less less_Suc_eq le_imp_diff_is_add intro!: ext split: nat.split)
   485 
   485 
   486 lemma comb_seq_Suc_0[simp]: "comb_seq (Suc 0) \<omega> = nat_case (\<omega> 0)"
   486 lemma comb_seq_Suc_0[simp]: "comb_seq (Suc 0) \<omega> = case_nat (\<omega> 0)"
   487   by (intro ext) (simp add: comb_seq_Suc comb_seq_0)
   487   by (intro ext) (simp add: comb_seq_Suc comb_seq_0)
   488 
   488 
   489 lemma comb_seq_less: "i < n \<Longrightarrow> comb_seq n \<omega> \<omega>' i = \<omega> i"
   489 lemma comb_seq_less: "i < n \<Longrightarrow> comb_seq n \<omega> \<omega>' i = \<omega> i"
   490   by (auto split: split_comb_seq)
   490   by (auto split: split_comb_seq)
   491 
   491 
   492 lemma comb_seq_add: "comb_seq n \<omega> \<omega>' (i + n) = \<omega>' i"
   492 lemma comb_seq_add: "comb_seq n \<omega> \<omega>' (i + n) = \<omega>' i"
   493   by (auto split: nat.split split_comb_seq)
   493   by (auto split: nat.split split_comb_seq)
   494 
   494 
   495 lemma nat_case_comb_seq: "nat_case s' (comb_seq n \<omega> \<omega>') (i + n) = nat_case (nat_case s' \<omega> n) \<omega>' i"
   495 lemma case_nat_comb_seq: "case_nat s' (comb_seq n \<omega> \<omega>') (i + n) = case_nat (case_nat s' \<omega> n) \<omega>' i"
   496   by (auto split: nat.split split_comb_seq)
   496   by (auto split: nat.split split_comb_seq)
   497 
   497 
   498 lemma nat_case_comb_seq':
   498 lemma case_nat_comb_seq':
   499   "nat_case s (comb_seq i \<omega> \<omega>') = comb_seq (Suc i) (nat_case s \<omega>) \<omega>'"
   499   "case_nat s (comb_seq i \<omega> \<omega>') = comb_seq (Suc i) (case_nat s \<omega>) \<omega>'"
   500   by (auto split: split_comb_seq nat.split)
   500   by (auto split: split_comb_seq nat.split)
   501 
   501 
   502 locale sequence_space = product_prob_space "\<lambda>i. M" "UNIV :: nat set" for M
   502 locale sequence_space = product_prob_space "\<lambda>i. M" "UNIV :: nat set" for M
   503 begin
   503 begin
   504 
   504 
   568     by (subst mult_commute) (auto simp: J setprod_subset_diff[symmetric])
   568     by (subst mult_commute) (auto simp: J setprod_subset_diff[symmetric])
   569   finally show "emeasure ?D ?X = (\<Prod>j\<in>J. emeasure M (E j))" .
   569   finally show "emeasure ?D ?X = (\<Prod>j\<in>J. emeasure M (E j))" .
   570 qed simp_all
   570 qed simp_all
   571 
   571 
   572 lemma PiM_iter:
   572 lemma PiM_iter:
   573   "distr (M \<Otimes>\<^sub>M S) S (\<lambda>(s, \<omega>). nat_case s \<omega>) = S" (is "?D = _")
   573   "distr (M \<Otimes>\<^sub>M S) S (\<lambda>(s, \<omega>). case_nat s \<omega>) = S" (is "?D = _")
   574 proof (rule PiM_eq)
   574 proof (rule PiM_eq)
   575   let ?I = "UNIV::nat set" and ?M = "\<lambda>n. M"
   575   let ?I = "UNIV::nat set" and ?M = "\<lambda>n. M"
   576   let "distr _ _ ?f" = "?D"
   576   let "distr _ _ ?f" = "?D"
   577 
   577 
   578   fix J E assume J: "finite J" "J \<subseteq> ?I" "\<And>j. j \<in> J \<Longrightarrow> E j \<in> sets M"
   578   fix J E assume J: "finite J" "J \<subseteq> ?I" "\<And>j. j \<in> J \<Longrightarrow> E j \<in> sets M"