Theory General_Weak_Convergence
section ‹ General Weak Convergence ›
theory General_Weak_Convergence
imports Lemmas_Levy_Prokhorov
"Riesz_Representation.Regular_Measure"
begin
text ‹ We formalize the notion of weak convergence and equivalent conditions.
The formalization of weak convergence in HOL-Probability is restricted to
probability measures on real numbers.
Our formalization is generalized to finite measures on any metric spaces. ›
subsection ‹ Topology of Weak Convegence›
definition weak_conv_topology :: "'a topology ⇒ 'a measure topology" where
"weak_conv_topology X ≡
topology_generated_by
(⋃f∈{f. continuous_map X euclideanreal f ∧ (∃B. ∀x∈topspace X. ¦f x¦ ≤ B)}.
Collect (openin (pullback_topology {N. sets N = sets (borel_of X) ∧ finite_measure N}
(λN. ∫x. f x ∂N) euclideanreal)))"
lemma topspace_weak_conv_topology[simp]:
"topspace (weak_conv_topology X) = {N. sets N = sets (borel_of X) ∧ finite_measure N}"
unfolding weak_conv_topology_def openin_pullback_topology
by(auto intro!: exI[where x="λx. 1"] exI[where x=1]) blast
lemma openin_weak_conv_topology_base:
assumes f:"continuous_map X euclideanreal f" and B:"⋀x. x ∈ topspace X ⟹ ¦f x¦ ≤ B"
and U:"open U"
shows "openin (weak_conv_topology X) ((λN. ∫x. f x ∂N) -` U
∩ {N. sets N = sets (borel_of X) ∧ finite_measure N})"
using assms
by(fastforce simp: weak_conv_topology_def openin_topology_generated_by_iff openin_pullback_topology
intro!: Basis)
lemma continuous_map_weak_conv_topology:
assumes f:"continuous_map X euclideanreal f" and B:"⋀x. x ∈ topspace X ⟹ ¦f x¦ ≤ B"
shows "continuous_map (weak_conv_topology X) euclideanreal (λN. ∫x. f x ∂N)"
using openin_weak_conv_topology_base[OF assms]
by(auto simp: continuous_map_def Collect_conj_eq Int_commute Int_left_commute vimage_def)
lemma weak_conv_topology_minimal:
assumes "topspace Y = {N. sets N = sets (borel_of X) ∧ finite_measure N}"
and "⋀f B. continuous_map X euclideanreal f
⟹ (⋀x. x ∈ topspace X ⟹ ¦f x¦ ≤ B) ⟹ continuous_map Y euclideanreal (λN. ∫x. f x ∂N)"
shows "openin (weak_conv_topology X) U ⟹ openin Y U"
unfolding weak_conv_topology_def openin_topology_generated_by_iff
proof (induct rule: generate_topology_on.induct)
case h:(Basis s)
then obtain f B where f: "continuous_map X euclidean f" "⋀x. x∈topspace X ⟹ ¦f x¦ ≤ B"
"openin (pullback_topology {N. sets N = sets (borel_of X) ∧ finite_measure N} (λN. ∫x. f x ∂N) euclideanreal) s"
by blast
then obtain u where u:
"open u" "s = (λN. ∫x. f x ∂N) -`u ∩ {N. sets N = sets (borel_of X) ∧ finite_measure N}"
unfolding openin_pullback_topology by auto
with assms(2)[OF f(1,2)]
show ?case
using assms(1) continuous_map_open by fastforce
qed auto
lemma weak_conv_topology_continuous_map_integral:
assumes "continuous_map X euclideanreal f" "⋀x. x ∈ topspace X ⟹ ¦f x¦ ≤ B"
shows "continuous_map (weak_conv_topology X) euclideanreal (λN. ∫x. f x ∂N)"
unfolding continuous_map
proof safe
fix U
assume "openin euclideanreal U"
then show "openin (weak_conv_topology X) {N ∈ topspace (weak_conv_topology X). (∫x. f x ∂N) ∈ U}"
unfolding weak_conv_topology_def openin_topology_generated_by_iff using assms
by(auto intro!: Basis exI[where x=U] exI[where x=f] exI[where x=B] simp: openin_pullback_topology) blast
qed simp
subsection ‹Weak Convergence›
abbreviation weak_conv_on :: "('a ⇒ 'b measure) ⇒ 'b measure ⇒ 'a filter ⇒ 'b topology ⇒ bool"
( "'((_)/ ⇒⇩W⇩C (_)') (_)/ on (_)" [56, 55] 55) where
"weak_conv_on Ni N F X ≡ limitin (weak_conv_topology X) Ni N F"
abbreviation weak_conv_on_seq :: "(nat ⇒ 'b measure) ⇒ 'b measure ⇒ 'b topology ⇒ bool"
( "'((_)/ ⇒⇩W⇩C (_)') on (_)" [56, 55] 55) where
"weak_conv_on_seq Ni N X ≡ weak_conv_on Ni N sequentially X"
subsection ‹ Limit in Topology of Weak Convegence ›
lemma weak_conv_on_def:
"weak_conv_on Ni N F X ⟷
(∀⇩F i in F. sets (Ni i) = sets (borel_of X) ∧ finite_measure (Ni i)) ∧ sets N = sets (borel_of X)
∧ finite_measure N
∧ (∀f. continuous_map X euclideanreal f ⟶ (∃B. ∀x∈topspace X. ¦f x¦ ≤ B)
⟶ ((λi. ∫x. f x ∂Ni i) ⤏ (∫x. f x ∂N)) F)"
proof safe
assume h:"weak_conv_on Ni N F X"
then have 1:"sets N = sets (borel_of X)" "finite_measure N"
using limitin_topspace by fastforce+
then show "⋀x. x ∈ sets N ⟹ x ∈ sets (borel_of X)" "⋀x. x ∈ sets (borel_of X) ⟹ x ∈ sets N"
"finite_measure N"
by auto
show 2:"∀⇩F i in F. sets (Ni i) = sets (borel_of X) ∧ finite_measure (Ni i)"
using h by(cases "F = ⊥") (auto simp: limitin_def)
fix f B
assume f:"continuous_map X euclideanreal f" and B:"∀x∈topspace X. ¦f x¦ ≤ B"
show "((λn. ∫x. f x ∂Ni n) ⤏ (∫x. f x ∂N)) F"
unfolding tendsto_iff
proof safe
fix r :: real
assume [arith]:"r > 0"
then have "openin
(weak_conv_topology X)
((λN. ∫x. f x ∂N) -` (ball (∫x. f x ∂N) r)
∩ {N. sets N = sets (borel_of X) ∧ finite_measure N})" (is "openin _ ?U")
using f B by(auto intro!: openin_weak_conv_topology_base)
moreover have "N ∈ ?U"
using h by (simp add: 1)
ultimately have NnU:"∀⇩F n in F. Ni n ∈ ?U"
using h limitinD by fastforce
show "∀⇩F n in F. dist (∫x. f x ∂Ni n) (∫x. f x ∂N) < r"
by(auto intro!: eventuallyI[THEN eventually_mp[OF _ NnU]] simp: dist_real_def)
qed
next
assume h: "∀⇩F i in F. sets (Ni i) = sets (borel_of X) ∧ finite_measure (Ni i)"
"sets N = sets (borel_of X)"
"finite_measure N"
"∀f. continuous_map X euclideanreal f ⟶ (∃B. ∀x∈topspace X. ¦f x¦ ≤ B)
⟶ ((λn. ∫x. f x ∂Ni n) ⤏ (∫x. f x ∂N)) F"
show "(Ni ⇒⇩W⇩C N) F on X "
unfolding limitin_def
proof safe
show "N ∈ topspace (weak_conv_topology X)"
using h by auto
fix U
assume h':"openin (weak_conv_topology X) U" "N ∈ U"
show "∀⇩F x in F. Ni x ∈ U"
using h'[simplified weak_conv_topology_def openin_topology_generated_by_iff]
proof induction
case Empty
then show ?case
by simp
next
case (Int a b)
then show ?case
by (simp add: eventually_conj_iff)
next
case (UN K)
then show ?case
using UnionI eventually_mono by fastforce
next
case s:(Basis s)
then obtain f where f: "continuous_map X euclidean f" "∃B. ∀x∈topspace X. ¦f x¦ ≤ B"
"openin (pullback_topology {N. sets N = sets (borel_of X) ∧
finite_measure N} (λN. ∫x. f x ∂N) euclideanreal) s"
by blast
then obtain u where u:
"open u" "s = (λN. ∫x. f x ∂N) -`u ∩ {N. sets N = sets (borel_of X) ∧ finite_measure N}"
unfolding openin_pullback_topology by auto
have "(∫x. f x ∂N) ∈ u"
using u s by blast
moreover have "((λn. ∫x. f x ∂Ni n) ⤏ (∫x. f x ∂N)) F"
using f h by blast
ultimately have 1:"∀⇩F n in F. (∫x. f x ∂(Ni n)) ∈ u"
by (simp add: tendsto_def u(1))
show ?case
by(auto intro!: eventuallyI[THEN eventually_mp[OF _ eventually_conj[OF 1 h(1)]]] simp: u(2))
qed
qed
qed
lemma weak_conv_on_def':
assumes "⋀i. sets (Ni i) = sets (borel_of X)" and "⋀i. finite_measure (Ni i)"
and "sets N = sets (borel_of X)" and "finite_measure N"
shows "weak_conv_on Ni N F X
⟷ (∀f. continuous_map X euclideanreal f ⟶ (∃B. ∀x∈topspace X. ¦f x¦ ≤ B)
⟶ ((λi. ∫x. f x ∂Ni i) ⤏ (∫x. f x ∂N)) F)"
using assms by(auto simp: weak_conv_on_def)
lemmas weak_conv_seq_def = weak_conv_on_def[where F=sequentially]
lemma weak_conv_on_const:
"(⋀i. Ni i = N) ⟹ sets N = sets (borel_of X)
⟹ finite_measure N ⟹ weak_conv_on Ni N F X"
by(auto simp: weak_conv_on_def)
lemmas weak_conv_on_seq_const = weak_conv_on_const[where F=sequentially]
context Metric_space
begin
abbreviation "mweak_conv ≡ (λNi N F. weak_conv_on Ni N F mtopology)"
abbreviation "mweak_conv_seq ≡ λNi N. mweak_conv Ni N sequentially"
lemmas mweak_conv_def = weak_conv_on_def[where X=mtopology,simplified]
lemmas mweak_conv_seq_def = weak_conv_seq_def[where X=mtopology,simplified]
end
subsection ‹The Portmanteau Theorem›
locale mweak_conv_fin = Metric_space +
fixes Ni :: "'b ⇒ 'a measure" and N :: "'a measure" and F
assumes sets_Ni:"∀⇩F i in F. sets (Ni i) = sets (borel_of mtopology)"
and sets_N[measurable_cong]: "sets N = sets (borel_of mtopology)"
and finite_measure_Ni: "∀⇩F i in F. finite_measure (Ni i)"
and finite_measure_N: "finite_measure N"
begin
interpretation N: finite_measure N
by(simp add: finite_measure_N)
lemma space_N: "space N = M"
using sets_eq_imp_space_eq[OF sets_N] by(auto simp: space_borel_of)
lemma space_Ni: "∀⇩F i in F. space (Ni i) = M"
by(rule eventually_mp[OF _ sets_Ni]) (auto simp: space_borel_of cong: sets_eq_imp_space_eq)
lemma eventually_Ni: "∀⇩F i in F. space (Ni i) = M ∧ sets (Ni i) = sets (borel_of mtopology) ∧ finite_measure (Ni i)"
by(intro eventually_conj space_Ni sets_Ni finite_measure_Ni)
lemma measure_converge_bounded':
assumes "((λn. measure (Ni n) M) ⤏ measure N M) F"
obtains K where "⋀A. ∀⇩F x in F. measure (Ni x) A ≤ K" "⋀A. measure N A ≤ K"
proof -
have "measure N A ≤ measure N M + 1" for A
using N.bounded_measure[of A] by(simp add: space_N)
moreover have "∀⇩F x in F. measure (Ni x) A ≤ measure N M + 1" for A
proof(rule eventuallyI[THEN eventually_mp[OF _ eventually_conj[OF eventually_Ni tendstoD[OF assms,of 1]]]])
fix x
show "(space (Ni x) = M ∧ sets (Ni x) = sets (borel_of mtopology) ∧ finite_measure (Ni x)) ∧
dist (measure (Ni x) M) (measure N M) < 1 ⟶ measure (Ni x) A ≤ measure N M + 1"
using finite_measure.bounded_measure[of "Ni x" A]
by(auto intro!: eventuallyI[THEN eventually_mp[OF _ tendstoD[OF assms,of 1]]] simp: dist_real_def)
qed simp
ultimately show ?thesis
using that by blast
qed
lemma
assumes "F ≠ ⊥" "∀⇩F x in F. measure (Ni x) A ≤ K" "measure N A ≤ K"
shows Liminf_measure_bounded: "Liminf F (λi. measure (Ni i) A) < ∞" "0 ≤ Liminf F (λi. measure (Ni i) A)"
and Limsup_measure_bounded: "Limsup F (λi. measure (Ni i) A) < ∞" "0 ≤ Limsup F (λi. measure (Ni i) A)"
proof -
have "Liminf F (λi. measure (Ni i) A) ≤ K" "Limsup F (λi. measure (Ni i) A) ≤ K"
using assms by(auto intro!: Liminf_le Limsup_bounded)
thus "Liminf F (λi. measure (Ni i) A) < ∞" "Limsup F (λi. measure (Ni i) A) < ∞"
by auto
show "0 ≤ Liminf F (λi. measure (Ni i) A)" "0 ≤ Limsup F (λi. measure (Ni i) A)"
by(auto intro!: le_Limsup Liminf_bounded assms)
qed
lemma mweak_conv1:
fixes f:: "'a ⇒ real"
assumes "mweak_conv Ni N F"
and "uniformly_continuous_map Self euclidean_metric f"
shows "(∃B. ∀x∈M. ¦f x¦ ≤ B) ⟹ ((λn. integral⇧L (Ni n) f) ⤏ integral⇧L N f) F"
using uniformly_continuous_imp_continuous_map[OF assms(2)] assms(1) by(auto simp: mweak_conv_def mtopology_of_def)
lemma mweak_conv2:
assumes "⋀f:: 'a ⇒ real. uniformly_continuous_map Self euclidean_metric f ⟹ (∃B. ∀x∈M. ¦f x¦ ≤ B)
⟹ ((λn. integral⇧L (Ni n) f) ⤏ integral⇧L N f) F"
and "closedin mtopology A"
shows "Limsup F (λx. ereal (measure (Ni x) A)) ≤ ereal (measure N A)"
proof -
consider "A = {}" | "F = ⊥" | "A ≠ {}" "F ≠ ⊥"
by blast
then show ?thesis
proof cases
assume "A = {}"
then show ?thesis
using Limsup_obtain linorder_not_less by fastforce
next
assume A_ne: "A ≠ {}" and F: "F ≠ ⊥"
have A[measurable]: "A ∈ sets N" "∀⇩F i in F. A ∈ sets (Ni i)"
using borel_of_closed[OF assms(2)] by(auto simp: sets_N eventually_mp[OF _ sets_Ni])
have "((λn. measure (Ni n) M) ⤏ measure N M) F"
proof -
have 1:"((λn. measure (Ni n) (space (Ni n))) ⤏ measure N M) F"
using assms(1)[of "λx. 1"] by(auto simp: space_N)
show ?thesis
by(rule tendsto_cong[THEN iffD1,OF eventually_mp[OF _ space_Ni] 1]) simp
qed
then obtain K where K: "⋀A. ∀⇩F x in F. measure (Ni x) A ≤ K" "⋀A. measure N A ≤ K"
using measure_converge_bounded' by auto
define Um where "Um ≡ (λm. ⋃a∈A. mball a (1 / Suc m))"
have Um_open: "openin mtopology (Um m)" for m
by(auto simp: Um_def)
hence Um_m[measurable]: "⋀m. Um m ∈ sets N" "⋀m. ∀⇩F i in F. Um m ∈ sets (Ni i)"
by(auto simp: sets_N intro!: borel_of_open eventually_mono[OF sets_Ni])
have A_Um: "A ⊆ Um m" for m
using closedin_subset[OF assms(2)] by(fastforce simp: Um_def)
have "∃fm:: _ ⇒ real. (∀x. fm x ≥ 0) ∧ (∀x. fm x ≤ 1) ∧ (∀x∈M - Um m. fm x = 0) ∧ (∀x∈A. fm x = 1) ∧
uniformly_continuous_map Self euclidean_metric fm" for m
proof -
have 1: "closedin mtopology (M - Um m)"
using Um_open[of m] by(auto simp: closedin_def Diff_Diff_Int Int_absorb1)
have 2: "A ∩ (M - Um m) = {}"
using A_Um[of m] by blast
have 3: "1 / Suc m ≤ d x y" if "x ∈ A" "y ∈ M - Um m" for x y
proof(rule ccontr)
assume "¬ 1 / real (Suc m) ≤ d x y"
then have "d x y < 1 / (1 + real m)" by simp
thus False
using that closedin_subset[OF assms(2)] by(auto simp: Um_def)
qed
show ?thesis
by (metis Urysohn_lemma_uniform[of Self,simplified mtopology_of_def,simplified,OF assms(2) 1 2 3,simplified] Diff_iff)
qed
then obtain fm :: "nat ⇒ _ ⇒ real" where fm: "⋀m x. fm m x ≥ 0" "⋀m x. fm m x ≤ 1"
"⋀m x. x ∈ A ⟹ fm m x = 1" "⋀m x. x ∈ M ⟹ x ∉ Um m ⟹ fm m x = 0"
"⋀m. uniformly_continuous_map Self euclidean_metric (fm m)"
by (metis Diff_iff)
have fm_m[measurable]: "⋀m. ∀⇩F i in F. fm m ∈ borel_measurable (Ni i)" "⋀m. fm m ∈ borel_measurable N"
using continuous_map_measurable[OF uniformly_continuous_imp_continuous_map[OF fm(5)]]
by(auto simp: borel_of_euclidean mtopology_of_def eventually_mono[OF sets_Ni])
have int_bounded:"∀⇩F n in F. (∫x. fm m x ∂Ni n) ≤ K" for m
proof(rule eventually_mono)
show "∀⇩F n in F. space (Ni n) = M ∧ finite_measure (Ni n) ∧ fm m ∈ borel_measurable (Ni n) ∧
(∫x. fm m x ∂Ni n) ≤ (∫x. 1 ∂Ni n) ∧ (∫x. 1 ∂Ni n) ≤ K"
proof(intro eventually_conj)
show "∀⇩F n in F. (∫x. fm m x ∂Ni n) ≤ (∫x. 1 ∂Ni n)"
proof(rule eventually_mono)
show "∀⇩F n in F. space (Ni n) = M ∧ finite_measure (Ni n) ∧ fm m ∈ borel_measurable (Ni n)"
by(intro eventually_conj space_Ni finite_measure_Ni fm_m)
show "space (Ni n) = M ∧ finite_measure (Ni n) ∧ fm m ∈ borel_measurable (Ni n)
⟹ (∫x. fm m x ∂Ni n) ≤ (∫x. 1 ∂Ni n)" for n
by(rule integral_mono, insert fm) (auto intro!: finite_measure.integrable_const_bound[where B=1])
qed
show "∀⇩F n in F. (∫x. 1 ∂Ni n) ≤ K"
by(rule eventually_mono[OF eventually_conj[OF K(1)[of M] space_Ni]]) simp
qed(auto simp: space_Ni finite_measure_Ni fm_m)
qed simp
have 1: "Limsup F (λn. measure (Ni n) A) ≤ measure N (Um m)" for m
proof -
have "Limsup F (λn. measure (Ni n) A) = Limsup F (λn. ∫x. indicat_real A x ∂Ni n)"
by(intro Limsup_eq[OF eventually_mono[OF A(2)]]) simp
also have "... ≤ Limsup F (λn. ∫x. fm m x ∂Ni n)"
proof(safe intro!: eventuallyI[THEN Limsup_mono[OF eventually_mp[OF _ eventually_conj[OF fm_m(1)[of m]
eventually_conj[OF finite_measure_Ni eventually_conj[OF A(2) int_bounded[of m]]]]]]])
fix n
assume h:"(∫x. fm m x ∂Ni n) ≤ K" "A ∈ sets (Ni n)" "finite_measure (Ni n)" "fm m ∈ borel_measurable (Ni n)"
with fm show "ereal (∫x. indicat_real A x ∂Ni n) ≤ ereal (∫x. fm m x ∂Ni n)"
by(auto intro!: Limsup_mono integral_mono finite_measure.integrable_const_bound[where B=1]
simp del: Bochner_Integration.integral_indicator) (auto simp: indicator_def)
qed
also have "... = (∫x. fm m x ∂N)"
using fm by(auto intro!: lim_imp_Limsup[OF F tendsto_ereal[OF assms(1)[OF fm(5)[of m]]]] exI[where x=1])
also have "... ≤ (∫x. indicat_real (Um m) x ∂N)"
unfolding ereal_less_eq(3) by(rule integral_mono, insert fm(4)[of _ m] fm(1,2))
(auto intro!: N.integrable_const_bound[where B=1],auto simp: indicator_def space_N)
also have "... = measure N (Um m)"
by simp
finally show ?thesis .
qed
have 2: "(λn. measure N (Um n)) ⇢ measure N A"
proof -
have [simp]: "(⋂ (range Um)) = A"
unfolding Um_def
by(rule nbh_Inter_closure_of[OF A_ne _ _ _ LIMSEQ_Suc,simplified closure_of_closedin[OF assms(2)]],
insert sets.sets_into_space[OF A(1)])
(auto intro!: decseq_SucI simp: frac_le space_N lim_1_over_n)
have [simp]: "monotone (≤) (λx y. y ⊆ x) Um"
unfolding Um_def by(rule nbh_decseq) (auto intro!: decseq_SucI simp: frac_le)
have "(λn. measure N (Um n)) ⇢ measure N (⋂ (range Um))"
by(rule N.finite_Lim_measure_decseq) auto
thus ?thesis by simp
qed
show ?thesis
using 1 by(auto intro!: Lim_bounded2[OF tendsto_ereal[OF 2]])
qed simp
qed
lemma mweak_conv3:
assumes "⋀A. closedin mtopology A ⟹ Limsup F (λn. measure (Ni n) A) ≤ measure N A"
and "((λn. measure (Ni n) M) ⤏ measure N M) F"
and "openin mtopology U"
shows "measure N U ≤ Liminf F (λn. measure (Ni n) U)"
proof(cases "F = ⊥")
assume F: "F ≠ ⊥"
obtain K where K: "⋀A. ∀⇩F x in F. measure (Ni x) A ≤ K" "⋀A. measure N M ≤ K"
using measure_converge_bounded'[OF assms(2)] by metis
have U[measurable]: "U ∈ sets N" "∀⇩F i in F. U ∈ sets (Ni i)"
by(auto simp: sets_N borel_of_open assms eventually_mono[OF sets_Ni])
have "ereal (measure N U) = measure N M - measure N (M - U)"
by(simp add: N.finite_measure_compl[simplified space_N])
also have "... ≤ measure N M - Limsup F (λn. measure (Ni n) (M - U))"
using assms(1)[OF openin_closedin[THEN iffD1,OF _ assms(3)]] openin_subset[OF assms(3)]
by (metis ereal_le_real ereal_minus(1) ereal_minus_mono topspace_mtopology)
also have "... = measure N M + Liminf F (λn. - ereal (measure (Ni n) (M - U)))"
by (metis ereal_Liminf_uminus minus_ereal_def)
also have "... = Liminf F (λn. measure (Ni n) M) + Liminf F (λn. - measure (Ni n) (M - U))"
using tendsto_iff_Liminf_eq_Limsup[OF F,THEN iffD1,OF tendsto_ereal[OF assms(2)]] by simp
also have "... ≤ Liminf F (λn. ereal (measure (Ni n) M) + ereal (- measure (Ni n) (M - U)))"
by(rule ereal_Liminf_add_mono) (use Liminf_measure_bounded[OF F K] in auto)
also have "... = Liminf F (λn. measure (Ni n) U)"
by(auto intro!: Liminf_eq eventually_mono[OF eventually_conj[OF U(2) eventually_conj[OF space_Ni finite_measure_Ni]]]
simp: finite_measure.finite_measure_compl)
finally show ?thesis .
qed simp
lemma mweak_conv3':
assumes "⋀U. openin mtopology U ⟹ measure N U ≤ Liminf F (λn. measure (Ni n) U)"
and "((λn. measure (Ni n) M) ⤏ measure N M) F"
and "closedin mtopology A"
shows "Limsup F (λn. measure (Ni n) A) ≤ measure N A"
proof(cases "F = ⊥")
assume F: "F ≠ ⊥"
have A[measurable]: "A ∈ sets N""∀⇩F i in F. A ∈ sets (Ni i)"
by(auto simp: sets_N borel_of_closed assms eventually_mono[OF sets_Ni])
have "Limsup F (λn. measure (Ni n) A) = Limsup F (λn. ereal (measure (Ni n) M) + ereal (- measure (Ni n) (M - A)))"
by(auto intro!: Limsup_eq eventually_mono[OF eventually_conj[OF A(2) eventually_conj[OF space_Ni finite_measure_Ni]]]
simp: finite_measure.finite_measure_compl)
also have "... ≤ Limsup F (λn. measure (Ni n) M) + Limsup F (λn. - measure (Ni n) (M - A))"
by(rule ereal_Limsup_add_mono)
also have "... = Limsup F (λn. measure (Ni n) M) + Limsup F (λn. - ereal ( measure (Ni n) (M - A)))"
by simp
also have "... = Limsup F (λn. measure (Ni n) M) - Liminf F (λn. measure (Ni n) (M - A))"
unfolding ereal_Limsup_uminus using minus_ereal_def by presburger
also have "... = measure N M - Liminf F (λn. measure (Ni n) (M - A))"
by(simp add: lim_imp_Limsup[OF F tendsto_ereal[OF assms(2)]])
also have "... ≤ measure N M - measure N (M - A)"
using assms(1)[OF openin_diff[OF openin_topspace assms(3)]] closedin_subset[OF assms(3)]
by (metis assms(1,3) ereal_le_real ereal_minus(1) ereal_minus_mono open_in_mspace openin_diff)
also have "... = measure N A"
by(simp add: N.finite_measure_compl[simplified space_N])
finally show ?thesis .
qed simp
lemma mweak_conv4:
assumes "⋀A. closedin mtopology A ⟹ Limsup F (λn. measure (Ni n) A) ≤ measure N A"
and "⋀U. openin mtopology U ⟹ measure N U ≤ Liminf F (λn. measure (Ni n) U)"
and [measurable]: "A ∈ sets (borel_of mtopology)"
and "measure N (mtopology frontier_of A) = 0"
shows "((λn. measure (Ni n) A) ⤏ measure N A) F"
proof(cases "F = ⊥")
assume F: "F ≠ ⊥"
have [measurable]: "A ∈ sets N" "mtopology closure_of A ∈ sets N" "mtopology interior_of A ∈ sets N"
"mtopology frontier_of A ∈ sets N"
and A: "∀⇩F i in F. A ∈ sets (Ni i)" "∀⇩F i in F. mtopology closure_of A ∈ sets (Ni i)"
"∀⇩F i in F. mtopology interior_of A ∈ sets (Ni i)" "∀⇩F i in F. mtopology frontier_of A ∈ sets (Ni i)"
by(auto simp: sets_N borel_of_open borel_of_closed closedin_frontier_of eventually_mono[OF sets_Ni])
have "Limsup F (λn. measure (Ni n) A) ≤ Limsup F (λn. measure (Ni n) (mtopology closure_of A))"
using sets.sets_into_space[OF assms(3)]
by(fastforce intro!: Limsup_mono finite_measure.finite_measure_mono[OF _ closure_of_subset]
eventually_mono[OF eventually_conj[OF finite_measure_Ni A(2)]] simp: space_borel_of)
also have "... ≤ measure N (mtopology closure_of A)"
by(auto intro!: assms(1))
also have "... ≤ measure N (A ∪ (mtopology frontier_of A))"
using closure_of_subset[of A mtopology] sets.sets_into_space[OF assms(3)] interior_of_subset[of mtopology A]
by(auto simp: space_borel_of interior_of_union_frontier_of[symmetric]
simp del: interior_of_union_frontier_of intro!: N.finite_measure_mono)
also have "... ≤ measure N A + measure N (mtopology frontier_of A)"
by(simp add: N.finite_measure_subadditive)
also have "... = measure N A" by(simp add: assms)
finally have 1: "Limsup F (λn. measure (Ni n) A) ≤ measure N A" .
have "ereal (measure N A) = measure N A - measure N (mtopology frontier_of A)"
by(simp add: assms)
also have "... ≤ measure N (A - mtopology frontier_of A)"
by(auto simp: N.finite_measure_Diff' intro!: N.finite_measure_mono)
also have "... ≤ measure N (mtopology interior_of A)"
using closure_of_subset[OF sets.sets_into_space[OF assms(3),simplified space_borel_of]]
by(auto intro!: N.finite_measure_mono simp: frontier_of_def)
also have "... ≤ Liminf F (λn. measure (Ni n) (mtopology interior_of A))"
by(auto intro!: assms)
also have "... ≤ Liminf F (λn. measure (Ni n) A)"
by(fastforce intro!: Liminf_mono finite_measure.finite_measure_mono interior_of_subset
eventually_mono[OF eventually_conj[OF finite_measure_Ni A(1)]])
finally have 2: "measure N A ≤ Liminf F (λn. measure (Ni n) A)" .
have "Liminf F (λn. measure (Ni n) A) = measure N A ∧ Limsup F (λn. measure (Ni n) A) = measure N A"
using 1 2 order.trans[OF 2 Liminf_le_Limsup[OF F]] order.trans[OF Liminf_le_Limsup[OF F] 1] antisym
by blast
thus ?thesis
by (metis F lim_ereal tendsto_Limsup)
qed simp
lemma mweak_conv5:
assumes "⋀A. A ∈ sets (borel_of mtopology) ⟹ measure N (mtopology frontier_of A) = 0
⟹ ((λn. measure (Ni n) A) ⤏ measure N A) F"
shows "mweak_conv Ni N F"
proof(cases "F = ⊥")
assume F: "F ≠ ⊥"
show ?thesis
unfolding mweak_conv_def
proof safe
fix f B
assume h:"continuous_map mtopology euclideanreal f" "∀x∈M. ¦f x¦ ≤ B"
have "((λn. measure (Ni n) M) ⤏ measure N M) F"
using frontier_of_topspace[of mtopology] by(auto intro!: assms borel_of_open)
then obtain K where K: "⋀A. ∀⇩F x in F. measure (Ni x) A ≤ K" "⋀A. measure N A ≤ K"
using measure_converge_bounded' by metis
from continuous_map_measurable[OF h(1)]
have f[measurable]:"f ∈ borel_measurable N" "∀⇩F i in F. f ∈ borel_measurable (Ni i)"
by(auto cong: measurable_cong_sets simp: sets_N borel_of_euclidean intro!: eventually_mono[OF sets_Ni])
have f_int[simp]: "integrable N f" "∀⇩F i in F. integrable (Ni i) f"
using h by(auto intro!: N.integrable_const_bound[where B=B] finite_measure.integrable_const_bound[where B=B]
eventually_mono[OF eventually_conj[OF eventually_conj[OF space_Ni f(2)] finite_measure_Ni]] simp: space_N)
show "((λn. ∫x. f x ∂Ni n) ⤏ (∫x. f x ∂N)) F"
proof(cases "B > 0")
case False
with h(2) have 1:"⋀x. x ∈ space N ⟹ f x = 0" "∀⇩F i in F. ∀x. x ∈ space (Ni i) ⟶ f x = 0"
by (fastforce simp: space_N intro!: eventually_mono[OF space_Ni])+
thus ?thesis
by(auto cong: Bochner_Integration.integral_cong
intro!: tendsto_cong[where g="λx. 0" and f="(λn. ∫x. f x ∂Ni n)",THEN iffD2] eventually_mono[OF 1(2)])
next
case B[arith]:True
show ?thesis
proof(cases "K > 0")
case False
then have 1:"measure N A = 0" "∀⇩F x in F. measure (Ni x) M = 0" for A
using K(2)[of A] measure_nonneg[of _ A] measure_le_0_iff
by(fastforce intro!: eventuallyI[THEN eventually_mp[OF _ K(1)[of M]]])+
hence "N = null_measure (borel_of mtopology)"
by(auto intro!: measure_eqI simp: sets_N N.emeasure_eq_measure)
moreover have "∀⇩F x in F. Ni x = null_measure (borel_of mtopology)"
using order.trans[where c=0,OF finite_measure.bounded_measure]
by(intro eventually_mono[OF eventually_conj[OF eventually_conj[OF space_Ni eventually_conj[OF finite_measure_Ni sets_Ni]] 1(2)]] measure_eqI)
(auto simp: finite_measure.emeasure_eq_measure measure_le_0_iff)
ultimately show ?thesis
by (simp add: eventually_mono tendsto_eventually)
next
case [arith]:True
show ?thesis
unfolding tendsto_iff LIMSEQ_def dist_real_def
proof safe
fix r :: real
assume r[arith]: "r > 0"
define ν where "ν ≡ distr N borel f"
have sets_nu[measurable_cong, simp]: "sets ν = sets borel"
by(simp add: ν_def)
interpret ν: finite_measure ν
by(auto simp: ν_def N.finite_measure_distr)
have "(1 / 6) * (r / K) * (1 / B) > 0"
by auto
from nat_approx_posE[OF this]
obtain N' where N': "1 / (Suc N') < (1 / 6) * (r / K) * (1 / B)"
by auto
from mult_strict_right_mono[OF this B] have N'':"B / (Suc N') < (1 / 6) * (r / K)"
by auto
have "∃tn ∈ {B / Suc N' * (real n - 1) - B<..<B / Suc N' * real n - B}. measure ν {tn} = 0" for n
proof(rule ccontr)
assume "¬ (∃tn ∈ {B / Suc N' * (real n - 1) - B<..<B / Suc N' * real n - B}. measure ν {tn} = 0)"
then have "{B / Suc N' * (real n - 1) - B<..<B / Suc N' * real n - B} ⊆ {x. measure ν {x} ≠ 0}"
by auto
moreover have "uncountable {B / Suc N' * (real n - 1) - B<..<B / Suc N' * real n - B}"
unfolding uncountable_open_interval right_diff_distrib by auto
ultimately show False
using ν.countable_support by(meson countable_subset)
qed
then obtain tn where tn: "⋀n. B / Suc N' * (real n - 1) - B < tn n" "⋀n. tn n < B / Suc N' * real n - B"
"⋀n. measure ν {tn n} = 0"
by (metis greaterThanLessThan_iff)
have t0: "tn 0 < - B"
using tn(2)[of 0] by simp
have tN: "B < tn (Suc (2 * (Suc N')))"
proof -
have "B * (2 + 2 * real N') / (1 + real N') = 2 * B"
by(auto simp: divide_eq_eq)
with tn(1)[of "Suc (2 * (Suc N'))"] show ?thesis
by simp
qed
define Aj where "Aj ≡ (λj. f -` {tn j..<tn (Suc j)} ∩ M)"
have sets_Aj[measurable]: "⋀j. Aj j ∈ sets N" "∀⇩F i in F. ∀j. Aj j ∈ sets (Ni i)"
using measurable_sets[OF f(1)]
by(auto simp: Aj_def space_N intro!: eventually_mono[OF eventually_conj[OF space_Ni f(2)]])
have m_f: "measure N (mtopology frontier_of (Aj j)) = 0" for j
proof -
have "measure N (mtopology frontier_of (Aj j)) = measure N (mtopology closure_of (Aj j) - mtopology interior_of (Aj j))"
by(simp add: frontier_of_def)
also have "... ≤ measure ν {tn j, tn (Suc j)}"
proof -
have [simp]: "{x ∈ M. tn j ≤ f x ∧ f x ≤ tn (Suc j)} = f -` {tn j..tn (Suc j)} ∩ M"
"{x ∈ M. tn j < f x ∧ f x < tn (Suc j)} = f -` {tn j<..<tn (Suc j)} ∩ M"
by auto
have "mtopology closure_of (Aj j) ⊆ f -` {tn j..tn (Suc j)} ∩ M"
by(rule closure_of_minimal,insert closedin_continuous_map_preimage[OF h(1),of "{tn j..tn (Suc j)}"])
(auto simp: Aj_def)
moreover have "f -` {tn j<..<tn (Suc j)} ∩ M ⊆ mtopology interior_of (Aj j)"
by(rule interior_of_maximal,insert openin_continuous_map_preimage[OF h(1),of "{tn j<..<tn (Suc j)}"])
(auto simp: Aj_def)
ultimately have "mtopology closure_of (Aj j) - mtopology interior_of (Aj j) ⊆ f -` {tn j,tn (Suc j)} ∩ M"
by(fastforce dest: contra_subsetD)
with closedin_subset[OF closedin_closure_of,of mtopology "Aj j"] show ?thesis
by(auto simp: ν_def measure_distr intro!: N.finite_measure_mono) (auto simp: space_N)
qed
also have "... ≤ measure ν {tn j} + measure ν {tn (Suc j)}"
using ν.finite_measure_subadditive[of "{tn (Suc j)}" "{tn j}"] by auto
also have "... = 0"
by(simp add: tn)
finally show ?thesis
by (simp add: measure_le_0_iff)
qed
hence conv:"((λn. measure (Ni n) (Aj j)) ⤏ measure N (Aj j)) F" for j
by(auto intro!: assms simp: sets_N[symmetric] sets_Ni)
have fil1:"∀⇩F n in F. ¦tn j¦ * ¦measure (Ni n) (Aj j) - measure N (Aj j)¦ < r / (3 * (Suc (Suc (2 * Suc N'))))" for j
proof(cases "¦tn j¦ = 0")
case pos:False
then have "r / (3 * (Suc (Suc (2 * Suc N')))) * (1 / ¦tn j¦) > 0"
by auto
with conv[of j]
have 1:"∀⇩F n in F. ¦measure (Ni n) (Aj j) - measure N (Aj j)¦
< r / (3 * (Suc (Suc (2 * Suc N')))) * (1 / ¦tn j¦)"
unfolding tendsto_iff dist_real_def by metis
have "∀⇩F n in F. ¦tn j¦ * ¦measure (Ni n) (Aj j) - measure N (Aj j)¦ < r / (3 * (Suc (Suc (2 * Suc N'))))"
proof(rule eventuallyI[THEN eventually_mp[OF _ 1]])
show "¦measure (Ni n) (Aj j) - measure N (Aj j)¦ < r / real (3 * Suc (Suc (2 * Suc N'))) * (1 / ¦tn j¦)
⟶ ¦tn j¦ * ¦measure (Ni n) (Aj j) - measure N (Aj j)¦ < r / real (3 * Suc (Suc (2 * Suc N')))" for n
using mult_less_cancel_right_pos[of "¦tn j¦" "¦measure (Ni n) (Aj j) - measure N (Aj j)¦"
"r / real (3 * Suc (Suc (2 * Suc N'))) * (1 / ¦tn j¦)"] pos by(simp add: mult.commute)
qed
thus ?thesis by auto
qed auto
hence fil1:"∀⇩F n in F. ∀j∈{..Suc (2 * Suc N')}. ¦tn j¦ * ¦measure (Ni n) (Aj j) - measure N (Aj j)¦
< r / (3 * (Suc (Suc (2 * Suc N'))))"
by(auto intro!: eventually_ball_finite)
have tn_strictmono: "strict_mono tn"
unfolding strict_mono_Suc_iff
proof safe
fix n
show "tn n < tn (Suc n)"
using tn(1)[of "Suc n"] tn(2)[of n] by auto
qed
from strict_mono_less[OF this] have Aj_disj: "disjoint_family Aj"
by(auto simp: disjoint_family_on_def Aj_def) (metis linorder_not_le not_less_eq order_less_le order_less_trans)
have Aj_un: "M = (⋃i∈{..Suc (2 * Suc N')}. Aj i)"
proof
show "M ⊆ ⋃ (Aj ` {..Suc (2 * Suc N')})"
proof
fix x
assume x:"x ∈ M"
with h(2) tN t0 have h':"tn 0 < f x" "f x < tn (Suc (2 * Suc N'))"
by fastforce+
define n where "n ≡ LEAST n. f x < tn (Suc n)"
have "f x < tn (Suc n)"
unfolding n_def by(rule LeastI_ex) (use h' in auto)
moreover have "tn n ≤ f x"
by (metis Least_le Suc_n_not_le_n h'(1) less_eq_real_def linorder_not_less n_def not0_implies_Suc)
moreover have "n ≤ 2 * Suc N'"
unfolding n_def by(rule Least_le) (use h' in auto)
ultimately show "x ∈ ⋃ (Aj ` {..Suc (2 * Suc N')})"
by(auto simp: Aj_def x)
qed
qed(auto simp: Aj_def)
define h where "h ≡ (λx. ∑i≤Suc (2 * (Suc N')). tn i * indicat_real (Aj i) x)"
have h[measurable]: "h ∈ borel_measurable N" "∀⇩F i in F. h ∈ borel_measurable (Ni i)"
by(auto simp: h_def simp del: sum.atMost_Suc sum_mult_indicator intro!: borel_measurable_sum eventually_mono[OF sets_Aj(2)])
have h_f: "h x ≤ f x" if "x ∈ M" for x
proof -
from that disjoint_family_onD[OF Aj_disj]
obtain n where n: "x ∈ Aj n" "n ≤ Suc (2 * Suc N')" "⋀m. m ≠ n ⟹ x ∉ Aj m"
by(auto simp: Aj_un)
have "h x = (∑i≤Suc (2 * (Suc N')). if i = n then tn i else 0)"
unfolding h_def by(rule Finite_Cartesian_Product.sum_cong_aux) (use n in auto)
also have "... = tn n"
using n by auto
also have "... ≤ f x"
using n(1) by(auto simp: Aj_def)
finally show ?thesis .
qed
have f_h: "f x < h x + (1 / 3) * (r / enn2real K)" if "x ∈ M" for x
proof -
from that disjoint_family_onD[OF Aj_disj]
obtain n where n: "x ∈ Aj n" "n ≤ Suc (2 * Suc N')" "⋀m. m ≠ n ⟹ x ∉ Aj m"
by(auto simp: Aj_un)
have "h x = (∑i≤Suc (2 * (Suc N')). if i = n then tn i else 0)"
unfolding h_def by(rule Finite_Cartesian_Product.sum_cong_aux) (use n in auto)
also have "... = tn n"
using n by auto
finally have hx: "h x = tn n" .
have "f x < tn (Suc n)"
using n by(auto simp: Aj_def)
hence "f x - tn n < tn (Suc n) - tn n" by auto
also have "... < B / real (Suc N') * real (Suc n) - (B / real (Suc N') * (real n - 1))"
using tn(1)[of n] tn(2)[of "Suc n"] by auto
also have "... = 2 * B / real (Suc N')"
by(auto simp: diff_divide_distrib[symmetric]) (simp add: ring_distribs(1) right_diff_distrib)
also have "... < (1 / 3) * (r / enn2real K)"
using N'' by auto
finally show ?thesis
using hx by simp
qed
with h_f have fh:"⋀x. x ∈ M ⟹ ¦f x - h x¦ < (1 / 3) * (r / enn2real K)"
by fastforce
have h_bounded: "¦h x¦ ≤ (∑i≤Suc (2 * (Suc N')). ¦tn i¦)" for x
unfolding h_def by(rule order.trans[OF sum_abs[of "λi. tn i * indicat_real (Aj i) x"
"{..Suc (2 * (Suc N'))}"] sum_mono]) (auto simp: indicator_def)
hence h_int[simp]: "integrable N h" "∀⇩F i in F. integrable (Ni i) h"
by(auto intro!: N.integrable_const_bound[where B="∑i≤Suc (2 * (Suc N')). ¦tn i¦"]
finite_measure.integrable_const_bound[where B="∑i≤Suc (2 * (Suc N')). ¦tn i¦"]
eventually_mono[OF eventually_conj[OF finite_measure_Ni h(2)]])
show "∀⇩F n in F. ¦(∫x. f x ∂Ni n) - (∫x. f x ∂N)¦ < r"
proof(safe intro!: eventually_mono[OF eventually_conj[OF K(1)[of M]
eventually_conj[OF eventually_conj[OF fil1 h_int(2)]
eventually_conj[OF f_int(2)
eventually_conj[OF eventually_conj[OF finite_measure_Ni space_Ni]
sets_Aj(2)]]]]])
fix n
assume n:"∀j∈{..Suc (2 * Suc N')}.
¦tn j¦ * ¦measure (Ni n) (Aj j) - measure N (Aj j)¦ < r / real (3 * Suc (Suc (2 * Suc N')))"
"measure (Ni n) (space (Ni n)) ≤ K"
and h_intn[simp]:"integrable (Ni n) h" and f_intn[simp]:"integrable (Ni n) f"
and sets_Aj2[measurable]:"∀j. Aj j ∈ sets (Ni n)"
and space_Ni:"M = space (Ni n)"
and "finite_measure (Ni n)"
interpret Ni: finite_measure "(Ni n)" by fact
have "¦(∫x. f x ∂Ni n) - (∫x. f x ∂N)¦
= ¦(∫x. f x - h x ∂Ni n) + ((∫x. h x ∂Ni n) - (∫x. h x ∂N)) - (∫x. f x - h x ∂N)¦"
by(simp add: Bochner_Integration.integral_diff[OF f_int(1) h_int(1)] Bochner_Integration.integral_diff[OF f_intn h_intn])
also have "... ≤ ¦∫x. f x - h x ∂Ni n¦ + ¦(∫x. h x ∂Ni n) - (∫x. h x ∂N)¦ + ¦∫x. f x - h x ∂N¦"
by linarith
also have "... ≤ (∫x. ¦f x - h x¦ ∂Ni n) + ¦(∫x. h x ∂Ni n) - (∫x. h x ∂N)¦ + (∫x. ¦f x - h x¦ ∂N)"
using integral_abs_bound by (simp add: add_mono del: f_int f_intn)
also have "... ≤ r / 3 + ¦(∫x. h x ∂Ni n) - (∫x. h x ∂N)¦ + r / 3"
proof -
have "(∫x. ¦f x - h x¦ ∂Ni n) ≤ (∫x. (1 / 3) * (r / enn2real K) ∂Ni n)"
by(rule integral_mono) (insert fh, auto simp: space_Ni order.strict_implies_order)
also have "... = measure (Ni n) (space (Ni n)) / K * (r / 3)"
by auto
also have "... ≤ r / 3"
by(rule mult_left_le_one_le) (use n space_Ni in auto)
finally have 1:"(∫x. ¦f x - h x¦ ∂Ni n) ≤ r / 3" .
have "(∫x. ¦f x - h x¦ ∂N) ≤ (∫x. (1 / 3) * (r / K) ∂N)"
by(rule integral_mono) (insert fh, auto simp: space_N order.strict_implies_order)
also have "... = measure N (space N) / enn2real K * (r / 3)"
by auto
also have "... ≤ r / 3"
by(rule mult_left_le_one_le) (use K space_N in auto)
finally show ?thesis
using 1 by auto
qed
also have "... < r"
proof -
have "¦(∫x. h x ∂Ni n) - (∫x. h x ∂N)¦
= ¦(∫x. (∑i≤Suc (2 * (Suc N')). tn i * indicat_real (Aj i) x) ∂Ni n)
- (∫x. (∑i≤Suc (2 * (Suc N')). tn i * indicat_real (Aj i) x) ∂N)¦"
by(simp add: h_def)
also have "... = ¦(∑i≤Suc (2 * (Suc N')). (∫x. tn i * indicat_real (Aj i) x ∂Ni n))
- (∑i≤Suc (2 * (Suc N')). (∫x. tn i * indicat_real (Aj i) x ∂N))¦"
proof -
have 1: "(∫x. (∑i≤Suc (2 * (Suc N')). tn i * indicat_real (Aj i) x) ∂Ni n)
= (∑i≤Suc (2 * (Suc N')). (∫x. tn i * indicat_real (Aj i) x ∂Ni n))"
by(rule Bochner_Integration.integral_sum) (use integrable_real_mult_indicator sets_Aj2 in blast)
have 2: "(∫x. (∑i≤Suc (2 * (Suc N')). tn i * indicat_real (Aj i) x) ∂N)
= (∑i≤Suc (2 * (Suc N')). (∫x. tn i * indicat_real (Aj i) x ∂N))"
by(rule Bochner_Integration.integral_sum) (use integrable_real_mult_indicator sets_Aj(1) in blast)
show ?thesis
by(simp only: 1 2)
qed
also have "... = ¦(∑i≤Suc (2 * (Suc N')). tn i * measure (Ni n) (Aj i))
- (∑i≤Suc (2 * (Suc N')). tn i * measure N (Aj i))¦"
by simp
also have "... = ¦∑i≤Suc (2 * (Suc N')). tn i * (measure (Ni n) (Aj i) - measure N (Aj i))¦"
by(auto simp: sum_subtractf right_diff_distrib)
also have "... ≤ (∑i≤Suc (2 * (Suc N')). ¦tn i * (measure (Ni n) (Aj i) - measure N (Aj i))¦)"
by(rule sum_abs)
also have "... ≤ (∑i≤Suc (2 * (Suc N')). ¦tn i¦ * ¦(measure (Ni n) (Aj i) - measure N (Aj i))¦)"
by(simp add: abs_mult)
also have "... < (∑i≤Suc (2 * (Suc N')). r / (3 * (Suc (Suc (2 * Suc N')))))"
by(rule sum_strict_mono) (use n in auto)
also have "... = real (Suc (Suc (2 * Suc N'))) * (1 / (Suc (Suc (2 * Suc N'))) * (r / 3))"
by auto
also have "... = r / 3"
unfolding mult.assoc[symmetric] by simp
finally show ?thesis by auto
qed
finally show "¦(∫x. f x ∂Ni n) - (∫x. f x ∂N)¦ < r" .
qed
qed
qed
qed
qed(auto simp: sets_N finite_measure_N intro!: eventually_mono[OF eventually_Ni])
qed (simp add: mweak_conv_def sets_Ni sets_N finite_measure_N)
lemma mweak_conv_eq: "mweak_conv Ni N F
⟷ (∀f::'a ⇒ real. continuous_map mtopology euclidean f ⟶ (∃B. ∀x∈M. ¦f x¦ ≤ B)
⟶ ((λn. ∫x. f x ∂Ni n) ⤏ (∫x. f x ∂N)) F)"
by(auto simp: sets_N mweak_conv_def finite_measure_N
intro!: eventually_mono[OF eventually_conj[OF finite_measure_Ni sets_Ni]])
lemma mweak_conv_eq1: "mweak_conv Ni N F
⟷ (∀f::'a ⇒ real. uniformly_continuous_map Self euclidean_metric f ⟶ (∃B. ∀x∈M. ¦f x¦ ≤ B)
⟶ ((λn. ∫x. f x ∂Ni n) ⤏ (∫x. f x ∂N)) F)"
proof
assume h:"∀f::'a ⇒ real. uniformly_continuous_map Self euclidean_metric f ⟶ (∃B. ∀x∈M. ¦f x¦ ≤ B)
⟶ ((λn. ∫x. f x ∂Ni n) ⤏ (∫x. f x ∂N)) F"
have 1:"((λn. measure (Ni n) M) ⤏ measure N M) F"
proof -
have 1:"((λn. measure (Ni n) (space (Ni n))) ⤏ measure N M) F"
using h[rule_format,OF uniformly_continuous_map_const[THEN iffD2,of _ 1]]
by(auto simp: space_N)
show ?thesis
by(auto intro!: tendsto_cong[THEN iffD1,OF _ 1] eventually_mono[OF space_Ni])
qed
have "⋀A. closedin mtopology A ⟹ Limsup F (λn. measure (Ni n) A) ≤ measure N A"
and "⋀U. openin mtopology U ⟹ measure N U ≤ Liminf F (λn. measure (Ni n) U)"
using mweak_conv2[OF h[rule_format]] mweak_conv3[OF _ 1] by auto
hence "⋀A. A ∈ sets (borel_of mtopology) ⟹ measure N (mtopology frontier_of A) = 0
⟹ ((λn. measure (Ni n) A) ⤏ measure N A) F"
using mweak_conv4 by auto
with mweak_conv5 show "mweak_conv Ni N F" by auto
qed(use mweak_conv1 in auto)
lemma mweak_conv_eq2: "mweak_conv Ni N F
⟷ ((λn. measure (Ni n) M) ⤏ measure N M) F ∧ (∀A. closedin mtopology A
⟶ Limsup F (λn. measure (Ni n) A) ≤ measure N A)"
proof safe
assume "mweak_conv Ni N F"
note h = this[simplified mweak_conv_eq1]
show 1:"((λn. measure (Ni n) M) ⤏ measure N M) F"
proof -
have 1:"((λn. measure (Ni n) (space (Ni n))) ⤏ measure N M) F"
using h[rule_format,OF uniformly_continuous_map_const[THEN iffD2,of _ 1]]
by(auto simp: space_N)
show ?thesis
by(auto intro!: tendsto_cong[THEN iffD1,OF _ 1] eventually_mono[OF space_Ni])
qed
show "⋀A. closedin mtopology A ⟹ Limsup F (λn. measure (Ni n) A) ≤ measure N A"
using mweak_conv2[OF h[rule_format]] by auto
next
assume h: "((λn. measure (Ni n) M) ⤏ measure N M) F"
"∀A. closedin mtopology A ⟶ Limsup F (λn. measure (Ni n) A) ≤ measure N A"
then have "⋀A. closedin mtopology A ⟹ Limsup F (λn. measure (Ni n) A) ≤ measure N A"
and "⋀U. openin mtopology U ⟹ measure N U ≤ Liminf F (λn. measure (Ni n) U)"
using mweak_conv3 by auto
hence "⋀A. A ∈ sets (borel_of mtopology) ⟹ measure N (mtopology frontier_of A) = 0
⟹ ((λn. measure (Ni n) A) ⤏ measure N A) F"
using mweak_conv4 by auto
with mweak_conv5 show "mweak_conv Ni N F" by auto
qed
lemma mweak_conv_eq3: "mweak_conv Ni N F
⟷ ((λn. measure (Ni n) M) ⤏ measure N M) F ∧
(∀U. openin mtopology U ⟶ measure N U ≤ Liminf F (λn. measure (Ni n) U))"
proof safe
assume "mweak_conv Ni N F"
note h = this[simplified mweak_conv_eq1]
show 1:"((λn. measure (Ni n) M) ⤏ measure N M) F"
proof -
have 1:"((λn. measure (Ni n) (space (Ni n))) ⤏ measure N M) F"
using h[rule_format,OF uniformly_continuous_map_const[THEN iffD2,of _ 1]]
by(auto simp: space_N)
show ?thesis
by(auto intro!: tendsto_cong[THEN iffD1,OF _ 1] eventually_mono[OF space_Ni])
qed
show "⋀U. openin mtopology U ⟹ measure N U ≤ Liminf F (λn. measure (Ni n) U)"
using mweak_conv2[OF h[rule_format]] mweak_conv3[OF _ 1] by auto
next
assume h: "((λn. measure (Ni n) M) ⤏ measure N M) F"
"∀U. openin mtopology U ⟶ measure N U ≤ Liminf F (λn. measure (Ni n) U)"
then have "⋀A. closedin mtopology A ⟹ Limsup F (λn. measure (Ni n) A) ≤ measure N A"
and "⋀U. openin mtopology U ⟹ measure N U ≤ Liminf F (λn. measure (Ni n) U)"
using mweak_conv3' by auto
hence "⋀A. A ∈ sets (borel_of mtopology) ⟹ measure N (mtopology frontier_of A) = 0
⟹ ((λn. measure (Ni n) A) ⤏ measure N A) F"
using mweak_conv4 by auto
with mweak_conv5 show "mweak_conv Ni N F" by auto
qed
lemma mweak_conv_eq4: "mweak_conv Ni N F
⟷ (∀A ∈ sets (borel_of mtopology). measure N (mtopology frontier_of A) = 0
⟶ ((λn. measure (Ni n) A) ⤏ measure N A) F)"
proof safe
assume "mweak_conv Ni N F"
note h = this[simplified mweak_conv_eq1]
have 1:"((λn. measure (Ni n) M) ⤏ measure N M) F"
proof -
have 1:"((λn. measure (Ni n) (space (Ni n))) ⤏ measure N M) F"
using h[rule_format,OF uniformly_continuous_map_const[THEN iffD2,of _ 1]]
by(auto simp: space_N)
show ?thesis
by(auto intro!: tendsto_cong[THEN iffD1,OF _ 1] eventually_mono[OF space_Ni])
qed
have "⋀A. closedin mtopology A ⟹ Limsup F (λn. measure (Ni n) A) ≤ measure N A"
and "⋀U. openin mtopology U ⟹ measure N U ≤ Liminf F (λn. measure (Ni n) U)"
using mweak_conv2[OF h[rule_format]] mweak_conv3[OF _ 1] by auto
thus "⋀A. A ∈ sets (borel_of mtopology) ⟹ measure N (mtopology frontier_of A) = 0
⟹ ((λn. measure (Ni n) A) ⤏ measure N A) F"
using mweak_conv4 by auto
qed(use mweak_conv5 in auto)
corollary mweak_conv_imp_limit_space:
assumes "mweak_conv Ni N F"
shows "((λi. measure (Ni i) M) ⤏ measure N M) F"
using assms by(simp add: mweak_conv_eq3)
end
lemma
assumes "metrizable_space X"
and "∀⇩F i in F. sets (Ni i) = sets (borel_of X)" "∀⇩F i in F. finite_measure (Ni i)"
and "sets N = sets (borel_of X)" "finite_measure N"
shows weak_conv_on_eq1:
"weak_conv_on Ni N F X
⟷ ((λn. measure (Ni n) (topspace X)) ⤏ measure N (topspace X)) F
∧ (∀A. closedin X A ⟶ Limsup F (λn. measure (Ni n) A) ≤ measure N A)" (is ?eq1)
and weak_conv_on_eq2:
"weak_conv_on Ni N F X
⟷ ((λn. measure (Ni n) (topspace X)) ⤏ measure N (topspace X)) F
∧ (∀U. openin X U ⟶ measure N U ≤ Liminf F (λn. measure (Ni n) U))" (is ?eq2)
and weak_conv_on_eq3:
"weak_conv_on Ni N F X
⟷ (∀A ∈ sets (borel_of X). measure N (X frontier_of A) = 0
⟶ ((λn. measure (Ni n) A) ⤏ measure N A) F)" (is ?eq3)
proof -
obtain d where d: "Metric_space (topspace X) d" "Metric_space.mtopology (topspace X) d = X"
by (metis Metric_space.topspace_mtopology assms(1) metrizable_space_def)
then interpret mweak_conv_fin "topspace X" d Ni N
by(auto simp: mweak_conv_fin_def mweak_conv_fin_axioms_def assms)
show ?eq1 ?eq2 ?eq3
using mweak_conv_eq2 mweak_conv_eq3 mweak_conv_eq4 unfolding d(2) by blast+
qed
end