Theory Riesz_Representation
section ‹The Riesz Representation Theorem›
theory Riesz_Representation
imports "Regular_Measure"
"Urysohn_Locally_Compact_Hausdorff"
begin
subsection ‹ Lemmas for Complex-Valued Continuous Maps ›
lemma continuous_map_Re'[simp,continuous_intros]: "continuous_map euclidean euclideanreal Re"
and continuous_map_Im'[simp,continuous_intros]: "continuous_map euclidean euclideanreal Im"
and continuous_map_complex_of_real'[simp,continuous_intros]: "continuous_map euclideanreal euclidean complex_of_real"
by(auto simp: continuous_on tendsto_Re tendsto_Im)
corollary
assumes "continuous_map X euclidean f"
shows continuous_map_Re[simp,continuous_intros]: "continuous_map X euclideanreal (λx. Re (f x))"
and continuous_map_Im[simp,continuous_intros]: "continuous_map X euclideanreal (λx. Im (f x))"
by(auto intro!: continuous_map_compose[OF assms,simplified comp_def] continuous_map_Re' continuous_map_Im')
lemma continuous_map_of_real_iff[simp]:
"continuous_map X euclidean (λx. of_real (f x) :: _ :: real_normed_div_algebra) ⟷ continuous_map X euclideanreal f"
by(auto simp: continuous_map_atin tendsto_of_real_iff)
lemma continuous_map_complex_mult [continuous_intros]:
fixes f :: "'a ⇒ complex"
shows "⟦continuous_map X euclidean f; continuous_map X euclidean g⟧ ⟹ continuous_map X euclidean (λx. f x * g x)"
by (simp add: continuous_map_atin tendsto_mult)
lemma continuous_map_complex_mult_left:
fixes f :: "'a ⇒ complex"
shows "continuous_map X euclidean f ⟹ continuous_map X euclidean (λx. c * f x)"
by(simp add: continuous_map_atin tendsto_mult)
lemma complex_continuous_map_iff:
"continuous_map X euclidean f ⟷ continuous_map X euclideanreal (λx. Re (f x)) ∧ continuous_map X euclideanreal (λx. Im (f x))"
proof safe
assume "continuous_map X euclideanreal (λx. Re (f x))" "continuous_map X euclideanreal (λx. Im (f x))"
then have "continuous_map X euclidean (λx. Re (f x) + 𝗂 * Im (f x))"
by(auto intro!: continuous_map_add continuous_map_complex_mult_left continuous_map_compose[of X euclideanreal,simplified comp_def])
thus "continuous_map X euclidean f"
using complex_eq by auto
qed(use continuous_map_compose[OF _ continuous_map_Re',simplified comp_def] continuous_map_compose[OF _ continuous_map_Im',simplified comp_def] in auto)
lemma complex_integrable_iff: "complex_integrable M f ⟷ integrable M (λx. Re (f x)) ∧ integrable M (λx. Im (f x))"
proof safe
assume h[measurable]:"integrable M (λx. Re (f x))" "integrable M (λx. Im (f x))"
show "complex_integrable M f"
unfolding integrable_iff_bounded
proof safe
show f[measurable]:"f ∈ borel_measurable M"
using borel_measurable_complex_iff h by blast
have "(∫⇧+ x. ennreal (cmod (f x)) ∂M) ≤ (∫⇧+ x. ennreal (¦Re (f x)¦ + ¦Im (f x)¦) ∂M)"
by(intro nn_integral_mono ennreal_leI) (use cmod_le in auto)
also have "... = (∫⇧+ x. ennreal ¦Re (f x)¦ ∂M) + (∫⇧+ x. ennreal ¦Im (f x)¦ ∂M)"
by(auto intro!: nn_integral_add)
also have "... < ∞"
using h by(auto simp: integrable_iff_bounded)
finally show "(∫⇧+ x. ennreal (cmod (f x)) ∂M) < ∞" .
qed
qed(auto dest: integrable_Re integrable_Im)
subsection ‹ Compact Supports ›
definition has_compact_support_on :: "('a ⇒ 'b :: monoid_add) ⇒ 'a topology ⇒ bool"
(infix "has'_compact'_support'_on" 60) where
"f has_compact_support_on X ⟷ compactin X (X closure_of support_on (topspace X) f)"
lemma has_compact_support_on_iff:
"f has_compact_support_on X ⟷ compactin X (X closure_of {x∈topspace X. f x ≠ 0})"
by(simp add: has_compact_support_on_def support_on_def)
lemma has_compact_support_on_zero[simp]: "(λx. 0) has_compact_support_on X"
by(simp add: has_compact_support_on_iff)
lemma has_compact_support_on_compact_space[simp]: "compact_space X ⟹ f has_compact_support_on X"
by(auto simp: has_compact_support_on_def closedin_compact_space)
lemma has_compact_support_on_add[simp,intro!]:
assumes "f has_compact_support_on X" "g has_compact_support_on X"
shows "(λx. f x + g x) has_compact_support_on X"
proof -
have "support_on (topspace X) (λx. f x + g x)
⊆ support_on (topspace X) f ∪ support_on (topspace X) g"
by(auto simp: in_support_on)
moreover have "compactin X (X closure_of ...)"
using assms by(simp add: has_compact_support_on_def compactin_Un)
ultimately show ?thesis
unfolding has_compact_support_on_def by (meson closed_compactin closedin_closure_of closure_of_mono)
qed
lemma has_compact_support_on_sum:
assumes "finite I" "⋀i. i ∈ I ⟹ f i has_compact_support_on X"
shows "(λx. (∑i∈I. f i x)) has_compact_support_on X"
proof -
have "support_on (topspace X) (λx. (∑i∈I. f i x)) ⊆ (⋃i∈I. support_on (topspace X) (f i))"
by(simp add: subset_eq) (meson in_support_on sum.neutral)
moreover have "compactin X (X closure_of ...)"
using assms by(auto simp: has_compact_support_on_def closure_of_Union intro!: compactin_Union)
ultimately show ?thesis
unfolding has_compact_support_on_def by (meson closed_compactin closedin_closure_of closure_of_mono)
qed
lemma has_compact_support_on_mult_left:
fixes g :: "_ ⇒ _ :: mult_zero"
assumes "g has_compact_support_on X"
shows "(λx. f x * g x) has_compact_support_on X"
proof -
have "support_on (topspace X) (λx. f x * g x) ⊆ support_on (topspace X) g"
by(auto simp add: in_support_on)
thus ?thesis
using assms unfolding has_compact_support_on_def
by (meson closed_compactin closedin_closure_of closure_of_mono)
qed
lemma has_compact_support_on_mult_right:
fixes f :: "_ ⇒ _ :: mult_zero"
assumes "f has_compact_support_on X"
shows "(λx. f x * g x) has_compact_support_on X"
proof -
have "support_on (topspace X) (λx. f x * g x) ⊆ support_on (topspace X) f"
by(auto simp add: in_support_on)
thus ?thesis
using assms unfolding has_compact_support_on_def
by (meson closed_compactin closedin_closure_of closure_of_mono)
qed
lemma has_compact_support_on_uminus_iff[simp]:
fixes f :: "_ ⇒ _ :: group_add"
shows "(λx. - f x) has_compact_support_on X ⟷ f has_compact_support_on X"
by(auto simp: has_compact_support_on_def support_on_def)
lemma has_compact_support_on_diff[simp,intro!]:
fixes f :: "_ ⇒ _ :: group_add"
shows "f has_compact_support_on X ⟹ g has_compact_support_on X
⟹ (λx. f x - g x) has_compact_support_on X"
unfolding diff_conv_add_uminus by(intro has_compact_support_on_add) auto
lemma has_compact_support_on_max[simp,intro!]:
assumes "f has_compact_support_on X" "g has_compact_support_on X"
shows "(λx. max (f x) (g x)) has_compact_support_on X"
proof -
have "support_on (topspace X) (λx. max (f x) (g x))
⊆ support_on (topspace X) f ∪ support_on (topspace X) g"
by (simp add: in_support_on max_def_raw unfold_simps(2))
moreover have "compactin X (X closure_of ...)"
using assms by(simp add: has_compact_support_on_def compactin_Un)
ultimately show ?thesis
unfolding has_compact_support_on_def by (meson closed_compactin closedin_closure_of closure_of_mono)
qed
lemma has_compact_support_on_ext_iff[iff]:
"(λx∈topspace X. f x) has_compact_support_on X ⟷ f has_compact_support_on X"
by(auto intro!: arg_cong2[where f=compactin] arg_cong2[where f="(closure_of)"]
simp: has_compact_support_on_def in_support_on)
lemma has_compact_support_on_of_real_iff[iff]:
"(λx. of_real (f x)) has_compact_support_on X = f has_compact_support_on X"
by(auto simp: has_compact_support_on_iff)
lemma has_compact_support_on_complex_iff:
"f has_compact_support_on X ⟷
(λx. Re (f x)) has_compact_support_on X ∧ (λx. Im (f x)) has_compact_support_on X"
proof safe
assume h:"(λx. Re (f x)) has_compact_support_on X" "(λx. Im (f x)) has_compact_support_on X"
have "support_on (topspace X) f ⊆ support_on (topspace X) (λx. Re (f x)) ∪ support_on (topspace X) (λx. Im (f x))"
using complex.expand by(auto simp: in_support_on)
hence "X closure_of support_on (topspace X) f
⊆ X closure_of support_on (topspace X) (λx. Re (f x)) ∪ X closure_of support_on (topspace X) (λx. Im (f x))"
by (metis (no_types, lifting) closure_of_Un sup.absorb_iff2)
thus "f has_compact_support_on X"
using h unfolding has_compact_support_on_def
by (meson closed_compactin closedin_closure_of compactin_Un)
next
assume h:"f has_compact_support_on X"
have "support_on (topspace X) (λx. Re (f x)) ⊆ support_on (topspace X) f"
"support_on (topspace X) (λx. Im (f x)) ⊆ support_on (topspace X) f"
by(auto simp: in_support_on)
thus "(λx. Re (f x)) has_compact_support_on X" "(λx. Im (f x)) has_compact_support_on X"
using h by(auto simp: closed_compactin closure_of_mono has_compact_support_on_def)
qed
lemma [simp]:
assumes "f has_compact_support_on X"
shows has_compact_support_on_Re:"(λx. Re (f x)) has_compact_support_on X"
and has_compact_support_on_Im:"(λx. Im (f x)) has_compact_support_on X"
using assms by(auto simp: has_compact_support_on_complex_iff)
subsection ‹ Positive Linear Functionsls ›
definition positive_linear_functional_on_CX :: "'a topology ⇒ (('a ⇒ 'b :: {ring, order, topological_space}) ⇒ 'b) ⇒ bool"
where "positive_linear_functional_on_CX X φ ≡
(∀f. continuous_map X euclidean f ⟶ f has_compact_support_on X
⟶ (∀x∈topspace X. f x ≥ 0) ⟶ φ (λx∈topspace X. f x) ≥ 0) ∧
(∀f a. continuous_map X euclidean f ⟶ f has_compact_support_on X
⟶ φ (λx∈topspace X. a * f x) = a * φ (λx∈topspace X. f x)) ∧
(∀f g. continuous_map X euclidean f ⟶ f has_compact_support_on X
⟶ continuous_map X euclidean g ⟶ g has_compact_support_on X
⟶ φ (λx∈topspace X. f x + g x) = φ (λx∈topspace X. f x) + φ (λx∈topspace X. g x))"
lemma
assumes "positive_linear_functional_on_CX X φ"
shows pos_lin_functional_on_CX_pos:
"⋀f. continuous_map X euclidean f ⟹ f has_compact_support_on X
⟹ (⋀x. x∈topspace X ⟹ f x ≥ 0) ⟹ φ (λx∈topspace X. f x) ≥ 0"
and pos_lin_functional_on_CX_lin:
"⋀f a. continuous_map X euclidean f ⟹ f has_compact_support_on X
⟹ φ (λx∈topspace X. a * f x) = a * φ (λx∈topspace X. f x)"
"⋀f g. continuous_map X euclidean f ⟹ f has_compact_support_on X
⟹ continuous_map X euclidean g ⟹ g has_compact_support_on X
⟹ φ (λx∈topspace X. f x + g x) = φ (λx∈topspace X. f x) + φ (λx∈topspace X. g x)"
using assms by(auto simp: positive_linear_functional_on_CX_def)
lemma pos_lin_functional_on_CX_pos_complex:
assumes "positive_linear_functional_on_CX X φ"
shows "continuous_map X euclidean f ⟹ f has_compact_support_on X
⟹ (⋀x. x∈topspace X ⟹ Re (f x) ≥ 0) ⟹ (⋀x. x ∈ topspace X ⟹ f x ∈ ℝ)
⟹ φ (λx∈topspace X. f x) ≥ 0"
by(intro pos_lin_functional_on_CX_pos[OF assms]) (simp_all add: complex_is_Real_iff less_eq_complex_def)
lemma positive_linear_functional_on_CX_compact:
assumes "compact_space X"
shows "positive_linear_functional_on_CX X φ ⟷
(∀f. continuous_map X euclidean f ⟶ (∀x∈topspace X. f x ≥ 0) ⟶ φ (λx∈topspace X. f x) ≥ 0) ∧
(∀f a. continuous_map X euclidean f ⟶ φ (λx∈topspace X. a * f x) = a * φ (λx∈topspace X. f x)) ∧
(∀f g. continuous_map X euclidean f ⟶ continuous_map X euclidean g
⟶ φ (λx∈topspace X. f x + g x) = φ (λx∈topspace X. f x) + φ (λx∈topspace X. g x))"
by(auto simp: positive_linear_functional_on_CX_def assms)
lemma
assumes "positive_linear_functional_on_CX X φ" "compact_space X"
shows pos_lin_functional_on_CX_compact_pos:
"⋀f. continuous_map X euclidean f
⟹ (⋀x. x∈topspace X ⟹ f x ≥ 0) ⟹ φ (λx∈topspace X. f x) ≥ 0"
and pos_lin_functional_on_CX_compact_lin:
"⋀f a. continuous_map X euclidean f
⟹ φ (λx∈topspace X. a * f x) = a * φ (λx∈topspace X. f x)"
"⋀f g. continuous_map X euclidean f ⟹ continuous_map X euclidean g
⟹ φ (λx∈topspace X. f x + g x) = φ (λx∈topspace X. f x) + φ (λx∈topspace X. g x)"
using assms(1) by(auto simp: positive_linear_functional_on_CX_compact assms(2))
lemma pos_lin_functional_on_CX_diff:
fixes f :: "_ ⇒ _ :: {real_normed_vector, ring_1}"
assumes "positive_linear_functional_on_CX X φ"
and cont:"continuous_map X euclidean f" "continuous_map X euclidean g"
and csupp: "f has_compact_support_on X" "g has_compact_support_on X"
shows "φ (λx∈topspace X. f x - g x) = φ (λx∈topspace X. f x) - φ (λx∈topspace X. g x)"
using pos_lin_functional_on_CX_lin(2)[OF assms(1),of f "λx. - g x"] cont csupp
pos_lin_functional_on_CX_lin(1)[OF assms(1) cont(2) csupp(2),of "- 1"] by simp
lemma pos_lin_functional_on_CX_compact_diff:
fixes f :: "_ ⇒ _ :: {real_normed_vector, ring_1}"
assumes "positive_linear_functional_on_CX X φ" "compact_space X"
and "continuous_map X euclidean f" "continuous_map X euclidean g"
shows "φ (λx∈topspace X. f x - g x) = φ (λx∈topspace X. f x) - φ (λx∈topspace X. g x)"
using assms(2) by(auto intro!: pos_lin_functional_on_CX_diff assms)
lemma pos_lin_functional_on_CX_mono:
fixes f :: "_ ⇒ _ :: {real_normed_vector, ring_1, ordered_ab_group_add}"
assumes "positive_linear_functional_on_CX X φ"
and mono:"⋀x. x ∈ topspace X ⟹ f x ≤ g x"
and cont:"continuous_map X euclidean f" "continuous_map X euclidean g"
and csupp: "f has_compact_support_on X" "g has_compact_support_on X"
shows "φ (λx∈topspace X. f x) ≤ φ (λx∈topspace X. g x)"
proof -
have "φ (λx∈topspace X. f x) ≤ φ (λx∈topspace X. f x) + φ (λx∈topspace X. g x - f x)"
by(auto intro!: pos_lin_functional_on_CX_pos[OF assms(1)] assms continuous_map_diff)
also have "... = φ (λx∈topspace X. f x + (g x - f x))"
by(intro pos_lin_functional_on_CX_lin(2)[symmetric]) (auto intro!: assms continuous_map_diff)
also have "... = φ (λx∈topspace X. g x)"
by simp
finally show ?thesis .
qed
lemma pos_lin_functional_on_CX_compact_mono:
fixes f :: "_ ⇒ _ :: {real_normed_vector, ring_1, ordered_ab_group_add}"
assumes "positive_linear_functional_on_CX X φ" "compact_space X"
and "⋀x. x ∈ topspace X ⟹ f x ≤ g x"
and "continuous_map X euclidean f" "continuous_map X euclidean g"
shows "φ (λx∈topspace X. f x) ≤ φ (λx∈topspace X. g x)"
using assms(2) by(auto intro!: assms pos_lin_functional_on_CX_mono)
lemma pos_lin_functional_on_CX_zero:
assumes "positive_linear_functional_on_CX X φ"
shows "φ (λx∈topspace X. 0) = 0"
proof -
have "φ (λx∈topspace X. 0) = φ (λx∈topspace X. 0 * 0)"
by simp
also have "... = 0 * φ (λx∈topspace X. 0)"
by(intro pos_lin_functional_on_CX_lin) (auto simp: assms)
finally show ?thesis
by simp
qed
lemma pos_lin_functional_on_CX_uminus:
fixes f :: "_ ⇒ _ :: {real_normed_vector, ring_1}"
assumes "positive_linear_functional_on_CX X φ"
and "continuous_map X euclidean f"
and csupp: "f has_compact_support_on X"
shows "φ (λx∈topspace X. - f x) = - φ (λx∈topspace X. f x)"
using pos_lin_functional_on_CX_diff[of X φ "λx. 0" f]
by(auto simp: assms pos_lin_functional_on_CX_zero)
lemma pos_lin_functional_on_CX_compact_uminus:
fixes f :: "_ ⇒ _ :: {real_normed_vector, ring_1}"
assumes "positive_linear_functional_on_CX X φ" "compact_space X"
and "continuous_map X euclidean f"
shows "φ (λx∈topspace X. - f x) = - φ (λx∈topspace X. f x)"
using pos_lin_functional_on_CX_diff[of X φ "λx. 0" f]
by(auto simp: assms pos_lin_functional_on_CX_zero)
lemma pos_lin_functional_on_CX_sum:
fixes f :: "_ ⇒ _ ⇒ _ :: {real_normed_vector}"
assumes "positive_linear_functional_on_CX X φ"
and "finite I" "⋀i. i ∈ I ⟹ continuous_map X euclidean (f i)"
and "⋀i. i ∈ I ⟹ f i has_compact_support_on X"
shows "φ (λx∈topspace X. (∑i∈I. f i x)) = (∑i∈I. φ (λx∈topspace X. f i x))"
using assms(2,3,4)
proof induction
case empty
show ?case
using pos_lin_functional_on_CX_zero[OF assms(1)] by(simp add: restrict_def)
next
case ih:(insert a F)
show ?case (is "?lhs = ?rhs")
proof -
have "?lhs = φ (λx∈topspace X. f a x + (∑i∈F. f i x))"
by(simp add: sum.insert_if[OF ih(1)] ih(2) restrict_def)
also have "... = φ (λx∈topspace X. f a x) + φ (λx∈topspace X. (∑i∈F. f i x))"
by (auto intro!: pos_lin_functional_on_CX_lin[OF assms(1)]
has_compact_support_on_sum ih continuous_map_sum)
also have "... = ?rhs"
by(simp add: ih) (simp add: restrict_def)
finally show ?thesis .
qed
qed
lemma pos_lin_functional_on_CX_pos_is_real:
fixes f :: "_ ⇒ complex"
assumes "positive_linear_functional_on_CX X φ"
and "continuous_map X euclidean f" "f has_compact_support_on X"
and "⋀x. x ∈ topspace X ⟹ f x ∈ ℝ"
shows "φ (λx∈topspace X. f x) ∈ ℝ"
proof -
have "φ (λx∈topspace X. f x) = φ (λx∈topspace X. complex_of_real (Re (f x)))"
by (metis (no_types, lifting) assms(4) of_real_Re restrict_ext)
also have "... = φ (λx∈topspace X. complex_of_real (max 0 (Re (f x))) - complex_of_real (max 0 (- Re (f x))))"
by (metis (no_types, opaque_lifting) diff_0 diff_0_right equation_minus_iff max.absorb_iff2 max.order_iff neg_0_le_iff_le nle_le of_real_diff)
also have "... = φ (λx∈topspace X. complex_of_real (max 0 (Re (f x)))) - φ (λx∈topspace X. complex_of_real (max 0 (- Re (f x))))"
using assms by(auto intro!: pos_lin_functional_on_CX_diff continuous_map_real_max)
also have "... ∈ ℝ"
using assms by(intro Reals_diff)
(auto intro!: nonnegative_complex_is_real pos_lin_functional_on_CX_pos[OF assms(1)] continuous_map_real_max
simp: less_eq_complex_def)
finally show ?thesis .
qed
lemma
fixes φ X
defines "φ' ≡ (λf. Re (φ (λx∈topspace X. complex_of_real (f x))))"
assumes plf:"positive_linear_functional_on_CX X φ"
shows pos_lin_functional_on_CX_complex_decompose:
"⋀f. continuous_map X euclidean f ⟹ f has_compact_support_on X
⟹ φ (λx∈topspace X. f x)
= complex_of_real (φ' (λx∈topspace X. Re (f x))) + 𝗂 * complex_of_real (φ' (λx∈topspace X. Im (f x)))"
and pos_lin_functional_on_CX_complex_decompose_plf:
"positive_linear_functional_on_CX X φ'"
proof -
fix f :: "_ ⇒ complex"
assume f:"continuous_map X euclidean f" "f has_compact_support_on X"
show "φ (λx∈topspace X. f x)
= complex_of_real (φ' (λx∈topspace X. Re (f x))) + 𝗂 * complex_of_real (φ' (λx∈topspace X. Im (f x)))"
(is "?lhs = ?rhs")
proof -
have "φ (λx∈topspace X. f x) = φ (λx∈topspace X. Re (f x) + 𝗂 * Im (f x))"
using complex_eq by presburger
also have "... = φ (λx∈topspace X. complex_of_real (Re (f x))) + φ (λx∈topspace X. 𝗂 * complex_of_real (Im (f x)))"
using f by(auto intro!: pos_lin_functional_on_CX_lin[OF plf] has_compact_support_on_mult_left continuous_map_complex_mult_left)
also have "... = φ (λx∈topspace X. complex_of_real (Re (f x))) + 𝗂 * φ (λx∈topspace X. complex_of_real (Im (f x)))"
using f by(auto intro!: pos_lin_functional_on_CX_lin[OF plf])
also have "... = complex_of_real (φ' (λx∈topspace X. (Re (f x)))) + 𝗂 * complex_of_real (φ' (λx∈topspace X. Im (f x)))"
proof -
have [simp]: "complex_of_real (φ' (λx∈topspace X. Re (f x))) = φ (λx∈topspace X. complex_of_real (Re (f x)))"
(is "?l = ?r")
proof -
have "?l = complex_of_real (Re (φ (λx∈topspace X. complex_of_real (Re (f x)))))"
by (metis (mono_tags, lifting) φ'_def restrict_apply' restrict_ext)
also have "... = ?r"
by(intro of_real_Re pos_lin_functional_on_CX_pos_is_real[OF plf]) (use f in auto)
finally show ?thesis .
qed
have [simp]: "complex_of_real (φ' (λx∈topspace X. Im (f x))) = φ (λx∈topspace X. complex_of_real (Im (f x)))"
(is "?l = ?r")
proof -
have "?l = complex_of_real (Re (φ (λx∈topspace X. complex_of_real (Im (f x)))))"
by (metis (mono_tags, lifting) φ'_def restrict_apply' restrict_ext)
also have "... = ?r"
by(intro of_real_Re pos_lin_functional_on_CX_pos_is_real[OF plf]) (use f in auto)
finally show ?thesis .
qed
show ?thesis by simp
qed
finally show ?thesis .
qed
next
show "positive_linear_functional_on_CX X φ'"
unfolding positive_linear_functional_on_CX_def
proof safe
fix f
assume f:"continuous_map X euclideanreal f" "f has_compact_support_on X" "∀x∈topspace X. 0 ≤ f x"
show "φ' (λx∈topspace X. f x) ≥ 0"
proof -
have "0 ≤ φ (λx∈topspace X. complex_of_real (f x))"
using f by(intro pos_lin_functional_on_CX_pos[OF plf]) (simp_all add: less_eq_complex_def)
hence "0 ≤ Re (φ (λx∈topspace X. complex_of_real (f x)))"
by (simp add: less_eq_complex_def)
also have "... = φ' (λx∈topspace X. f x)"
by (metis (mono_tags, lifting) φ'_def restrict_apply' restrict_ext)
finally show ?thesis .
qed
next
fix a f
assume f:"continuous_map X euclideanreal f" "f has_compact_support_on X"
show "φ' (λx∈topspace X. a * f x) = a * φ' (λx∈topspace X. f x)"
proof -
have *:"φ (λx∈topspace X. complex_of_real a * complex_of_real (f x)) = complex_of_real a * φ (λx∈topspace X. complex_of_real (f x))"
using f by(auto intro!: pos_lin_functional_on_CX_lin[OF plf])
have "φ' (λx∈topspace X. a * f x) = Re (φ (λx∈topspace X. complex_of_real a * complex_of_real (f x)))"
by (metis (mono_tags, lifting) φ'_def of_real_mult restrict_apply' restrict_ext)
also have "... = a * (Re (φ (λx∈topspace X. complex_of_real (f x))))"
unfolding * by simp
also have "... = a * φ' (λx∈topspace X. f x)"
by (metis (mono_tags, lifting) φ'_def restrict_apply' restrict_ext)
finally show ?thesis .
qed
next
fix f g
assume fg:"continuous_map X euclideanreal f" "f has_compact_support_on X"
"continuous_map X euclideanreal g" "g has_compact_support_on X"
show "φ' (λx∈topspace X. f x + g x) = φ' (λx∈topspace X. f x) + φ' (λx∈topspace X. g x)"
proof -
have *: "φ (λx∈topspace X. complex_of_real (f x) + complex_of_real (g x)) = φ (λx∈topspace X. complex_of_real (f x)) + φ (λx∈topspace X. complex_of_real (g x))"
using fg by(auto intro!: pos_lin_functional_on_CX_lin[OF plf])
have "φ' (λx∈topspace X. f x + g x) = Re (φ (λx∈topspace X. complex_of_real (f x + g x)))"
by (metis (mono_tags, lifting) φ'_def restrict_apply' restrict_ext)
also have "... = Re (φ (λx∈topspace X. complex_of_real (f x)) + φ (λx∈topspace X. complex_of_real (g x)))"
unfolding of_real_add * by simp
also have "... = Re (φ (λx∈topspace X. complex_of_real (f x))) + Re (φ (λx∈topspace X. complex_of_real (g x)))"
by simp
also have "... = φ' (λx∈topspace X. f x) + φ' (λx∈topspace X. g x)"
by (metis (mono_tags, lifting) φ'_def restrict_apply' restrict_ext)
finally show ?thesis .
qed
qed
qed
subsection ‹ Lemmas for Uniqueness ›
lemma rep_measures_real_unique:
assumes "locally_compact_space X" "Hausdorff_space X"
assumes N: "subalgebra N (borel_of X)"
"⋀f. continuous_map X euclideanreal f ⟹ f has_compact_support_on X ⟹ integrable N f"
"⋀A. A∈sets N ⟹ emeasure N A = (⨅C∈{C. openin X C ∧ A ⊆ C}. emeasure N C)"
"⋀A. openin X A ⟹ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K)"
"⋀A. A∈sets N ⟹ emeasure N A < ∞ ⟹ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K)"
"⋀K. compactin X K ⟹ N K < ∞"
assumes M: "subalgebra M (borel_of X)"
"⋀f. continuous_map X euclideanreal f ⟹ f has_compact_support_on X ⟹ integrable M f"
"⋀A. A∈sets M ⟹ emeasure M A = (⨅C∈{C. openin X C ∧ A ⊆ C}. emeasure M C)"
"⋀A. openin X A ⟹ emeasure M A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure M K)"
"⋀A. A∈sets M ⟹ emeasure M A < ∞ ⟹ emeasure M A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure M K)"
"⋀K. compactin X K ⟹ M K < ∞"
and sets_eq: "sets N = sets M"
and integ_eq: "⋀f. continuous_map X euclideanreal f ⟹ f has_compact_support_on X ⟹ (∫x. f x ∂N) = (∫x. f x ∂M)"
shows "N = M"
proof(intro measure_eqI sets_eq)
have space_N: "space N = topspace X" and space_M: "space M = topspace X"
using N(1) M(1) by(auto simp: subalgebra_def space_borel_of)
have "N K = M K" if K:"compactin X K" for K
proof -
have kc: "kc_space X"
using Hausdorff_imp_kc_space assms(2) by blast
have K_sets[measurable]: "K ∈ sets N" "K ∈ sets M"
using N(1) M(1) compactin_imp_closedin_gen[OF kc K]
by(auto simp: borel_of_closed subalgebra_def)
show ?thesis
proof(rule antisym[OF ennreal_le_epsilon ennreal_le_epsilon])
fix e :: real
assume e: "e > 0"
show "emeasure N K ≤ emeasure M K + ennreal e"
proof -
have "emeasure M K ≥ ⨅ (emeasure M ` {C. openin X C ∧ K ⊆ C})"
by(simp add: M(3)[OF K_sets(2)])
from Inf_le_iff[THEN iffD1,OF this,rule_format,of "emeasure M K + e"]
obtain U where U:"openin X U" "K ⊆ U" "emeasure M U < emeasure M K + ennreal e"
using K M(6) e by fastforce
then have [measurable]: "U ∈ sets M"
using M(1) by(auto simp: subalgebra_def borel_of_open)
then obtain f where f:"continuous_map X (top_of_set {0..1::real}) f"
"f ` (topspace X - U) ⊆ {0}" "f ` K ⊆ {1}"
"disjnt (X closure_of {x ∈ topspace X. f x ≠ 0}) (topspace X - U)"
"compactin X (X closure_of {x ∈ topspace X. f x ≠ 0})"
using Urysohn_locally_compact_Hausdorff_closed_compact_support[OF assms(1) disjI1[OF assms(2)],of 0 1 "topspace X - U" K] U K
by(simp add: closedin_def disjnt_iff) blast
have f_int: "integrable N f" "integrable M f"
using f by(auto intro!: N M simp: continuous_map_in_subtopology has_compact_support_on_iff)
have f_01: "x ∈ topspace X ⟹ 0 ≤ f x" "x ∈ topspace X ⟹ f x ≤ 1" for x
using continuous_map_image_subset_topspace[OF f(1)] by auto
have "emeasure N K = (∫⇧+x. indicator K x ∂N)"
by simp
also have "... ≤ (∫⇧+x. f x ∂N)"
using f(3) by(intro nn_integral_mono) (auto simp: indicator_def)
also have "... = ennreal (∫x. f x ∂N)"
by(rule nn_integral_eq_integral) (use f_int continuous_map_image_subset_topspace[OF f(1)] f_01 space_N in auto)
also have "... = ennreal (∫x. f x ∂M)"
using f by(auto intro!: ennreal_cong integ_eq simp: continuous_map_in_subtopology has_compact_support_on_iff)
also have "... = (∫⇧+x. f x ∂M)"
by(rule nn_integral_eq_integral[symmetric])
(use f_int continuous_map_image_subset_topspace[OF f(1)] f_01 space_M in auto)
also have "... ≤ (∫⇧+x. indicator U x ∂M)"
using f(2) f_01 by(intro nn_integral_mono) (auto simp: indicator_def space_M)
also have "... = emeasure M U"
by simp
also have "... < emeasure M K + ennreal e"
by fact
finally show ?thesis
by simp
qed
next
fix e :: real
assume e: "e > 0"
show "emeasure M K ≤ emeasure N K + ennreal e"
proof -
have "emeasure N K ≥ ⨅ (emeasure N ` {C. openin X C ∧ K ⊆ C})"
by(simp add: N(3)[OF K_sets(1)])
from Inf_le_iff[THEN iffD1,OF this,rule_format,of "emeasure N K + e"]
obtain U where U:"openin X U" "K ⊆ U" "emeasure N U < emeasure N K + ennreal e"
using K N(6) e by fastforce
then have [measurable]: "U ∈ sets N"
using N(1) by(auto simp: subalgebra_def borel_of_open)
then obtain f where f:"continuous_map X (top_of_set {0..1::real}) f"
"f ` (topspace X - U) ⊆ {0}" "f ` K ⊆ {1}"
"disjnt (X closure_of {x ∈ topspace X. f x ≠ 0}) (topspace X - U)"
"compactin X (X closure_of {x ∈ topspace X. f x ≠ 0})"
using Urysohn_locally_compact_Hausdorff_closed_compact_support[OF assms(1) disjI1[OF assms(2)],of 0 1 "topspace X - U" K] U K
by(simp add: closedin_def disjnt_iff) blast
have f_int: "integrable N f" "integrable M f"
using f by(auto intro!: N M simp: continuous_map_in_subtopology has_compact_support_on_iff)
have f_01: "x ∈ topspace X ⟹ 0 ≤ f x" "x ∈ topspace X ⟹ f x ≤ 1" for x
using continuous_map_image_subset_topspace[OF f(1)] by auto
have "emeasure M K = (∫⇧+x. indicator K x ∂M)"
by simp
also have "... ≤ (∫⇧+x. f x ∂M)"
using f(3) by(intro nn_integral_mono) (auto simp: indicator_def)
also have "... = ennreal (∫x. f x ∂M)"
by(rule nn_integral_eq_integral) (use f_int continuous_map_image_subset_topspace[OF f(1)] f_01 space_M in auto)
also have "... = ennreal (∫x. f x ∂N)"
using f by(auto intro!: ennreal_cong integ_eq[symmetric] simp: continuous_map_in_subtopology has_compact_support_on_iff)
also have "... = (∫⇧+x. f x ∂N)"
by(rule nn_integral_eq_integral[symmetric])
(use f_int continuous_map_image_subset_topspace[OF f(1)] f_01 space_N in auto)
also have "... ≤ (∫⇧+x. indicator U x ∂N)"
using f(2) f_01 by(intro nn_integral_mono) (auto simp: indicator_def space_N)
also have "... = emeasure N U"
by simp
also have "... < emeasure N K + ennreal e"
by fact
finally show ?thesis
by simp
qed
qed
qed
hence "⋀A. openin X A ⟹ emeasure N A = emeasure M A"
by(auto simp: N(4) M(4))
thus "⋀A. A ∈ sets N ⟹ emeasure N A = emeasure M A"
using N(3) M(3) by(auto simp: sets_eq)
qed
lemma rep_measures_complex_unique:
fixes X :: "'a topology"
assumes "locally_compact_space X" "Hausdorff_space X"
assumes N: "subalgebra N (borel_of X)"
"⋀f. continuous_map X euclidean f ⟹ f has_compact_support_on X ⟹ complex_integrable N f"
"⋀A. A∈sets N ⟹ emeasure N A = (⨅C∈{C. openin X C ∧ A ⊆ C}. emeasure N C)"
"⋀A. openin X A ⟹ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K)"
"⋀A. A∈sets N ⟹ emeasure N A < ∞ ⟹ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K)"
"⋀K. compactin X K ⟹ N K < ∞"
assumes M: "subalgebra M (borel_of X)"
"⋀f. continuous_map X euclidean f ⟹ f has_compact_support_on X ⟹ complex_integrable M f"
"⋀A. A∈sets M ⟹ emeasure M A = (⨅C∈{C. openin X C ∧ A ⊆ C}. emeasure M C)"
"⋀A. openin X A ⟹ emeasure M A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure M K)"
"⋀A. A∈sets M ⟹ emeasure M A < ∞ ⟹ emeasure M A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure M K)"
"⋀K. compactin X K ⟹ M K < ∞"
and sets_eq: "sets N = sets M"
and integ_eq: "⋀f::'a ⇒ complex. continuous_map X euclidean f ⟹ f has_compact_support_on X
⟹ (∫x. f x ∂N) = (∫x. f x ∂M)"
shows "N = M"
proof(rule rep_measures_real_unique[OF assms(1,2)])
fix f
assume f:"continuous_map X euclideanreal f" "f has_compact_support_on X"
show "(∫x. f x ∂N) = (∫x. f x ∂M)"
proof -
have "(∫x. f x ∂N) = Re (∫x. (complex_of_real (f x)) ∂N)"
by simp
also have "... = Re (∫x. (complex_of_real (f x)) ∂M)"
proof -
have 1:"(∫x. (complex_of_real (f x)) ∂N) = (∫x. (complex_of_real (f x)) ∂M)"
by(rule integ_eq) (auto intro!: f)
show ?thesis
unfolding 1 by simp
qed
finally show ?thesis
by simp
qed
next
fix f
assume "continuous_map X euclideanreal f" "f has_compact_support_on X"
hence "complex_integrable N (λx. complex_of_real (f x))" "complex_integrable M (λx. complex_of_real (f x))"
by (auto intro!: M N)
thus "integrable N f" "integrable M f"
using complex_of_real_integrable_eq by auto
qed fact+
lemma finite_tight_measure_eq:
assumes "locally_compact_space X" "metrizable_space X" "tight_on X N" "tight_on X M"
and integ_eq: "⋀f. continuous_map X euclideanreal f ⟹ f ∈ topspace X → {0..1} ⟹ (∫x. f x ∂N) = (∫x. f x ∂M)"
shows "N = M"
proof(rule measure_eqI)
interpret N: finite_measure N
using assms(3) tight_on_def by blast
interpret M: finite_measure M
using assms(4) tight_on_def by blast
have integ_N: "⋀A. A ∈ sets N ⟹ integrable N (indicat_real A)"
and integ_M: "⋀A. A ∈ sets M ⟹ integrable M (indicat_real A)"
by (auto simp add: N.emeasure_eq_measure M.emeasure_eq_measure)
have sets_N: "sets N = borel_of X" and space_N: "space N = topspace X"
and sets_M: "sets M = borel_of X" and space_M: "space M = topspace X"
using assms(3,4) sets_eq_imp_space_eq[of _ "borel_of X"]
by(auto simp: tight_on_def space_borel_of)
fix A
assume [measurable]:"A ∈ sets N"
then have [measurable]: "A ∈ sets M"
using sets_M sets_N by blast
have "measure M A = ⨆ (Sigma_Algebra.measure M ` {K. compactin X K ∧ K ⊆ A})"
by(auto intro!: inner_regular''[OF assms(2,4)])
also have "... = ⨆ (Sigma_Algebra.measure N ` {K. compactin X K ∧ K ⊆ A})"
proof -
have "measure M K = measure N K" if K:"compactin X K" "K ⊆ A" for K
proof -
have [measurable]: "K ∈ sets M" "K ∈ sets N"
by(auto simp: sets_M sets_N intro!: borel_of_closed compactin_imp_closedin K metrizable_imp_Hausdorff_space assms)
show ?thesis
proof(rule antisym[OF field_le_epsilon field_le_epsilon])
fix e :: real
assume e:"e > 0"
have "∀y>measure N K. ∃a∈measure N ` {C. openin X C ∧ K ⊆ C}. a < y"
by(intro cInf_le_iff[THEN iffD1] eq_refl[OF N.outer_regularD[OF N.outer_regular'[OF assms(2) sets_N[symmetric]],symmetric]])
(auto intro!: bdd_belowI[where m=0] compactin_subset_topspace[OF K(1)])
from this[rule_format,of "measure N K + e"] obtain U where U: "openin X U" "K ⊆ U" "measure N U < measure N K + e"
using e by auto
then have [measurable]: "U ∈ sets M" "U ∈ sets N"
by(auto simp: sets_N sets_M intro!: borel_of_open)
obtain f where f:"continuous_map X (top_of_set {0..1::real}) f"
"f ` (topspace X - U) ⊆ {0}" "f ` K ⊆ {1}"
"disjnt (X closure_of {x ∈ topspace X. f x ≠ 0}) (topspace X - U)"
"compactin X (X closure_of {x ∈ topspace X. f x ≠ 0})"
using Urysohn_locally_compact_Hausdorff_closed_compact_support[OF assms(1) disjI1[OF metrizable_imp_Hausdorff_space[OF assms(2)]],of 0 1 "topspace X - U" K] U K
by(simp add: closedin_def disjnt_iff) blast
hence f': "continuous_map X euclideanreal f"
"⋀x. x ∈ topspace X ⟹ f x ≥ 0" "⋀x. x ∈ topspace X ⟹ f x ≤ 1"
by (auto simp add: continuous_map_in_subtopology)
have [measurable]: "f ∈ borel_measurable M" "f ∈ borel_measurable N"
using continuous_map_measurable[OF f'(1)]
by(auto simp: borel_of_euclidean sets_N sets_M cong: measurable_cong_sets)
from f'(2,3) have f_int[simp]: "integrable M f" "integrable N f"
by(auto intro!: M.integrable_const_bound[where B=1] N.integrable_const_bound[where B=1] simp: space_N space_M)
have "measure M K = (∫x. indicator K x ∂M)"
by simp
also have "... ≤ (∫x. f x ∂M)"
using f(3) f'(2) by(intro integral_mono integ_M) (auto simp: space_M indicator_def)
also have "... = (∫x. f x ∂N)"
by(auto intro!: integ_eq[symmetric] f')
also have "... ≤ (∫x. indicator U x ∂N)"
using f(2) f'(3) by(intro integral_mono integ_N) (auto simp: space_N indicator_def)
also have "... ≤ measure N K + e"
using U(3) by fastforce
finally show "measure M K ≤ measure N K + e" .
next
fix e :: real
assume e:"e > 0"
have "∀y>measure M K. ∃a∈measure M ` {C. openin X C ∧ K ⊆ C}. a < y"
by(intro cInf_le_iff[THEN iffD1] eq_refl[OF M.outer_regularD[OF M.outer_regular'[OF assms(2) sets_M[symmetric]],symmetric]])
(auto intro!: bdd_belowI[where m=0] compactin_subset_topspace[OF K(1)])
from this[rule_format,of "measure M K + e"] obtain U where U: "openin X U" "K ⊆ U" "measure M U < measure M K + e"
using e by auto
then have [measurable]: "U ∈ sets M" "U ∈ sets N"
by(auto simp: sets_N sets_M intro!: borel_of_open)
obtain f where f:"continuous_map X (top_of_set {0..1::real}) f"
"f ` (topspace X - U) ⊆ {0}" "f ` K ⊆ {1}"
"disjnt (X closure_of {x ∈ topspace X. f x ≠ 0}) (topspace X - U)"
"compactin X (X closure_of {x ∈ topspace X. f x ≠ 0})"
using Urysohn_locally_compact_Hausdorff_closed_compact_support[OF assms(1) disjI1[OF metrizable_imp_Hausdorff_space[OF assms(2)]],of 0 1 "topspace X - U" K] U K
by(simp add: closedin_def disjnt_iff) blast
hence f': "continuous_map X euclideanreal f"
"⋀x. x ∈ topspace X ⟹ f x ≥ 0" "⋀x. x ∈ topspace X ⟹ f x ≤ 1"
by (auto simp add: continuous_map_in_subtopology)
have [measurable]: "f ∈ borel_measurable M" "f ∈ borel_measurable N"
using continuous_map_measurable[OF f'(1)]
by(auto simp: borel_of_euclidean sets_N sets_M cong: measurable_cong_sets)
from f'(2,3) have f_int[simp]: "integrable M f" "integrable N f"
by(auto intro!: M.integrable_const_bound[where B=1] N.integrable_const_bound[where B=1] simp: space_N space_M)
have "measure N K = (∫x. indicator K x ∂N)"
by simp
also have "... ≤ (∫x. f x ∂N)"
using f(3) f'(2) by(intro integral_mono integ_N) (auto simp: space_N indicator_def)
also have "... = (∫x. f x ∂M)"
by(auto intro!: integ_eq f')
also have "... ≤ (∫x. indicator U x ∂M)"
using f(2) f'(3) by(intro integral_mono integ_M) (auto simp: space_M indicator_def)
also have "... ≤ measure M K + e"
using U(3) by fastforce
finally show "measure N K ≤ measure M K + e" .
qed
qed
thus ?thesis
by simp
qed
also have "... = measure N A"
by(auto intro!: inner_regular''[symmetric,OF assms(2,3)])
finally show "emeasure N A = emeasure M A"
using M.emeasure_eq_measure N.emeasure_eq_measure by presburger
qed(insert assms(3,4), auto simp: tight_on_def)
subsection ‹ Riesez Representation Theorem for Real Numbers ›
theorem Riesz_representation_real_complete:
fixes X :: "'a topology" and φ :: "('a ⇒ real) ⇒ real"
assumes lh:"locally_compact_space X" "Hausdorff_space X"
and plf:"positive_linear_functional_on_CX X φ"
shows "∃M. ∃!N. sets N = M ∧ subalgebra N (borel_of X)
∧ (∀A∈sets N. emeasure N A = (⨅C∈{C. openin X C ∧ A ⊆ C}. emeasure N C))
∧ (∀A. openin X A ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))
∧ (∀A∈sets N. emeasure N A < ∞
⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))
∧ (∀K. compactin X K ⟶ emeasure N K < ∞)
∧ (∀f. continuous_map X euclideanreal f ⟶ f has_compact_support_on X ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))
∧ (∀f. continuous_map X euclideanreal f ⟶ f has_compact_support_on X ⟶ integrable N f)
∧ complete_measure N"
proof -
let ?iscont = "λf. continuous_map X euclideanreal f"
let ?csupp = "λf. f has_compact_support_on X"
let ?fA = "λA f. ?iscont f ∧ ?csupp f ∧ X closure_of {x∈topspace X. f x ≠ 0} ⊆ A
∧ f ∈ topspace X → {0..1} ∧ f ∈ topspace X - A → {0}"
let ?fK = "λK f. ?iscont f ∧ ?csupp f ∧ f ∈ topspace X → {0..1} ∧ f ∈ K → {1}"
have ext_sup[simp]:
"⋀P Q. {x∈topspace X. (if x ∈ topspace X then P x else Q x) ≠ 0} = {x∈topspace X. P x ≠ 0}"
by fastforce
have times_unfold[simp]: "⋀P Q. {x∈topspace X. P x ∧ Q x} = {x∈topspace X. P x} ∩ {x∈topspace X. Q x}"
by fastforce
note pos = pos_lin_functional_on_CX_pos[OF plf]
note linear = pos_lin_functional_on_CX_lin[OF plf]
note φdiff = pos_lin_functional_on_CX_diff[OF plf]
note φmono = pos_lin_functional_on_CX_mono[OF plf]
note φ_0 = pos_lin_functional_on_CX_zero[OF plf]
text ‹ Lemma 2.13~\cite{Rudin}.›
have fApartition: "∃hi. (∀i≤n. (?fA (Vi i) (hi i))) ∧
(∀x∈K. (∑i≤n. hi i x) = 1) ∧ (∀x∈topspace X. 0 ≤ (∑i≤n. hi i x)) ∧
(∀x∈topspace X. (∑i≤n. hi i x) ≤ 1)"
if K:"compactin X K" "⋀i::nat. i ≤ n ⟹ openin X (Vi i)" "K ⊆ (⋃i≤n. Vi i)" for K Vi n
proof -
{
fix x
assume x:"x ∈ K"
have "∃i≤n. x ∈ Vi i ∧ (∃U V. openin X U ∧ (compactin X V) ∧ x ∈ U ∧ U ⊆ V ∧ V ⊆ Vi i)"
proof -
obtain i where i: "i ≤ n" "x ∈ Vi i"
using K x by blast
thus ?thesis
using locally_compact_space_neighbourhood_base[of X] neighbourhood_base_of[of "λU. compactin X U" X] lh K
by(fastforce intro!: exI[where x=i])
qed
}
hence "∃ix Ux Vx. ∀x∈K. ix x ≤ n ∧ x ∈ Vi (ix x) ∧ openin X (Ux x) ∧
compactin X (Vx x) ∧ x ∈ Ux x ∧ Ux x ⊆ Vx x ∧ Vx x ⊆ Vi (ix x)"
by metis
then obtain ix Ux Vx where xinK: "⋀x. x ∈ K ⟹ ix x ≤ n" "⋀x. x ∈ K ⟹ x ∈ Vi (ix x)"
"⋀x. x ∈ K ⟹ openin X (Ux x)" "⋀x. x ∈ K ⟹ compactin X (Vx x)" "⋀x. x ∈ K ⟹ x ∈ Ux x"
"⋀x. x ∈ K ⟹ Ux x ⊆ Vx x" "⋀x. x ∈ K ⟹ Vx x ⊆ Vi (ix x)"
by blast
hence "K ⊆ (⋃x∈K. Ux x)"
by fastforce
from compactinD[OF K(1) _ this] xinK(3) obtain K' where K': "finite K'" "K' ⊆ K" "K ⊆ (⋃x∈K'. Ux x)"
by (metis (no_types, lifting) finite_subset_image imageE)
define Hi where "Hi ≡ (λi. ⋃ (Vx ` {x. x ∈ K' ∧ ix x = i}))"
have Hi_Vi: "⋀i. i ≤ n ⟹ Hi i ⊆ Vi i"
using xinK K' by(fastforce simp: Hi_def)
have K_unHi: "K ⊆ (⋃i≤n. Hi i)"
proof
fix x
assume "x ∈ K"
then obtain y where y:"y ∈ K'" "x ∈ Ux y"
using K' by auto
then have "x ∈ Vx y" "ix y ≤ n"
using K' xinK[of y] by auto
with y show "x ∈ (⋃i≤n. Hi i)"
by(fastforce simp: Hi_def)
qed
have compactin_Hi: "⋀i. i ≤ n ⟹ compactin X (Hi i)"
using xinK K' by(auto intro!: compactin_Union simp: Hi_def)
{
fix i
assume "i ∈ {..n}"
then have i: "i ≤ n" by auto
have "closedin X (topspace X - Vi i)" "disjnt (topspace X - Vi i) (Hi i)"
using Hi_Vi[OF i] K(2)[OF i] by (auto simp: disjnt_def)
from Urysohn_locally_compact_Hausdorff_closed_compact_support[of _ 0 1,OF lh(1) disjI1[OF lh(2)] _ this(1) compactin_Hi[OF i] this(2)]
have "∃hi. continuous_map X (top_of_set {0..1::real}) hi ∧ hi ` (topspace X - Vi i) ⊆ {0} ∧
hi ` Hi i ⊆ {1} ∧ disjnt (X closure_of {x∈topspace X. hi x ≠ 0}) (topspace X - Vi i) ∧
?csupp hi"
unfolding has_compact_support_on_iff by fastforce
hence "∃hi. ?iscont hi ∧ hi ` topspace X ⊆ {0..1} ∧ hi ` (topspace X - Vi i) ⊆ {0} ∧
hi ` Hi i ⊆ {1} ∧ disjnt (X closure_of {x∈topspace X. hi x ≠ 0}) (topspace X - Vi i) ∧
?csupp hi"
by (simp add: continuous_map_in_subtopology disjnt_def has_compact_support_on_def)
}
hence "∃hi. ∀i∈{..n}. ?iscont (hi i) ∧ hi i ` topspace X ⊆ {0..1} ∧
hi i ` (topspace X - Vi i) ⊆ {0} ∧ hi i ` Hi i ⊆ {1} ∧
disjnt (X closure_of {x∈topspace X. hi i x ≠ 0}) (topspace X - Vi i) ∧ ?csupp (hi i)"
by(intro bchoice) auto
hence "∃hi. ∀i≤n. ?iscont (hi i) ∧ hi i ` topspace X ⊆ {0..1} ∧ hi i ` (topspace X - Vi i) ⊆ {0} ∧
hi i ` Hi i ⊆ {1} ∧ disjnt (X closure_of {x∈topspace X. hi i x ≠ 0}) (topspace X - Vi i) ∧ ?csupp (hi i)"
by (meson atMost_iff)
then obtain gi where gi: "⋀i. i ≤ n ⟹ ?iscont (gi i)"
"⋀i. i ≤ n ⟹ gi i ` topspace X ⊆ {0..1}" "⋀i. i ≤ n ⟹ gi i ` (topspace X - Vi i) ⊆ {0}"
"⋀i. i ≤ n ⟹ gi i ` Hi i ⊆ {1}"
"⋀i. i ≤ n ⟹ disjnt (X closure_of {x∈topspace X. gi i x ≠ 0}) (topspace X - Vi i)"
"⋀i. i ≤ n ⟹ ?csupp (gi i)"
by fast
define hi where "hi ≡ (λn. λx∈topspace X. (∏i<n. (1 - gi i x)) * gi n x)"
show ?thesis
proof(safe intro!: exI[where x=hi])
fix i
assume i: "i ≤ n"
then show "?iscont (hi i)"
using gi(1) by(auto simp: hi_def intro!: continuous_map_real_mult continuous_map_prod continuous_map_diff)
show "?csupp (hi i)"
proof -
have "{x ∈ topspace X. hi i x ≠ 0} = {x∈topspace X. gi i x ≠ 0} ∩ (⋂j<i. {x∈topspace X. gi j x ≠ 1})"
using gi by(auto simp: hi_def)
also have "... ⊆ {x∈topspace X. gi i x ≠ 0}"
by blast
finally show ?thesis
using gi(6)[OF i] closure_of_mono closed_compactin
by(fastforce simp: has_compact_support_on_iff)
qed
next
fix i x
assume i: "i ≤ n" and x: "x ∈ topspace X"
{
assume "x ∉ Vi i"
with i x gi(3)[of i] show "hi i x = 0"
by(auto simp: hi_def)
}
show "hi i x ∈ {0..1}"
using i x gi(2) by(auto simp: hi_def image_subset_iff intro!: mult_nonneg_nonneg mult_le_one prod_le_1 prod_nonneg)
next
fix x
have 1:"(∑i≤n. hi i x) = 1 - (∏i≤n. (1 - gi i x))" if x:"x ∈ topspace X"
proof -
have "(∑i≤n. hi i x) = (∑j≤n. (∏i<j. (1 - gi i x)) * gi j x)"
using x by (simp add: hi_def)
also have "... = 1 - (∏i≤n. (1 - gi i x))"
proof -
have [simp]: "(∏i<m. 1 - gi i x) * (1 - gi m x) = (∏i≤m. 1 - gi i x)" for m
by (metis lessThan_Suc_atMost prod.lessThan_Suc)
show ?thesis
by(induction n, simp_all) (simp add: right_diff_distrib)
qed
finally show ?thesis .
qed
{
assume x:"x ∈ K"
then obtain i where i: "i ≤ n" "x ∈ Hi i"
using K_unHi by auto
have "x ∈ topspace X"
using K(1) x compactin_subset_topspace by auto
hence "(∑i≤n. hi i x) = 1 - (∏i≤n. (1 - gi i x))"
by(simp add: 1)
also have "... = 1"
using i gi(4)[OF i(1)] by(auto intro!: prod_zero bexI[where x=i])
finally show "(∑i≤n. hi i x) = 1" .
}
assume x: "x ∈ topspace X"
then show "0 ≤ (∑i≤n. hi i x)" "(∑i≤n. hi i x) ≤ 1"
using gi(2) by(auto simp: 1 image_subset_iff intro!: prod_nonneg prod_le_1)
next
fix i x
assume h:"i ≤ n" "x ∈ X closure_of {x ∈ topspace X. hi i x ≠ 0}"
have "{x ∈ topspace X. hi i x ≠ 0} = {x∈topspace X. gi i x ≠ 0} ∩ (⋂j<i. {x∈topspace X. gi j x ≠ 1})"
using gi by(auto simp: hi_def)
also have "... ⊆ {x∈topspace X. gi i x ≠ 0}"
by blast
finally have "X closure_of {x ∈ topspace X. hi i x ≠ 0} ⊆ X closure_of {x∈topspace X. gi i x ≠ 0}"
by(rule closure_of_mono)
thus "x ∈ Vi i"
using gi(5)[OF h(1)] h(2) closure_of_subset_topspace by(fastforce simp: disjnt_def)
qed
qed
note [simp, intro!] = continuous_map_add continuous_map_diff continuous_map_real_mult
define μ' where "μ' ≡ (λA. ⨆ (ennreal ` φ ` {(λx∈topspace X. f x) |f. ?fA A f}))"
define μ where "μ ≡ (λA. ⨅ (μ' ` {V. A ⊆ V ∧ openin X V}))"
define Mf where "Mf ≡ {E. E ⊆ topspace X ∧ μ E < ⊤ ∧ μ E = (⨆ (μ ` {K. K ⊆ E ∧ compactin X K}))}"
define M where "M ≡ {E. E ⊆ topspace X ∧ (∀K. compactin X K ⟶ E ∩ K ∈ Mf)}"
have μ'_mono: "⋀A B. A ⊆ B ⟹ μ' A ≤ μ' B"
unfolding μ'_def by(fastforce intro!: SUP_subset_mono imageI)
have μ_open: "μ A = μ' A" if "openin X A" for A
unfolding μ_def by (metis (mono_tags, lifting) INF_eqI μ'_mono dual_order.refl mem_Collect_eq that)
have μ_mono: "⋀A B. A ⊆ B ⟹ μ A ≤ μ B"
unfolding μ_def by(auto intro!: INF_superset_mono)
have μ_fin_subset: "μ A < ∞ ⟹ A ⊆ topspace X" for A
by (metis (mono_tags, lifting) INF_less_iff μ_def mem_Collect_eq openin_subset order.trans)
have μ'_empty: "μ' {} = 0" and μ_empty: "μ {} = 0"
proof -
have 1:"{(λx∈topspace X. f x) |f. ?fA {} f} = {λx∈topspace X. 0}"
by(fastforce intro!: exI[where x="λx∈topspace X. 0"])
thus "μ' {} = 0" "μ {} = 0"
by(auto simp: μ'_def φ_0 μ_open)
qed
have empty_in_Mf: "{} ∈ Mf"
by(auto simp: Mf_def μ_empty)
have step1: "μ (⋃ (range Ei)) ≤ (∑i. μ (Ei i))" for Ei
proof -
have 1: "μ' (V ∪ U) ≤ μ' V + μ' U" if VU: "openin X V" "openin X U" for V U
proof -
have "μ' (V ∪ U) = ⨆ (ennreal ` φ ` {(λx∈topspace X. f x) |f. ?fA (V ∪ U) f})"
by(simp add: μ'_def)
also have "... ≤ μ' V + μ' U"
unfolding Sup_le_iff
proof safe
fix g
assume g: "?iscont g" "?csupp g" "g ∈ topspace X → {0..1}" "g ∈ topspace X - (V ∪ U) → {0}"
"X closure_of {x ∈ topspace X. g x ≠ 0} ⊆ V ∪ U"
have "∃hi. (∀i≤Suc 0. ?iscont (hi i) ∧ ?csupp (hi i) ∧
X closure_of {x ∈ topspace X. hi i x ≠ 0} ⊆ (case i of 0 ⇒ V | Suc _ ⇒ U) ∧
hi i ∈ topspace X → {0..1} ∧
hi i ∈ topspace X - (case i of 0 ⇒ V | Suc _ ⇒ U) → {0}) ∧
(∀x∈X closure_of {x∈topspace X. g x ≠ 0}. (∑i≤Suc 0. hi i x) = 1) ∧
(∀x∈topspace X. 0 ≤ (∑i≤Suc 0. hi i x)) ∧ (∀x∈topspace X. (∑i≤Suc 0. hi i x) ≤ 1)"
proof(safe intro!: fApartition[of _ "Suc 0" "λi. case i of 0 ⇒ V | _ ⇒ U"])
have 1:"(⋃i≤Suc 0. case i of 0 ⇒ V | Suc _ ⇒ U) = U ∪ V"
by(fastforce simp: le_Suc_eq)
show "⋀x. x ∈ X closure_of {x ∈ topspace X. g x ≠ 0} ⟹ x ∈ (⋃i≤Suc 0. case i of 0 ⇒ V | Suc _ ⇒ U)"
unfolding 1 using g by blast
next
show "compactin X (X closure_of {x ∈ topspace X. g x ≠ 0})"
using g by(simp add: has_compact_support_on_iff)
qed(use g VU le_Suc_eq in auto)
then obtain hi where
"(∀i≤Suc 0. ?iscont (hi i) ∧ ?csupp (hi i) ∧
X closure_of {x ∈ topspace X. hi i x ≠ 0} ⊆ (case i of 0 ⇒ V | Suc _ ⇒ U) ∧
hi i ∈ topspace X → {0..1} ∧ hi i ∈ topspace X - (case i of 0 ⇒ V | Suc _ ⇒ U) → {0}) ∧
(∀x∈X closure_of {x∈topspace X. g x ≠ 0}. (∑i≤Suc 0. hi i x) = 1) ∧
(∀x∈topspace X. 0 ≤ (∑i≤Suc 0. hi i x)) ∧ (∀x∈topspace X. (∑i≤Suc 0. hi i x) ≤ 1)"
by blast
hence h0: "?iscont (hi 0)" "?csupp (hi 0)" "X closure_of {x ∈ topspace X. hi 0 x ≠ 0} ⊆ V"
"hi 0 ∈ topspace X → {0..1}" "hi 0 ∈ topspace X - V → {0}"
and h1: "?iscont (hi (Suc 0))" "?csupp (hi (Suc 0))" "X closure_of {x ∈ topspace X. hi (Suc 0) x ≠ 0} ⊆ U"
"hi (Suc 0) ∈ topspace X → {0..1}" "hi (Suc 0) ∈ topspace X - U → {0}"
and h01_sum: "⋀x. x ∈ X closure_of {x∈topspace X. g x ≠ 0} ⟹ (∑i≤Suc 0. hi i x) = 1"
unfolding le_Suc_eq le_0_eq by auto
have "ennreal (φ (λx∈topspace X. g x)) = ennreal (φ (λx∈topspace X. g x * (hi 0 x + hi (Suc 0) x)))"
proof -
have [simp]: "(λx∈topspace X. g x) = (λx∈topspace X. g x * (hi 0 x + hi (Suc 0) x))"
proof
fix x
consider "g x ≠ 0" "x ∈ topspace X" | "g x = 0" | "x ∉ topspace X"
by fastforce
then show "restrict g (topspace X) x = (λx∈topspace X. g x * (hi 0 x + hi (Suc 0) x)) x"
proof cases
case 1
then have "x ∈ X closure_of {x∈topspace X. g x ≠ 0}"
using in_closure_of by fastforce
from h01_sum[OF this] show ?thesis
by simp
qed simp_all
qed
show ?thesis
by simp
qed
also have "... = ennreal (φ (λx∈topspace X. g x * hi 0 x + g x * hi (Suc 0) x))"
by (simp add: ring_class.ring_distribs(1))
also have "... = ennreal (φ (λx∈topspace X. g x * hi 0 x) + φ (λx∈topspace X. g x * hi (Suc 0) x))"
by(intro ennreal_cong linear(2) has_compact_support_on_mult_left continuous_map_real_mult g h0 h1)
also have "... = ennreal (φ (λx∈topspace X. g x * hi 0 x)) + ennreal (φ (λx∈topspace X. g x * hi (Suc 0) x))"
using g(3) h0(4) h1(4)
by(auto intro!: ennreal_plus pos g h0 h1 has_compact_support_on_mult_left mult_nonneg_nonneg)
also have "... ≤ μ' V + μ' U"
unfolding μ'_def
proof(safe intro!: add_mono Sup_upper imageI)
show "∃f. (λx∈topspace X. g x * hi 0 x) = restrict f (topspace X) ∧ ?iscont f ∧ ?csupp f ∧
X closure_of {x ∈ topspace X. f x ≠ 0} ⊆ V ∧ f ∈ topspace X → {0..1} ∧ f ∈ topspace X - V → {0}"
using Pi_mem[OF g(3)] Pi_mem[OF h0(4)] in_mono[OF closure_of_mono[OF inf_sup_ord(2)[of "{x ∈ topspace X. g x ≠ 0}"]]] h0(3,5)
by(auto intro!: exI[where x="λx∈topspace X. g x * hi 0 x"] g(1,2) h0(1,2) has_compact_support_on_mult_left mult_le_one mult_nonneg_nonneg)
show "∃f. (λx∈topspace X. g x * hi (Suc 0) x) = restrict f (topspace X) ∧ ?iscont f ∧
?csupp f ∧ X closure_of {x ∈ topspace X. f x ≠ 0} ⊆ U ∧ f ∈ topspace X → {0..1} ∧ f ∈ topspace X - U → {0}"
using Pi_mem[OF g(3)] Pi_mem[OF h1(4)] in_mono[OF closure_of_mono[OF inf_sup_ord(2)[of "{x ∈ topspace X. g x ≠ 0}"]]] h1(3,5)
by(auto intro!: exI[where x="λx∈topspace X. g x * hi 1 x"] g(1,2) h1(1,2) has_compact_support_on_mult_left mult_le_one mult_nonneg_nonneg)
qed
finally show "ennreal (φ (restrict g (topspace X))) ≤ μ' V + μ' U" .
qed
finally show "μ' (V ∪ U) ≤ μ' V + μ' U" .
qed
consider "∃i. μ (Ei i) = ∞" | "⋀i. μ (Ei i) < ∞"
using top.not_eq_extremum by auto
then show ?thesis
proof cases
case 1
then show ?thesis
by (metis μ_mono ennreal_suminf_lessD infinity_ennreal_def linorder_not_le subset_UNIV top.not_eq_extremum)
next
case fin:2
show ?thesis
proof(rule ennreal_le_epsilon)
fix e :: real
assume e: "0 < e"
have "∃Vi. Ei i ⊆ Vi ∧ openin X Vi ∧ μ' Vi ≤ μ (Ei i) + ennreal ((1 / 2)^Suc i) * ennreal e" for i
proof -
have 1:"μ (Ei i) < μ (Ei i) + ennreal ((1 / 2) ^ Suc i) * ennreal e"
using e fin less_le by fastforce
have "0 < ennreal ((1 / 2)^Suc i) * ennreal e"
using e by (simp add: ennreal_zero_less_mult_iff)
have "(⨅ (μ' ` {V. Ei i ⊆ V ∧ openin X V})) ≤ μ (Ei i)"
by(auto simp: μ_def)
from Inf_le_iff[THEN iffD1,OF this,rule_format,OF 1]
show ?thesis
by auto
qed
then obtain Vi where Vi: "⋀i. Vi i ⊇ Ei i" "⋀i. openin X (Vi i)"
"⋀i. μ (Vi i) ≤ μ (Ei i) + ennreal ((1 / 2)^Suc i) * ennreal e"
by (metis μ_open)
hence "μ (⋃ (range Ei)) ≤ μ (⋃ (range Vi))"
by(auto intro!: μ_mono)
also have "... = μ' (⋃ (range Vi))"
using Vi by(auto intro!: μ_open)
also have "... = (⨆ (ennreal ` φ ` {(λx∈topspace X. f x) |f. ?fA (⋃ (range Vi)) f}))"
by(simp add: μ'_def)
also have "... ≤ (∑i. μ (Ei i)) + ennreal e"
unfolding Sup_le_iff
proof safe
fix f
assume f: "?iscont f" "?csupp f" "X closure_of {x ∈ topspace X. f x ≠ 0} ⊆ ⋃ (range Vi)" "f ∈ topspace X → {0..1}" "f ∈ topspace X - ⋃ (range Vi) → {0}"
have "∃n. f ∈ topspace X - (⋃i≤n. Vi i) → {0} ∧ X closure_of {x ∈ topspace X. f x ≠ 0} ⊆ (⋃i≤n. Vi i)"
proof -
obtain K where K:"finite K" "K ⊆ range Vi" "X closure_of {x ∈ topspace X. f x ≠ 0} ⊆ ⋃ K"
using compactinD[OF f(2)[simplified has_compact_support_on_iff]] Vi(2) f(3)
by (metis (mono_tags, lifting) imageE)
hence "∃n. K ⊆ Vi ` {..n}"
by (metis (no_types, lifting) finite_nat_iff_bounded_le finite_subset_image image_mono)
then obtain n where n: "X closure_of {x ∈ topspace X. f x ≠ 0} ⊆ (⋃i≤n. Vi i)"
using K(3) by fastforce
show ?thesis
using in_closure_of n subsetD by(fastforce intro!: exI[where x=n])
qed
then obtain n where n:"f ∈ topspace X - (⋃i≤n. Vi i) → {0}" "X closure_of {x ∈ topspace X. f x ≠ 0} ⊆ (⋃i≤n. Vi i)"
by blast
have "ennreal (φ (restrict f (topspace X))) ≤ μ' (⋃i≤n. Vi i)"
using f(4) f n by(auto intro!: imageI exI[where x=f] Sup_upper simp: μ'_def)
also have "... ≤ (∑i≤n. μ' (Vi i))"
proof(induction n)
case ih:(Suc n')
have [simp]:"μ' (⋃ (Vi ` {..Suc n'})) = μ' (⋃ (Vi ` {..n'}) ∪ Vi (Suc n'))"
by(rule arg_cong[of _ _ μ']) (fastforce simp: le_Suc_eq)
also have "... ≤ μ' (⋃ (Vi ` {..n'})) + μ' (Vi (Suc n'))"
using Vi(2) by(auto intro!: 1)
also have "... ≤ (∑i≤Suc n'. μ' (Vi i))"
using ih by fastforce
finally show ?case .
qed simp
also have "... = (∑i≤n. μ (Vi i))"
using Vi(2) by(simp add: μ_open)
also have "... ≤ (∑i. μ (Vi i))"
by (auto intro!: incseq_SucI incseq_le[OF _ summable_LIMSEQ'])
also have "... ≤ (∑i. μ (Ei i) + ennreal ((1 / 2)^Suc i) * ennreal e)"
by(intro suminf_le Vi(3)) auto
also have "... = (∑i. μ (Ei i)) + (∑i. ennreal ((1 / 2)^Suc i) * ennreal e)"
by(rule suminf_add[symmetric]) auto
also have "... = (∑i. μ (Ei i)) + (∑i. ennreal ((1 / 2)^Suc i)) * ennreal e"
by simp
also have "... = (∑i. μ (Ei i)) + ennreal 1 * ennreal e"
proof -
have "(∑i. ennreal ((1 / 2)^Suc i)) = ennreal 1"
by(rule suminf_ennreal_eq) (use power_half_series in auto)
thus ?thesis
by presburger
qed
also have "... = (∑i. μ (Ei i)) + ennreal e"
by simp
finally show "ennreal (φ (restrict f (topspace X))) ≤ (∑i. μ (Ei i)) + ennreal e" .
qed
finally show "μ (⋃ (range Ei)) ≤ (∑i. μ (Ei i)) + ennreal e" .
qed
qed
qed
have step1': "μ (E1 ∪ E2) ≤ μ E1 + μ E2" for E1 E2
proof -
define En where "En ≡ (λn::nat. if n = 0 then E1 else if n = 1 then E2 else {})"
have 1: "(⋃ (range En)) = (E1 ∪ E2)"
by(auto simp: En_def)
have 2: "(∑i. μ (En i)) = μ E1 + μ E2"
using suminf_offset[of "λi. μ (En i)",of "Suc (Suc 0)"]
by(auto simp: En_def μ_empty)
show ?thesis
using step1[of En] by(simp add: 1 2)
qed
have step2: "K ∈ Mf" "μ K = (⨅ (ennreal ` φ ` {(λx∈topspace X. f x) | f. ?fK K f}))" if K: "compactin X K" for K
proof -
have le1: "μ K ≤ ennreal (φ (λx∈topspace X. f x))" if f:"?iscont f" "?csupp f" "f ∈ topspace X → {0..1}" "f ∈ K → {1}" for f
proof -
have f: "continuous_map X (top_of_set {0..1::real}) f" "f ` K ⊆ {1}" "?csupp f"
using f by (auto simp: continuous_map_in_subtopology)
hence f_cont: "?iscont f" "f ∈ topspace X → {0..1}"
by (auto simp add: continuous_map_in_subtopology)
have 1:"μ K ≤ ennreal (1 / ((real n + 1) / (real n + 2)) * φ (λx∈topspace X. f x))" for n
proof -
let ?a = "(real n + 1) / (real n + 2)"
define V where "V ≡ {x∈topspace X. ?a < f x}"
have openinV:"openin X V"
using f(1)by (auto simp: V_def continuous_map_upper_lower_semicontinuous_lt_gen)
have KV: "K ⊆ V"
using f(2) compactin_subset_topspace[OF K] by(auto simp: V_def)
hence "μ K ≤ μ V"
by(rule μ_mono)
also have "... = μ' V"
by(simp add: μ_open openinV)
also have "... = (⨆ (ennreal ` φ ` {(λx∈topspace X. f x) |f. ?fA V f}))"
by(simp add: μ'_def)
also have "... ≤ (1 / ?a) * φ (λx∈topspace X. f x)"
unfolding Sup_le_iff
proof (safe intro!: ennreal_leI)
fix g
assume g: "?iscont g" "?csupp g" "X closure_of {x∈topspace X. g x ≠ 0} ⊆ V"
"g ∈ topspace X → {0..1}" "g ∈ topspace X - V → {0}"
show "φ (restrict g (topspace X)) ≤ 1 / ?a * φ (restrict f (topspace X))" (is "?l ≤ ?r")
proof -
have "?l ≤ φ (λx∈topspace X. 1 / ?a * f x)"
proof(rule φmono)
fix x
assume x: "x ∈ topspace X"
consider "g x ≠ 0" | "g x = 0"
by fastforce
then show "g x ≤ 1 / ((real n + 1) / (real n + 2)) * f x"
proof cases
case 1
then have "x ∈ V"
using g(5) x by auto
hence "?a < f x"
by(auto simp: V_def x)
hence "1 < 1 / ?a * f x"
by (simp add: divide_less_eq mult.commute)
thus ?thesis
by(intro order.strict_implies_order[OF order.strict_trans1[of "g x" 1 "1 / ?a * f x"]]) (use g(4) x in auto)
qed(use Pi_mem[OF f_cont(2)] x in auto)
qed(intro g f_cont f has_compact_support_on_mult_left continuous_map_real_mult continuous_map_canonical_const)+
also have "... = ?r"
by(intro linear f f_cont)
finally show ?thesis .
qed
qed
finally show ?thesis .
qed
have 2:"(λn. ennreal (1 / ((real n + 1) / (real n + 2)) * φ (restrict f (topspace X))))
⇢ ennreal (φ (restrict f (topspace X)))"
proof(intro tendsto_ennrealI tendsto_mult_right[where l="1::real",simplified])
have 1: "(λn. 1 / ((real n + 1) / (real n + 2))) = (λn. real (Suc (Suc n)) / real (Suc n))"
by (simp add: add.commute)
show "(λn. 1 / ((real n + 1) / (real n + 2))) ⇢ 1"
unfolding 1 by(rule LIMSEQ_Suc[OF LIMSEQ_Suc_n_over_n])
qed
show "μ K ≤ ennreal (φ (λx∈topspace X. f x))"
by(rule Lim_bounded2[where N=0,OF 2]) (use 1 in auto)
qed
have muK_fin:"μ K < ⊤"
proof -
obtain f where f: "continuous_map X (top_of_set {0..1::real}) f" "f ` K ⊆ {1}" "?csupp f"
using Urysohn_locally_compact_Hausdorff_closed_compact_support[OF lh(1) disjI1[OF lh(2)]
zero_le_one closedin_empty K] by(auto simp: has_compact_support_on_iff)
hence "?iscont f" "?csupp f" "f ∈ topspace X → {0..1}" "f ∈ K → {1}"
by(auto simp: continuous_map_in_subtopology)
from le1[OF this]
show ?thesis
using dual_order.strict_trans2 ennreal_less_top by blast
qed
moreover have " μ K = (⨆ (μ ` {K'. K' ⊆ K ∧ compactin X K'}))"
by (metis (no_types, lifting) SUP_eqI μ_mono mem_Collect_eq subset_refl K)
ultimately show "K ∈ Mf"
using compactin_subset_topspace[OF K] by(simp add: Mf_def)
show "μ K = (⨅ (ennreal ` φ ` {(λx∈topspace X. f x) |f. ?fK K f}))"
proof(safe intro!: antisym le_Inf_iff[THEN iffD2] Inf_le_iff[THEN iffD2])
fix g
assume "?iscont g" "?csupp g" "g ∈ topspace X → {0..1}" "g ∈ K → {1}"
from le1[OF this(1-4)]
show "μ K ≤ ennreal (φ (λx∈topspace X. g x))"
by force
next
fix y
assume "μ K < y"
then obtain V where V: "openin X V" "K ⊆ V" "μ' V < y"
by (metis (mono_tags, lifting) INF_less_iff μ_def mem_Collect_eq)
hence "closedin X (topspace X - V)" "disjnt (topspace X - V) K"
by (auto simp: disjnt_def)
from Urysohn_locally_compact_Hausdorff_closed_compact_support[OF lh(1) disjI1[OF lh(2)] zero_le_one this(1) K this(2)]
obtain f where f':"continuous_map X (subtopology euclidean {0..1}) f" "f ` (topspace X - V) ⊆ {0::real}"
"f ` K ⊆ {1}" "disjnt (X closure_of {x∈topspace X. f x ≠ 0}) (topspace X - V)"
"compactin X (X closure_of {x∈topspace X. f x ≠ 0})"
by blast
hence f:"?iscont f" "?csupp f" "⋀x. x ∈ topspace X ⟹ f x ≥ 0"
"⋀x. x ∈ topspace X ⟹ f x ≤ 1" "⋀x. x ∈ K ⟹ f x = 1"
by(auto simp: has_compact_support_on_iff continuous_map_in_subtopology)
have "ennreal (φ (restrict f (topspace X))) < y"
proof(rule order.strict_trans1)
show "ennreal (φ (restrict f (topspace X))) ≤ μ' V"
unfolding μ'_def using f' f in_closure_of
by (fastforce intro!: Sup_upper imageI exI[where x="λx∈topspace X. f x"] simp: disjnt_iff)
qed fact
thus "∃a∈ennreal ` φ ` {(λx∈topspace X. f x)|f. ?fK K f}. a < y"
using f compactin_subset_topspace[OF K] by(auto intro!: exI[where x="λx∈topspace X. f x"])
qed
qed
have μ_K: "μ K ≤ ennreal (φ (λx∈topspace X. f x))" if K: "compactin X K" and f:"?fK K f" for K f
using le_Inf_iff[THEN iffD1,OF eq_refl[OF step2(2)[OF K]]] f by blast
have step3: "μ A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. μ K)" "μ A < ∞ ⟹ A ∈ Mf" if A:"openin X A" for A
proof -
show "μ A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. μ K)"
proof(safe intro!: antisym le_Sup_iff[THEN iffD2] Sup_le_iff[THEN iffD2])
fix y
assume y: "y < μ A"
from less_SUP_iff[THEN iffD1,OF less_INF_D[OF y[simplified μ_def],simplified μ'_def],of A]
obtain f where f: "?iscont f" "?csupp f" "X closure_of {x ∈ topspace X. f x ≠ 0} ⊆ A"
"f ∈ topspace X → {0..1}" "f ∈ topspace X - A → {0}" "y < ennreal (φ (λx∈topspace X. f x))"
using A by blast
show "∃a∈μ ` {K. compactin X K ∧ K ⊆ A}. y < a"
proof(rule bexI[where x="μ (X closure_of {x ∈ topspace X. f x ≠ 0})"])
show "y < μ (X closure_of {a ∈ topspace X. f a ≠ 0})"
proof(rule order.strict_trans2)
show "ennreal (φ (λx∈topspace X. f x)) ≤ μ (X closure_of {a ∈ topspace X. f a ≠ 0})"
using f in_closure_of in_mono
by(fastforce intro!: Sup_upper imageI exI[where x=f] simp: μ_def le_Inf_iff μ'_def)
qed fact
qed(use f(2,3) has_compact_support_on_iff in auto)
qed(auto intro!: μ_mono)
thus "μ A < ∞ ⟹ A ∈ Mf"
unfolding Mf_def using openin_subset[OF A] by simp metis
qed
have step4: "μ (⋃n. En n) = (∑n. μ (En n))" "μ (⋃n. En n) < ∞ ⟹ (⋃n. En n) ∈ Mf"
if En: "⋀n. En n ∈ Mf" "disjoint_family En" for En
proof -
have compacts: "μ (K1 ∪ K2) = μ K1 + μ K2" if K: "compactin X K1" "compactin X K2" "disjnt K1 K2" for K1 K2
proof(rule antisym)
show "μ (K1 ∪ K2) ≤ μ K1 + μ K2"
by(rule step1')
next
show "μ K1 + μ K2 ≤ μ (K1 ∪ K2)"
proof(rule ennreal_le_epsilon)
fix e :: real
assume e: "0 < e" "μ (K1 ∪ K2) < ⊤"
from Urysohn_locally_compact_Hausdorff_closed_compact_support[OF lh(1) disjI1[OF lh(2)]
zero_le_one compactin_imp_closedin[OF lh(2) K(1)] K(2,3)]
obtain f where f: "continuous_map X (top_of_set {0..1::real}) f" "f ` K1 ⊆ {0}" "f ` K2 ⊆ {1}"
"disjnt (X closure_of {x ∈ topspace X. f x ≠ 0}) K1" "compactin X (X closure_of {x ∈ topspace X. f x ≠ 0})"
by blast
hence f': "?iscont f" "?csupp f" "⋀x. x ∈ topspace X ⟹ f x ≥ 0" "⋀x. x ∈ topspace X ⟹ f x ≤ 1"
by(auto simp: has_compact_support_on_iff continuous_map_in_subtopology)
from Inf_le_iff[THEN iffD1,OF eq_refl[OF step2(2)[symmetric,OF compactin_Un[OF K(1,2)]]],rule_format,of "μ (K1 ∪ K2) + ennreal e"]
obtain g where g: "?iscont g" "?csupp g" "g ∈ topspace X → {0..1}" "g ∈ K1 ∪ K2 → {1}"
"ennreal (φ (λx∈topspace X. g x)) < μ (K1 ∪ K2) + ennreal e"
using e by fastforce
have "μ K1 + μ K2 ≤ ennreal (φ (λx∈topspace X. (1 - f x) * g x)) + ennreal (φ (λx∈topspace X. f x * g x))"
proof(rule add_mono)
show "μ K1 ≤ ennreal (φ (λx∈topspace X. (1 - f x) * g x))"
using f' Pi_mem[OF g(3)] g(1,2,4,5) f(2) compactin_subset_topspace[OF K(1)]
by(auto intro!: μ_K has_compact_support_on_mult_left mult_nonneg_nonneg mult_le_one K(1) mult_eq_1[THEN iffD2])
show "μ K2 ≤ ennreal (φ (λx∈topspace X. f x * g x))"
using g f Pi_mem[OF g(3)] f' compactin_subset_topspace[OF K(2)]
by(auto intro!: μ_K[OF K(2)] has_compact_support_on_mult_left mult_nonneg_nonneg mult_le_one mult_eq_1[THEN iffD2])
qed
also have "... = ennreal (φ (λx∈topspace X. (1 - f x)*g x) + φ (λx∈topspace X. f x * g x))"
using f' g by(auto intro!: ennreal_plus[symmetric] pos has_compact_support_on_mult_left mult_nonneg_nonneg)
also have "... = ennreal (φ (λx∈topspace X. (1 - f x) * g x + f x * g x))"
by(auto intro!: ennreal_cong linear[symmetric] has_compact_support_on_mult_left f' g)
also have "... = ennreal (φ (λx∈topspace X. g x))"
by (simp add: Groups.mult_ac(2) right_diff_distrib)
also have "... < μ (K1 ∪ K2) + ennreal e"
by fact
finally show "μ K1 + μ K2 ≤ μ (K1 ∪ K2) + ennreal e"
by order
qed
qed
have Hn:"∃Hn. ∀n. compactin X (Hn n) ∧ (Hn n) ⊆ En n ∧ μ (En n) < μ (Hn n) + ennreal ((1 / 2)^Suc n) * ennreal e'"
if e': "e' > 0" for e'
proof(safe intro!: choice)
show "∃Hn. compactin X Hn ∧ Hn ⊆ En n ∧ μ (En n) < μ Hn + ennreal ((1 / 2)^Suc n) * ennreal e'" for n
proof(cases "μ (En n) < ennreal ((1 / 2)^Suc n) * ennreal e'")
case True
then show ?thesis
using e' by(auto intro!: exI[where x="{}"] simp: μ_empty ennreal_zero_less_mult_iff)
next
case False
then have le: "μ (En n) ≥ ennreal ((1 / 2) ^ Suc n) * ennreal e'"
by order
hence pos:"0 < μ (En n)"
using e' zero_less_power by fastforce
have fin: "μ (En n) < ⊤"
using En Mf_def by blast
hence 1:"μ (En n) - ennreal ((1 / 2)^Suc n) * ennreal e' < μ (En n)"
using pos by(auto intro!: ennreal_between simp: ennreal_zero_less_mult_iff e')
have "μ (En n) = ⨆ (μ ` {K. K ⊆ (En n) ∧ compactin X K})"
using En by(auto simp: Mf_def)
from le_Sup_iff[THEN iffD1,OF eq_refl[OF this],rule_format,OF 1]
obtain Hn where Hn: "Hn ⊆ En n" "compactin X Hn" "μ (En n) - ennreal ((1 / 2)^Suc n) * ennreal e' < μ Hn"
by blast
hence "μ (En n) < μ Hn + ennreal ((1 / 2)^Suc n) * ennreal e'"
by (metis diff_diff_ennreal' diff_gt_0_iff_gt_ennreal fin le order_less_le)
with Hn(1,2) show ?thesis
by blast
qed
qed
show 1:"μ (⋃n. En n) = (∑n. μ (En n))"
proof(rule antisym)
show "(∑n. μ (En n)) ≤ μ (⋃ (range En))"
proof(rule ennreal_le_epsilon)
fix e :: real
assume fin: "μ (⋃ (range En)) < ⊤" and e:"0 < e"
from Hn[OF e] obtain Hn where Hn: "⋀n. compactin X (Hn n)" "⋀n. Hn n ⊆ En n"
"⋀n. μ (En n) < μ (Hn n) + ennreal ((1 / 2) ^ Suc n) * ennreal e"
by blast
have "(∑n≤N. μ (En n)) ≤ μ (⋃ (range En)) + ennreal e" for N
proof -
have "(∑n≤N. μ (En n)) ≤ (∑n≤N. μ (Hn n) + ennreal ((1 / 2) ^ Suc n) * ennreal e)"
by(rule sum_mono) (use Hn(3) order_less_le in auto)
also have "... = (∑n≤N. μ (Hn n)) + (∑n≤N. ennreal ((1 / 2) ^ Suc n) * ennreal e)"
by(rule sum.distrib)
also have "... = μ (⋃n≤N. Hn n) + (∑n≤N. ennreal ((1 / 2) ^ Suc n) * ennreal e)"
proof -
have "(∑n≤N. μ (Hn n)) = μ (⋃n≤N. Hn n)"
proof(induction N)
case ih:(Suc N')
show ?case (is "?l = ?r")
proof -
have "?l = μ (⋃ (Hn ` {..N'})) + μ (Hn (Suc N'))"
by(simp add: ih)
also have "... = μ ((⋃ (Hn ` {..N'})) ∪ Hn (Suc N'))"
proof(rule compacts[symmetric])
show "disjnt (⋃ (Hn ` {..N'})) (Hn (Suc N'))"
using En(2) Hn(2) unfolding disjoint_family_on_def disjnt_iff
by (metis Int_iff Suc_n_not_le_n UNIV_I UN_iff atMost_iff empty_iff in_mono)
qed(auto intro!: compactin_Union Hn)
also have "... = ?r"
by (simp add: Un_commute atMost_Suc)
finally show ?thesis .
qed
qed simp
thus ?thesis
by simp
qed
also have "... ≤ μ (⋃ (range En)) + (∑n≤N. ennreal ((1 / 2) ^ Suc n) * ennreal e)"
using Hn(2) by(auto intro!: μ_mono)
also have "... ≤ μ (⋃ (range En)) + ennreal e"
proof -
have "(∑n≤N. ennreal ((1 / 2) ^ Suc n) * ennreal e) = ennreal (∑n≤N. ((1 / 2) ^ Suc n)) * ennreal e"
unfolding sum_distrib_right[symmetric] by simp
also have "... = ennreal e * ennreal (∑n≤N. ((1 / 2) ^ Suc n))"
using mult.commute by blast
also have "... ≤ ennreal e * ennreal (∑n. ((1 / 2) ^ Suc n))"
using e by(auto intro!: ennreal_mult_le_mult_iff[THEN iffD2] ennreal_leI sum_le_suminf)
also have "... = ennreal e"
using power_half_series sums_unique by fastforce
finally show ?thesis
by fastforce
qed
finally show ?thesis .
qed
thus "(∑n. μ (En n)) ≤ μ (⋃ (range En)) + ennreal e"
by(auto intro!: LIMSEQ_le_const2[OF summable_LIMSEQ'] exI[where x=0])
qed
qed fact
show "⋃ (range En) ∈ Mf" if "μ (⋃ (range En)) < ∞"
proof -
have "μ (⋃ (range En)) = (⨆ (μ ` {K. K ⊆ (⋃ (range En)) ∧ compactin X K}))"
proof(rule antisym)
show "μ (⋃ (range En)) ≤ ⨆ (μ ` {K. K ⊆ ⋃ (range En) ∧ compactin X K})"
unfolding le_Sup_iff
proof safe
fix y
assume "y < μ (⋃ (range En))"
from order_tendstoD(1)[OF summable_LIMSEQ' this[simplified 1]]
obtain N where N: "y < (∑n≤N. μ (En n))"
by fastforce
obtain e where e: "e > 0" "y < (∑n≤N. μ (En n)) - ennreal e"
by (metis N ennreal_le_epsilon ennreal_less_top less_diff_eq_ennreal linorder_not_le)
from Hn[OF e(1)] obtain Hn where Hn: "⋀n. compactin X (Hn n)" "⋀n. Hn n ⊆ En n"
"⋀n. μ (En n) < μ (Hn n) + ennreal ((1 / 2) ^ Suc n) * ennreal e"
by blast
have "y < (∑n≤N. μ (En n)) - ennreal e"
by fact
also have "... ≤ (∑n≤N. μ (Hn n) + ennreal ((1 / 2) ^ Suc n) * ennreal e) - ennreal e"
by(intro ennreal_minus_mono sum_mono) (use Hn(3) order_less_le in auto)
also have "... = (∑n≤N. μ (Hn n)) + (∑n≤N. ennreal ((1 / 2) ^ Suc n) * ennreal e) - ennreal e"
by (simp add: sum.distrib)
also have "... = μ (⋃n≤N. Hn n) + (∑n≤N. ennreal ((1 / 2) ^ Suc n) * ennreal e) - ennreal e"
proof -
have "(∑n≤N. μ (Hn n)) = μ (⋃n≤N. Hn n)"
proof(induction N)
case ih:(Suc N')
show ?case (is "?l = ?r")
proof -
have "?l = μ (⋃ (Hn ` {..N'})) + μ (Hn (Suc N'))"
by(simp add: ih)
also have "... = μ ((⋃ (Hn ` {..N'})) ∪ Hn (Suc N'))"
proof(rule compacts[symmetric])
show "disjnt (⋃ (Hn ` {..N'})) (Hn (Suc N'))"
using En(2) Hn(2) unfolding disjoint_family_on_def disjnt_iff
by (metis Int_iff Suc_n_not_le_n UNIV_I UN_iff atMost_iff empty_iff in_mono)
qed(auto intro!: compactin_Union Hn)
also have "... = ?r"
by (simp add: Un_commute atMost_Suc)
finally show ?thesis .
qed
qed simp
thus ?thesis
by simp
qed
also have "... ≤ μ (⋃n≤N. Hn n) + (∑n. ennreal ((1 / 2) ^ Suc n) * ennreal e) - ennreal e"
by(intro ennreal_minus_mono add_mono sum_le_suminf) (use e in auto)
also have "... = μ (⋃n≤N. Hn n) + (∑n. ennreal ((1 / 2) ^ Suc n)) * ennreal e - ennreal e"
using ennreal_suminf_multc by presburger
also have "... = μ (⋃n≤N. Hn n) + ennreal e - ennreal e"
proof -
have "(∑n. ennreal ((1 / 2) ^ Suc n)) = ennreal 1"
by(rule suminf_ennreal_eq) (use power_half_series in auto)
thus ?thesis
by fastforce
qed
also have "... = μ (⋃n≤N. Hn n)"
by simp
finally show "Bex (μ ` {K. K ⊆ ⋃ (range En) ∧ compactin X K}) ((<) y)"
using Hn by(auto intro!: exI[where x="⋃n≤N. Hn n"] compactin_Union)
qed
qed(auto intro!: Sup_le_iff[THEN iffD2] μ_mono)
moreover have "(⋃ (range En)) ⊆ topspace X"
using En by(auto simp: Mf_def)
ultimately show ?thesis
using that by(auto simp: Mf_def)
qed
qed
have step4': "μ (E1 ∪ E2) = μ E1 + μ E2" "μ(E1 ∪ E2) < ∞ ⟹ E1 ∪ E2 ∈ Mf"
if E: "E1 ∈ Mf" "E2 ∈ Mf" "disjnt E1 E2" for E1 E2
proof -
define En where "En ≡ (λn::nat. if n = 0 then E1 else if n = 1 then E2 else {})"
have 1: "(⋃ (range En)) = (E1 ∪ E2)"
by(auto simp: En_def)
have 2: "(∑i. μ (En i)) = μ E1 + μ E2"
using suminf_offset[of "λi. μ (En i)",of "Suc (Suc 0)"]
by(auto simp: En_def μ_empty)
have 3:"disjoint_family En"
using E(3) by(auto simp: disjoint_family_on_def disjnt_def En_def)
have 4: "⋀n. En n ∈ Mf"
using E(1,2) by(auto simp: En_def empty_in_Mf)
show "μ (E1 ∪ E2) = μ E1 + μ E2" "μ(E1 ∪ E2) < ∞ ⟹ E1 ∪ E2 ∈ Mf"
using step4[of En] E(1) by(simp_all add: 1 2 3 4)
qed
have step5: "∃V K. openin X V ∧ compactin X K ∧ K ⊆ E ∧ E ⊆ V ∧ μ (V - K) < ennreal e"
if E: "E ∈ Mf" and e: "e > 0" for E e
proof-
have 1:"μ E < μ E + ennreal (e / 2)"
using E e by(simp add: Mf_def) (metis μ_mono linorder_not_le)
hence 2: "μ E + ennreal (e / 2) < μ E + ennreal (e / 2) + ennreal (e / 2)"
by simp
from Inf_le_iff[THEN iffD1,OF eq_refl,rule_format,OF _ 1]
obtain V where V: "openin X V" "E ⊆ V" "μ V < μ E + ennreal (e / 2)"
using μ_def μ_open by force
have "μ E + ennreal (e / 2) + ennreal (e / 2) ≤ (⨆K∈{K. K ⊆ E ∧ compactin X K}. μ K + ennreal e)"
by(subst ennreal_SUP_add_left,insert E e) (auto simp: ennreal_plus_if Mf_def)
from le_Sup_iff[THEN iffD1,OF this,rule_format,OF 2]
obtain K where K: "compactin X K" "K ⊆ E" "μ E + ennreal (e / 2) < μ K + ennreal e"
by blast
have "μ (V - K) < ∞"
by (metis Diff_subset V(3) μ_mono dual_order.strict_trans1 infinity_ennreal_def order_le_less_trans top_greatest)
hence "μ K + μ (V - K) = μ (K ∪ (V - K))"
by(intro step4'(1)[symmetric,OF step2(1)[OF K(1)] step3(2)] openin_diff V(1) compactin_imp_closedin K(1) lh(2))
(auto simp: disjnt_iff)
also have "... = μ V"
by (metis Diff_partition K(2) V(2) order_trans)
also have "... < μ K + ennreal e"
by(auto intro!: order.strict_trans[OF V(3)] K)
finally have "μ (V - K) < ennreal e"
by(simp add: ennreal_add_left_cancel_less)
thus ?thesis
using V K by blast
qed
have step6: "⋀A B. A ∈ Mf ⟹ B ∈ Mf ⟹ A - B ∈ Mf" "⋀A B. A ∈ Mf ⟹ B ∈ Mf ⟹ A ∪ B ∈ Mf"
"⋀A B. A ∈ Mf ⟹ B ∈ Mf ⟹ A ∩ B ∈ Mf"
proof -
{
fix A B
assume AB: "A ∈ Mf" "B ∈ Mf"
have dif1: "μ (A - B) < ∞"
by (metis (no_types, lifting) AB(1) Diff_subset Mf_def μ_mono infinity_ennreal_def mem_Collect_eq order_le_less_trans)
have "μ (A - B) = (⨆ (μ ` {K. K ⊆ (A - B) ∧ compactin X K}))"
proof(rule antisym)
show "μ (A - B) ≤ ⨆ (μ ` {K. K ⊆ A - B ∧ compactin X K})"
unfolding le_Sup_iff
proof safe
fix y
assume y:"y < μ (A - B)"
then obtain e where e: "e > 0" "ennreal e = μ (A - B) - y"
by (metis dif1 diff_gt_0_iff_gt_ennreal diff_le_self_ennreal ennreal_cases ennreal_less_zero_iff neq_top_trans order_less_le)
from step5[OF AB(1) half_gt_zero[OF e(1)]] step5[OF AB(2) half_gt_zero[OF e(1)]]
obtain V1 V2 K1 K2 where VK:
"openin X V1" "compactin X K1" "K1 ⊆ A" "A ⊆ V1" "μ (V1 - K1) < ennreal (e / 2)"
"openin X V2" "compactin X K2" "K2 ⊆ B" "B ⊆ V2" "μ (V2 - K2) < ennreal (e / 2)"
by auto
have K1V2:"compactin X (K1 - V2)"
by(auto intro!: closed_compactin[OF VK(2)] compactin_imp_closedin[OF lh(2) VK(2)] VK(6))
have "μ (A - B) ≤ μ ((K1 - V2) ∪ (V1 - K1) ∪ (V2 - K2))"
using VK by(auto intro!: μ_mono)
also have "... ≤ μ ((K1 - V2) ∪ (V1 - K1)) + μ (V2 - K2)"
by fact
also have "... ≤ μ (K1 - V2) + μ (V1 - K1) + μ (V2 - K2)"
by(auto intro!: step1')
also have "... < μ (K1 - V2) + μ (V1 - K1) + ennreal (e / 2)"
unfolding add.assoc ennreal_add_left_cancel_less ennreal_add_left_cancel_less
using step2(1)[OF K1V2] VK(5,10) Mf_def by fastforce
also have "... ≤ μ (K1 - V2) + ennreal (e / 2) + ennreal (e / 2)"
using order.strict_implies_order[OF VK(5)] by(auto simp: add_mono)
also have "... = μ (K1 - V2) + ennreal e"
using e(1) ennreal_plus_if by auto
finally have 1:"μ (A - B) < μ (K1 - V2) + ennreal e" .
show "∃a∈(μ ` {K. K ⊆ A - B ∧ compactin X K}). (y < a)"
proof(safe intro!: bexI[where x="μ (K1 - V2)"] imageI)
have "y < μ (K1 - V2) + ennreal e - ennreal e"
by (metis 1 add_diff_self_ennreal e(2) ennreal_less_top less_diff_eq_ennreal order_less_imp_le y)
also have "... = μ (K1 - V2)"
by simp
finally show "y < μ (K1 - V2)" .
qed(use K1V2 VK in auto)
qed
qed(auto intro!: μ_mono simp: Sup_le_iff)
with dif1 show "A - B ∈ Mf"
using Mf_def μ_fin_subset by auto
}
note diff=this
fix A B
assume AB: "A ∈ Mf" "B ∈ Mf"
show un: "A ∪ B ∈ Mf"
proof -
have "A ∪ B = (A - B) ∪ B"
by fastforce
also have "... ∈ Mf"
proof(rule step4'(2))
have "μ (A - B ∪ B) = μ (A - B) + μ B"
by(rule step4'(1)) (auto simp: diff AB disjnt_iff)
also have "... < ∞"
using Mf_def diff[OF AB] AB(2) by fastforce
finally show "μ (A - B ∪ B) < ∞" .
qed(auto simp: diff AB disjnt_iff)
finally show ?thesis .
qed
show int: "A ∩ B ∈ Mf"
proof -
have "A ∩ B = A - (A - B)"
by blast
also have "... ∈ Mf"
by(auto intro!: diff AB)
finally show ?thesis .
qed
qed
have step6': "(⋃i∈I. Ai i) ∈ Mf" if "finite I" "(⋀i. i ∈ I ⟹ Ai i ∈ Mf)" for Ai and I :: "nat set"
proof -
have "(∀i∈I. Ai i ∈ Mf) ⟶ (⋃i∈I. Ai i) ∈ Mf"
by(rule finite_induct[OF that(1)]) (auto intro!: step6(2) empty_in_Mf)
with that show ?thesis
by blast
qed
have step7: "sigma_algebra (topspace X) M" "sets (borel_of X) ⊆ M"
proof -
show sa:"sigma_algebra (topspace X) M"
unfolding sigma_algebra_iff2
proof(intro conjI ballI allI impI)
show "{} ∈ M"
using empty_in_Mf by(auto simp: M_def)
next
show M_subspace:"M ⊆ Pow (topspace X)"
by(auto simp: M_def)
{
fix s
assume s:"s ∈ M"
show "topspace X - s ∈ M"
unfolding M_def
proof(intro conjI CollectI allI impI)
fix K
assume K: "compactin X K"
have "(topspace X - s) ∩ K = K - (s ∩ K)"
using M_subspace s compactin_subset_topspace[OF K] by fast
also have "... ∈ Mf"
by(intro step6(1) step2(1)[OF K]) (use s K M_def in blast)
finally show "(topspace X - s) ∩ K ∈ Mf" .
qed blast
}
{
fix An :: "nat ⇒ _"
assume An: "range An ⊆ M"
show "(⋃ (range An)) ∈ M"
unfolding M_def
proof(intro CollectI conjI allI impI)
fix K
assume K: "compactin X K"
have "∃Bn. ∀n. Bn n = (An n ∩ K) - (⋃i<n. Bn i)"
by(rule dependent_wellorder_choice) auto
then obtain Bn where Bn: "⋀n. Bn n = (An n ∩ K) - (⋃i<n. Bn i)"
by blast
have Bn_disj:"disjoint_family Bn"
unfolding disjoint_family_on_def
proof safe
fix m n x
assume h:"m ≠ n" "x ∈ Bn m" "x ∈ Bn n"
then consider "m < n" | "n < m"
by linarith
then show "x ∈ {}"
proof cases
case 1
with h(3) have "x ∉ Bn m"
by(auto simp: Bn[of n])
with h(2) show ?thesis by blast
next
case 2
with h(2) have "x ∉ Bn n"
by(auto simp: Bn[of m])
with h(3) show ?thesis by blast
qed
qed
have un:"(⋃ (range An) ∩ K) = (⋃n. Bn n)"
proof -
have 1:"An n ∩ K ⊆ (⋃i≤n. Bn i)" for n
proof safe
fix x
assume x:"x ∈ An n" "x ∈ K"
define m where "m = (LEAST m. x ∈ An m)"
have m1:"⋀l. l < m ⟹ x ∈ An m ⟹ x ∉ An l"
using m_def not_less_Least by blast
hence x_nBn:"l < m ⟹ x ∉ Bn l" for l
by (metis Bn Diff_Diff_Int Diff_iff m_def not_less_Least)
have m2: "x ∈ An m"
by (metis LeastI_ex x(1) m_def)
have m3: "m ≤ n"
using m1 m2 not_le_imp_less x(1) by blast
have "x ∈ Bn m"
unfolding Bn[of m]
using x_nBn m2 x(2) by fast
thus "x ∈ ⋃ (Bn ` {..n})"
using m3 by blast
qed
have 2:"(⋃n. An n ∩ K) = (⋃n. Bn n)"
proof(rule antisym)
show "(⋃n. An n ∩ K) ⊆ ⋃ (range Bn)"
proof safe
fix n x
assume "x ∈ An n" "x ∈ K"
then have "x ∈ (⋃i≤n. Bn i)"
using 1 by fast
thus "x ∈ ⋃ (range Bn)"
by fast
qed
next
show " ⋃ (range Bn) ⊆ (⋃n. An n ∩ K)"
proof(rule SUP_mono)
show "∃m∈UNIV. Bn i ⊆ An m ∩ K" for i
by(auto intro!: bexI[where x=i] simp: Bn[of i])
qed
qed
thus ?thesis
by simp
qed
also have "... ∈ Mf"
proof(safe intro!: step4(2) Bn_disj)
fix n
show "Bn n ∈ Mf"
proof(rule less_induct)
fix n
show " (⋀m. m < n ⟹ Bn m ∈ Mf) ⟹ Bn n ∈ Mf"
using An K by(auto intro!: step6' step6(1) simp :Bn[of n] M_def)
qed
next
have "μ (⋃ (range Bn)) ≤ μ K"
unfolding un[symmetric] by(auto intro!: μ_mono)
also have "... < ∞"
using step2(1)[OF K] by(auto simp: Mf_def)
finally show "μ (⋃ (range Bn)) < ∞" .
qed
finally show "⋃ (range An) ∩ K ∈ Mf " .
qed(use An M_def in auto)
}
qed
show "sets (borel_of X) ⊆ M"
unfolding sets_borel_of_closed
proof(safe intro!: sigma_algebra.sigma_sets_subset[OF sa])
fix T
assume "closedin X T"
then show "T ∈ M"
by (simp add: Int_commute M_def closedin_subset compact_Int_closedin step2(1))
qed
qed
have step8: "A ∈ Mf ⟷ A ∈ M ∧ μ A < ∞" for A
proof safe
assume A: "A ∈ Mf"
then have "A ⊆ topspace X"
by(auto simp: Mf_def)
thus "A ∈ M"
by(auto simp: M_def intro!:step6(3)[OF A step2(1)])
show "μ A < ∞"
using A by(auto simp: Mf_def)
next
assume A: "A ∈ M" "μ A < ∞"
hence "A ⊆ topspace X"
using M_def by blast
moreover have "μ A = (⨆ (μ ` {K. K ⊆ A ∧ compactin X K}))"
proof(rule antisym)
show "μ A ≤ ⨆ (μ ` {K. K ⊆ A ∧ compactin X K})"
unfolding le_Sup_iff
proof safe
fix y
assume y:"y < μ A"
then obtain e where e: "e > 0" "ennreal e = μ A - y"
by (metis A(2) diff_gt_0_iff_gt_ennreal diff_le_self_ennreal ennreal_cases ennreal_less_zero_iff neq_top_trans order_less_le)
obtain U where U: "openin X U" "A ⊆ U" "μ U < ∞"
using Inf_less_iff[THEN iffD1,OF A(2)[simplified μ_def]] μ_open by force
from step5[OF step3(2)[OF U(1,3)] half_gt_zero[OF e(1)]]
obtain V K where VK:
"openin X V" "compactin X K" "K ⊆ U" "U ⊆ V" "μ (V - K) < ennreal (e / 2)"
by blast
have AK: "A ∩ K ∈ Mf"
using step2(1) VK(2) A by(auto simp: M_def)
hence e': "μ (A ∩ K) < μ (A ∩ K) + ennreal (e / 2)"
by (metis Diff_Diff_Int Diff_subset Int_commute U(3) VK(3) VK(5) μ_mono add.commute diff_gt_0_iff_gt_ennreal ennreal_add_diff_cancel infinity_ennreal_def order_le_less_trans top.not_eq_extremum zero_le)
have "μ (A ∩ K) + ennreal (e / 2) = (⨆K∈{L. L ⊆ (A ∩ K) ∧ compactin X L}. μ K + ennreal (e / 2))"
by(subst ennreal_SUP_add_left) (use AK Mf_def in auto)
from le_Sup_iff[THEN iffD1,OF this[THEN eq_refl],rule_format,OF e']
obtain H where H: "compactin X H" "H ⊆ A ∩ K" "μ (A ∩ K) < μ H + ennreal (e / 2)"
by blast
show "∃a∈μ ` {K. K ⊆ A ∧ compactin X K}. y < a"
proof(safe intro!: bexI[where x="μ H"] imageI H(1))
have "μ A ≤ μ ((A ∩ K) ∪ (V - K))"
using VK U by(auto intro!: μ_mono)
also have "... ≤ μ (A ∩ K) + μ (V - K)"
by(auto intro!: step1'(1))
also have "... < μ H + ennreal (e / 2) + ennreal (e / 2)"
using H(3) VK(5) add_strict_mono by blast
also have "... = μ H + ennreal e"
using e(1) ennreal_plus_if by fastforce
finally have 1: "μ A < μ H + ennreal e" .
have "y = μ A - ennreal e"
using A(2) diff_diff_ennreal e(2) y by fastforce
also have "... < μ H + ennreal e - ennreal e"
using 1
by (metis diff_le_self_ennreal e(2) ennreal_add_diff_cancel_right ennreal_less_top minus_less_iff_ennreal top_neq_ennreal)
also have "... = μ H"
by simp
finally show "y < μ H" .
qed(use H in auto)
qed
qed(auto simp: Sup_le_iff intro!: μ_mono)
ultimately show "A ∈ Mf"
using A(2) Mf_def by auto
qed
define N where "N ≡ measure_of (topspace X) M μ"
have step9: "measure_space (topspace X) M μ"
unfolding measure_space_def
proof safe
show "countably_additive M μ"
unfolding countably_additive_def
by (metis Sup_upper UNIV_I μ_mono image_eqI image_subset_iff infinity_ennreal_def linorder_not_less neq_top_trans step1 step4(1) step8)
qed(auto simp: step7 positive_def μ_empty)
have space_N: "space N = topspace X" and sets_N: "sets N = M" and emeasure_N: "A ∈ sets N ⟹ emeasure N A = μ A" for A
proof -
show "space N = topspace X"
by (simp add: N_def space_measure_of_conv)
show 1:"sets N = M"
by (simp add: N_def sigma_algebra.sets_measure_of_eq step7(1))
have "⋀x. x ∈ M ⟹ x ⊆ topspace X"
by(auto simp: M_def)
thus "A ∈ sets N ⟹ emeasure N A = μ A"
unfolding N_def using step9 by(auto intro!: emeasure_measure_of simp: measure_space_def 1[simplified N_def])
qed
have g1:"subalgebra N (borel_of X)" (is ?g1)
and g2:"(∀A∈sets N. emeasure N A = (⨅C∈{C. openin X C ∧ A ⊆ C}. emeasure N C))" (is ?g2)
and g3:"(∀A. openin X A ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))" (is ?g3)
and g4:"(∀A∈sets N. emeasure N A < ∞ ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))" (is ?g4)
and g5:"(∀K. compactin X K ⟶ emeasure N K < ∞)" (is ?g5)
and g6:"complete_measure N" (is ?g6)
proof -
have 1: "⋀P. (⋀C. P C ⟹ C ∈ sets N) ⟹ emeasure N ` {C. P C} = μ ` {C. P C}"
using emeasure_N by auto
show ?g1
by(auto simp: subalgebra_def sets_N space_N space_borel_of step7)
show ?g2
proof -
have "emeasure N ` {C. openin X C ∧ A ⊆ C} = μ ` {C. openin X C ∧ A ⊆ C}" for A
using step7(2) by(auto intro!: 1 simp: sets_N dest: borel_of_open)
hence "emeasure N ` {C. openin X C ∧ A ⊆ C} = μ' ` {C. openin X C ∧ A ⊆ C}" for A
using μ_open by auto
thus ?thesis
by(simp add: emeasure_N sets_N μ_def) (metis (no_types, lifting) Collect_cong)
qed
show ?g3
by (metis (no_types, lifting) 1 borel_of_open emeasure_N sets_N step2(1) step3(1) step7(2) step8 subsetD)
show ?g4
proof safe
fix A
assume A[measurable]: "A ∈ sets N" "emeasure N A < ∞"
then have Mf:"A ∈ Mf"
by (simp add: emeasure_N sets_N step8)
have "emeasure N A = μ A"
by (simp add: emeasure_N)
also have "... = ⨆ (μ ` {K. compactin X K ∧ K ⊆ A})"
using Mf unfolding Mf_def by simp metis
also have "... = ⨆ (emeasure N ` {K. compactin X K ∧ K ⊆ A})"
using emeasure_N sets_N step2(1) step8 by auto
finally show "emeasure N A = ⨆ (emeasure N ` {K. compactin X K ∧ K ⊆ A})" .
qed
show ?g5
using emeasure_N sets_N step2(1) step8 by auto
show ?g6
proof
fix A B
assume AB:"B ⊆ A" "A ∈ null_sets N"
then have "μ A = 0"
by (metis emeasure_N null_setsD1 null_setsD2)
hence 1:"μ B = 0"
using μ_mono[OF AB(1)] by fastforce
have "B ∈ Mf"
proof -
have "B ⊆ topspace X"
by (metis AB gfp.leq_trans null_setsD2 sets.sets_into_space space_N)
moreover have "μ B = ⨆ (μ ` {K. K ⊆ B ∧ compactin X K})"
proof(rule antisym)
show "⨆ (μ ` {K. K ⊆ B ∧ compactin X K}) ≤ μ B"
by(auto simp: Sup_le_iff μ_mono)
qed(simp add: 1)
moreover have "μ B < ⊤"
by(simp add: 1)
ultimately show ?thesis
unfolding Mf_def by blast
qed
thus "B ∈ sets N"
by(simp add: step8 sets_N)
qed
qed
have g7: "(∀f. ?iscont f ⟶ ?csupp f ⟶ integrable N f)"
unfolding integrable_iff_bounded
proof safe
fix f
assume f:"?iscont f" "?csupp f"
then show [measurable]:"f ∈ borel_measurable N"
by(auto intro!: measurable_from_subalg[OF g1]
simp: lower_semicontinuous_map_measurable upper_lower_semicontinuous_map_iff_continuous_map)
let ?K = "X closure_of {x∈topspace X. f x ≠ 0}"
have K[measurable]: "compactin X ?K" "?K ∈ sets N"
using f(2) g1 sets_N step2(1) step8 by(auto simp: has_compact_support_on_iff subalgebra_def)
have "bounded (f ` ?K)"
using image_compactin[of X ?K euclideanreal f] f
by(auto simp: has_compact_support_on_iff intro!: compact_imp_bounded)
then obtain B where B:"⋀x. x ∈ ?K ⟹ ¦f x¦ ≤ B"
by (meson bounded_real imageI)
show "(∫⇧+ x. ennreal (norm (f x)) ∂N) < ∞"
proof -
have "(∫⇧+ x. ennreal (norm (f x)) ∂N) ≤ (∫⇧+ x. ennreal (indicator ?K x *¦f x¦) ∂N)"
using in_closure_of by(fastforce intro!: nn_integral_mono simp: indicator_def space_N)
also have "... ≤ (∫⇧+ x. ennreal (B * indicator ?K x) ∂N)"
using B by(auto intro!: nn_integral_mono ennreal_leI simp: indicator_def)
also have "... = (∫⇧+ x. ennreal B * indicator ?K x ∂N)"
by(auto intro!: nn_integral_cong simp: indicator_def)
also have "... = ennreal B * (∫⇧+ x. indicator ?K x ∂N)"
by(simp add: nn_integral_cmult)
also have "... = ennreal B * emeasure N ?K"
by simp
finally show ?thesis
using g5 K(1) ennreal_mult_less_top linorder_not_le top.not_eq_extremum by fastforce
qed
qed
have g8: "∀f. ?iscont f ⟶ ?csupp f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N)"
proof safe
have 1: "φ (λx∈topspace X. f x) ≤ (∫x. f x ∂N)" if f:"?iscont f" "?csupp f" for f
proof -
let ?K = "X closure_of {x∈topspace X. f x ≠ 0}"
have K[measurable]: "compactin X ?K" "?K ∈ sets N"
using f(2) g1 sets_N step2(1) step8 by(auto simp: has_compact_support_on_iff subalgebra_def)
have f_meas[measurable]: "f ∈ borel_measurable N"
using f by(auto intro!: measurable_from_subalg[OF g1]
simp: lower_semicontinuous_map_measurable upper_lower_semicontinuous_map_iff_continuous_map)
have "bounded (f ` ?K)"
using image_compactin[of X ?K euclideanreal f] f
by(auto simp: has_compact_support_on_iff intro!: compact_imp_bounded)
then obtain B' where B':"⋀x. x ∈ ?K ⟹ ¦f x¦ ≤ B'"
by (meson bounded_real imageI)
define B where "B ≡ max 1 B'"
have B_pos: "B > 0" and B: "⋀x. x ∈ ?K ⟹ ¦f x¦ ≤ B"
using B' by(auto simp add: B_def intro!: max.coboundedI2)
have 1:"φ (λx∈topspace X. f x) ≤ (∫x. f x ∂N) + 1 / (Suc n) * (2 * measure N ?K + (1 / Suc n) + 2 * B + 1)" for n
proof -
have "∃yn. ∀m::nat. yn m = (if m = 0 then - B - 1 else 1 / 2 * 1 / Suc n + yn (m - 1))"
by(rule dependent_wellorder_choice) auto
then obtain yn' where yn':"⋀m::nat. yn' m = (if m = 0 then - B - 1 else 1 / 2 * 1 / Suc n + yn' (m - 1))"
by blast
hence yn'_0: "yn' 0 = - B - 1" and yn'_Suc: "⋀m. yn' (Suc m) = 1 / 2 * 1 / Suc n + yn' m"
by simp_all
have yn'_accum: "yn' m = m * (1 / 2 * 1 / Suc n) + yn' 0" for m
by(induction m) (auto simp: yn'_Suc add_divide_distrib)
define L :: nat where "L = (LEAST k. B ≤ yn' k)"
define yn where "yn ≡ (λn. if n = L then B else yn' n)"
have L_least: "⋀i. i < L ⟹ yn' i < B"
by (metis L_def linorder_not_less not_less_Least)
have yn_L: "yn L = B"
by(auto simp: yn_def)
have yn'_L: "yn' L ≥ B"
unfolding L_def
proof(rule LeastI_ex)
show "∃x. B ≤ yn' x"
proof(safe intro!: exI[where x="nat (ceiling ((2 * B + 2) / ((1/2) * 1 / real (Suc n))))"])
have "B ≤ 2 * B + 2 + (- B - 1)"
using B_pos by fastforce
also have "... = (2 * B + 2) / ((1/2) * 1 / real (Suc n)) * (1 / 2 * 1 / Suc n) + yn' 0"
by(auto simp: yn'_0)
also have "... ≤ real (nat (ceiling ((2 * B + 2) / ((1/2) * 1 / real (Suc n))))) * (1 / 2 * 1 / Suc n) + yn' 0"
by(intro add_mono real_nat_ceiling_ge mult_right_mono) auto
also have "... = yn' (nat (ceiling ((2 * B + 2) / ((1/2) * 1 / real (Suc n)))))"
by (metis yn'_accum)
finally show " B ≤ yn' (nat ⌈(2 * B + 2) / (1 / 2 * 1 / real (Suc n))⌉)" .
qed
qed
have L_pos: "0 < L"
proof(rule ccontr)
assume "¬ 0 < L"
then have [simp]:"L = 0"
by blast
show False
using yn'_L yn'_0 B_pos by auto
qed
have yn_0: "yn 0 = - B - 1"
using L_pos by(auto simp: yn_def yn'_0)
have strict_mono_yn:"strict_mono yn"
proof(rule strict_monoI_Suc)
fix m
consider "m = L" | "Suc m = L" | "m < L" "Suc m < L" | "L < m" "L < Suc m"
by linarith
then show "yn m < yn (Suc m)"
proof cases
case 1
then have "yn m = B"
by(simp add: yn_L)
also have "... ≤ yn' m"
using yn'_L by(simp add: 1)
also have "... < yn' (Suc m)"
by (simp add: yn'_Suc)
also have "... = yn (Suc m)"
using 1 by(auto simp: yn_def)
finally show ?thesis .
next
case 2
then have "yn m = yn' m"
using yn_def by force
also have "... < B"
using L_least[of m] 2 by blast
also have "... = yn (Suc m)"
by(simp add: 2 yn_L)
finally show ?thesis .
qed(auto simp: yn_def yn'_Suc)
qed
have yn_le_L: "⋀i. i ≤ L ⟹ yn i ≤ B"
using L_least less_eq_real_def yn_def by auto
have yn_ge_L: "⋀i. L < i ⟹ B < yn i"
using strict_mono_yn[THEN strict_monoD] yn_L by blast
have yn_ge: "⋀i. - B - 1 ≤ yn i"
using monoD[OF strict_mono_mono[OF strict_mono_yn],of 0] yn_0 by auto
have yn_Suc_le: "yn (Suc i) < 1 / real (Suc n) + yn i" for i
proof -
consider "i = L" | "Suc i = L" | "i < L" "Suc i < L" | "L < i" "L < Suc i"
by linarith
then show ?thesis
proof cases
case 1
then have "yn (Suc i) = yn' (Suc L)"
by(simp add: yn_def)
also have "... = 1 / 2 * 1 / Suc n + yn' L"
by(simp add: yn'_Suc)
also have "... = (1 / 2) * (1 / Suc n) + (1 / 2) * (1 / Suc n) + yn' (L - 1)"
using L_pos yn' by fastforce
also have "... = 1 / Suc n + yn' (L - 1)"
unfolding semiring_normalization_rules(1) by simp
also have "... < 1 / Suc n + B"
by (simp add: L_least L_pos less_eq_real_def)
finally show ?thesis
by(simp add: 1 yn_L)
next
case 2
then have "yn (Suc i) = B"
by(simp add: yn_L)
also have "... ≤ yn' L"
using yn'_L .
also have "... = 1 / 2 * 1 / Suc n + yn' (L - 1)"
using yn' L_pos by simp
also have "... = 1 / 2 * 1 / Suc n + yn i"
using 2 yn_def by force
also have "... < 1 / Suc n + yn i"
by (simp add: pos_less_divide_eq)
finally show ?thesis .
qed(auto simp: yn_def yn'_Suc pos_less_divide_eq)
qed
have f_bound: "f x ∈ {yn 0<..yn L}" if x:"x ∈ ?K" for x
using B[OF x] yn_L yn_0 by auto
define En where "En ≡ (λm. {x∈topspace X. yn m < f x ∧ f x ≤ yn (Suc m)} ∩ ?K)"
have En_sets[measurable]: "En m ∈ sets N" for m
proof -
have "{x∈topspace X. yn m < f x ∧ f x ≤ yn (Suc m)} = f -` {yn m<..yn (Suc m)} ∩ space N"
by(auto simp: space_N)
also have "... ∈ sets N"
by simp
finally show ?thesis
by(simp add: En_def)
qed
have En_disjnt: "disjoint_family En"
unfolding disjoint_family_on_def
proof safe
fix m n x
assume "m ≠ n" and x: "x ∈ En n" "x ∈ En m"
then consider "m < n" | "n < m"
by linarith
thus "x ∈ {}"
proof cases
case 1
hence 1:"Suc m ≤ n"
by simp
from x have "f x ≤ yn (Suc m)" "yn n < f x"
by(auto simp: En_def)
with 1 show ?thesis
using monoD[OF strict_mono_mono[OF strict_mono_yn] 1] by linarith
next
case 2
hence 1:"Suc n ≤ m"
by simp
from x have "f x ≤ yn (Suc n)" "yn m < f x"
by(auto simp: En_def)
with 1 show ?thesis
using monoD[OF strict_mono_mono[OF strict_mono_yn] 1] by linarith
qed
qed
have K_eq_un_En: "?K = (⋃i≤L. En i)"
proof safe
fix x
assume x:"x ∈ ?K"
have "∃m∈{..L}. yn m < f x ∧ x ∈ topspace X ∧ f x ≤ yn (Suc m)"
proof(rule ccontr)
assume "¬ (∃m∈{..L}. yn m < f x ∧ x ∈ topspace X ∧ f x ≤ yn (Suc m))"
then have 1:"⋀m. m ≤ L ⟹ yn (Suc m) < f x ∨ f x ≤ yn m"
using compactin_subset_topspace[OF K(1)] x by force
then have "m ≤ L ⟹ yn (Suc m) < f x" for m
by(induction m) (use B x yn_0 in fastforce)+
hence "yn (Suc L) < f x"
by force
with yn_ge_L[of "Suc L"] f_bound x B show False
by fastforce
qed
thus "x ∈ (⋃i≤L. En i)"
using x by(auto simp: En_def)
qed(auto simp: En_def)
have emeasure_En_fin: "emeasure N (En i) < ∞" for i
proof -
have "emeasure N (En i) ≤ μ ?K"
unfolding emeasure_N[OF En_sets[of i]] by(auto intro!: μ_mono simp: En_def)
also have "... < ∞"
using step2(1)[OF K(1)] step8 by blast
finally show ?thesis .
qed
have "∃Vi. openin X Vi ∧ En i ⊆ Vi ∧ measure N Vi < measure N (En i) + (1 / Suc n) / Suc L ∧
(∀x∈Vi. f x < (1 / real (Suc n) + yn i)) ∧ emeasure N Vi < ∞" for i
proof -
have 1:"emeasure N (En i) < emeasure N (En i) + ennreal (1 / real (Suc n) / real (Suc L))"
unfolding ennreal_add_left_cancel_less[where b=0,simplified add_0_right]
using emeasure_En_fin by (simp add: order_less_le)
from Inf_le_iff[THEN iffD1,OF eq_refl[OF g2[rule_format,OF En_sets[of i],symmetric]],rule_format,OF this]
obtain Vi where Vi:"openin X Vi" "Vi ⊇ En i"
"emeasure N Vi < emeasure N (En i) + ennreal (1 / real (Suc n) / real (Suc L))"
by blast
hence "ennreal (measure N Vi) = emeasure N Vi"
unfolding measure_def using ennreal_enn2real_if by fastforce
also have "... < ennreal (measure N (En i)) + ennreal (1 / real (Suc n) / real (Suc L))"
using ennreal_enn2real_if emeasure_En_fin Vi by (metis emeasure_eq_ennreal_measure top.extremum_strict)
also have "... = ennreal (measure N (En i) + 1 / real (Suc n) / real (Suc L))"
by simp
finally have 1:"measure N Vi < measure N (En i) + 1 / real (Suc n) / real (Suc L)"
by(auto intro!: ennreal_less_iff[THEN iffD1])
define Vi' where "Vi' = Vi ∩ {x∈topspace X. yn i < f x ∧ f x < 1 / real (Suc n) + yn i}"
have "En i ⊆ Vi'"
proof -
have "En i = En i ∩ {x∈topspace X. yn i < f x ∧ f x < 1 / real (Suc n) + yn i}"
unfolding En_def using order.strict_trans1[OF _ yn_Suc_le] by fast
also have "... ⊆ Vi'"
using Vi(2) by(auto simp: Vi'_def)
finally show ?thesis .
qed
moreover have "openin X Vi'"
proof -
have "{x ∈ topspace X. yn i<f x ∧ f x< 1/real (Suc n) + yn i} = (f -` {yn i<..<1/real (Suc n) + yn i} ∩ topspace X)"
by fastforce
also have "openin X ..."
using continuous_map_open[OF f(1)] by simp
finally show ?thesis
using Vi(1) by(auto simp: Vi'_def)
qed
moreover have "measure N Vi' < measure N (En i) + (1 / real (Suc n) / real (Suc L))" (is "?l < ?r")
proof -
have "?l ≤ measure N Vi"
unfolding measure_def
proof(safe intro!: enn2real_mono emeasure_mono)
show "Vi ∈ sets N"
using Vi(1) borel_of_open sets_N step7(2) by blast
show "emeasure N Vi < ⊤"
by (metis ‹ennreal (Sigma_Algebra.measure N Vi) = emeasure N Vi› ennreal_less_top)
qed(auto simp: Vi'_def)
with 1 show ?thesis
by fastforce
qed
moreover have "⋀x. x ∈ Vi' ⟹ f x < (1 / real (Suc n) + yn i)"
by(auto simp: Vi'_def)
moreover have "emeasure N Vi' < ∞"
by (metis (no_types, lifting) Diff_Diff_Int Diff_subset Vi'_def Vi(1) ‹ennreal (measure N Vi) = emeasure N Vi› borel_of_open
emeasure_mono ennreal_less_top infinity_ennreal_def linorder_not_less sets_N step7(2) subsetD top.not_eq_extremum)
ultimately show ?thesis
by blast
qed
then obtain Vi where
Vi: "⋀i. openin X (Vi i)" "⋀i. En i ⊆ Vi i"
"⋀i. measure N (Vi i) < measure N (En i) + (1 / Suc n) / Suc L"
"⋀i x. x ∈ Vi i ⟹ f x < (1 / real (Suc n) + yn i)"
"⋀i. emeasure N (Vi i) < ∞"
by metis
have "?K ⊆ (⋃i≤L. Vi i)"
using K_eq_un_En Vi(2) by blast
from fApartition[OF K(1) Vi(1) this]
obtain hi where hi: "⋀i. i ≤ L ⟹ ?iscont (hi i)" "⋀i. i ≤ L ⟹ ?csupp (hi i)"
"⋀i. i ≤ L ⟹ X closure_of {x ∈ topspace X. hi i x ≠ 0} ⊆ Vi i"
"⋀i. i ≤ L ⟹ hi i ∈ topspace X → {0..1}" "⋀i. i ≤ L ⟹ hi i ∈ topspace X - Vi i → {0}"
"⋀x. x ∈ ?K ⟹ (∑i≤L. hi i x) = 1" "⋀x. x ∈ topspace X ⟹ 0 ≤ (∑i≤L. hi i x)"
"⋀x. x ∈ topspace X ⟹ (∑i≤L. hi i x) ≤ 1"
by blast
have f_sum_hif: "(∑i≤L. f x * hi i x) = f x" if x:"x ∈ topspace X" for x
proof(cases "f x = 0")
case False
then have "x ∈ ?K"
using in_closure_of x by fast
with hi(6)[OF this] show ?thesis
by(simp add: sum_distrib_left[symmetric])
qed simp
have sum_muEi:"(∑i≤L. measure N (En i)) = measure N ?K"
proof -
have "(∑i≤L. measure N (En i)) = measure N (⋃i≤L. En i)"
using emeasure_En_fin En_disjnt
by(fastforce intro!: measure_UNION'[symmetric] fmeasurableI pairwiseI simp: disjnt_iff disjoint_family_on_def)
also have "... = measure N ?K"
by(simp add: K_eq_un_En)
finally show ?thesis .
qed
have measure_K_le: "measure N ?K ≤ (∑i≤L. φ (λx∈topspace X. hi i x))"
proof -
have "ennreal (measure N ?K) = μ ?K"
by (metis (mono_tags, lifting) K(1) K(2) Sigma_Algebra.measure_def emeasure_N ennreal_enn2real g5 infinity_ennreal_def)
also have "μ ?K ≤ ennreal (φ (λx∈topspace X. ∑i≤L. hi i x))"
by(auto intro!: le_Inf_iff[THEN iffD1,OF eq_refl[OF step2(2)[OF K(1)]],rule_format]
imageI exI[where x="λx. ∑i≤L. hi i x"] has_compact_support_on_sum hi continuous_map_sum)
also have "... = ennreal (∑i≤L. φ (λx∈topspace X. hi i x))"
by(auto intro!: pos_lin_functional_on_CX_sum assms ennreal_cong hi)
finally show ?thesis
using Pi_mem[OF hi(4)] by(auto intro!: ennreal_le_iff[of _ "measure N ?K",THEN iffD1] sum_nonneg pos hi)
qed
have "φ (restrict f (topspace X)) = φ (λx∈topspace X. ∑i≤L. f x * hi i x)"
using f_sum_hif restrict_ext by force
also have "... = (∑i≤L. φ (λx∈topspace X. f x * hi i x))"
using f hi by(auto intro!: pos_lin_functional_on_CX_sum assms has_compact_support_on_mult_right)
also have "... ≤ (∑i≤L. φ (λx∈topspace X. (1 / (Suc n) + yn i) * hi i x))"
proof(safe intro!: sum_mono φmono)
fix i x
assume i:"i ≤ L" "x ∈ topspace X"
show "f x * hi i x ≤ (1 / (Suc n) + yn i) * hi i x"
proof(cases "x ∈ Vi i")
case True
hence "f x < 1 / (Suc n) + yn i"
by fact
thus ?thesis
using Pi_mem[OF hi(4)[OF i(1)] i(2)] by(intro mult_right_mono) auto
next
case False
then show ?thesis
using Pi_mem[OF hi(5)[OF i(1)]] i(2) by force
qed
qed(auto intro!: f hi has_compact_support_on_mult_left)
also have "... = (∑i≤L. (1 / (Suc n) + yn i) * φ (λx∈topspace X. hi i x))"
by(intro Finite_Cartesian_Product.sum_cong_aux linear hi) auto
also have "... = (∑i≤L. (1 / (Suc n) + yn i + (B + 1)) * φ (λx∈topspace X. hi i x))
- (∑i≤L. (B + 1) * φ (λx∈topspace X. hi i x))"
by(simp add: sum_subtractf[symmetric] distrib_right)
also have "... = (∑i≤L. (1 / (Suc n) + yn i + (B + 1)) * φ (λx∈topspace X. hi i x))
- (B + 1) * (∑i≤L. φ (λx∈topspace X. hi i x))"
by (simp add: sum_distrib_left)
also have "... ≤ (∑i≤L. (1 / (Suc n) + yn i + (B + 1)) * (measure N (En i) + (1 / Suc n / Suc L)))
- (B + 1) * measure N ?K"
proof(safe intro!: diff_mono[OF sum_mono[OF mult_left_mono]])
fix i
assume i: "i ≤ L"
show "φ (restrict (hi i) (topspace X)) ≤ measure N (En i) + 1 / (Suc n) / (Suc L)" (is "?l ≤ ?r")
proof -
have "?l ≤ measure N (Vi i)"
proof -
have "ennreal (φ (restrict (hi i) (topspace X))) ≤ μ' (Vi i)"
using hi(1,2,3,4,5)[OF i] by(auto intro!: SUP_upper imageI exI[where x="hi i"] simp: μ'_def)
also have "... = emeasure N (Vi i)"
by (metis Vi(1) μ_open borel_of_open emeasure_N sets_N step7(2) subsetD)
also have "... = ennreal (measure N (Vi i))"
using Vi(5)[of i] by(auto simp: measure_def intro!: ennreal_enn2real[symmetric])
finally show "φ (restrict (hi i) (topspace X)) ≤ measure N (Vi i)"
using ennreal_le_iff measure_nonneg by blast
qed
with Vi(3)[of i] show ?thesis
by linarith
qed
show "0 ≤ 1 / real (Suc n) + yn i + (B + 1)"
using yn_ge[of i] by(simp add: add.assoc)
qed(use B_pos measure_K_le in fastforce)
also have "... = (∑i≤L. (yn i - 1 / (Suc n)) * measure N (En i)) + 2 * (∑i≤L. ((1 / Suc n)) * measure N (En i))
+ (∑i≤L. (B + 1) * measure N (En i))
+ (∑i≤L. (1 / (Suc n) + yn i + (B + 1)) * (1 / Suc n / Suc L)) - (B + 1) * measure N ?K"
by(simp add: distrib_left distrib_right sum.distrib sum_subtractf left_diff_distrib)
also have "... = (∑i≤L. (yn i - 1 / (Suc n)) * measure N (En i)) + 1 / Suc n * 2* measure N ?K
+ (∑i≤L. (1 / (Suc n) + yn i + (B + 1)) * (1 / Suc n / Suc L))"
by(simp add: sum_distrib_left[symmetric] sum_muEi del: times_divide_eq_left)
also have "... ≤ (∑i≤L. (yn i - 1 / (Suc n)) * measure N (En i)) + 1 / Suc n * 2* measure N ?K
+ (∑i≤L. (1 / (Suc n) + B + (B + 1)) * (1 / Suc n / Suc L))"
proof -
have "(∑i≤L. (1 / (Suc n) + yn i + (B + 1)) * (1 / Suc n / Suc L))
≤ (∑i≤L. (1 / (Suc n) + B + (B + 1)) * (1 / Suc n / Suc L))"
proof(safe intro!: sum_mono mult_right_mono)
fix i
assume i: "i ≤ L"
show "1 / (Suc n) + yn i + (B + 1) ≤ 1 / (Suc n) + B + (B + 1)"
using yn_le_L[OF i] by fastforce
qed auto
thus ?thesis
by argo
qed
also have "... = (∑i≤L. (yn i - 1 / (Suc n)) * measure N (En i)) + 1 / Suc n * 2* measure N ?K
+ (1 / (Suc n) + B + (B + 1)) * (1 / Suc n)"
by simp
also have "... = (∑i≤L. (yn i - 1 / (Suc n)) * measure N (En i))
+ 1 / Suc n * (2 * measure N ?K + (1 / Suc n) + 2 * B + 1)"
by argo
also have "... ≤ (∫x. f x ∂N) + 1 / (Suc n) * (2 * measure N ?K + (1 / Suc n) + 2 * B + 1)"
proof -
have "(∑i≤L. (yn i - 1 / (Suc n)) * measure N (En i)) ≤ (∫x. f x ∂N)" (is "?l ≤ ?r")
proof -
have "?l = (∑i≤L. (∫x. (yn i - 1 / (Suc n)) * indicator (En i) x ∂N))"
by simp
also have "... = (∫x. (∑i≤L. (yn i - 1 / (Suc n)) * indicator (En i) x) ∂N)"
by(rule Bochner_Integration.integral_sum[symmetric]) (use emeasure_En_fin in simp)
also have "... ≤ ?r"
proof(rule integral_mono)
fix x
assume x: "x ∈ space N"
consider "⋀i. i ≤ L ⟹ x ∉ En i" | "∃i≤L. x ∈ En i"
by blast
then show " (∑i≤L. (yn i - 1 / real (Suc n)) * indicat_real (En i) x) ≤ f x"
proof cases
case 1
then have "x ∉ ?K"
by(simp add: K_eq_un_En)
hence "f x = 0"
using x in_closure_of by(fastforce simp: space_N)
with 1 show ?thesis
by force
next
case 2
then obtain i where i: "i ≤ L" "x ∈ En i"
by blast
with En_disjnt have "⋀j. j ≠ i ⟹ x ∉ En j"
by(auto simp: disjoint_family_on_def)
hence "(∑i≤L. (yn i - 1 / real (Suc n)) * indicat_real (En i) x)
= (∑j≤L. if j = i then (yn i - 1 / real (Suc n)) else 0)"
by(intro Finite_Cartesian_Product.sum_cong_aux) (use i in auto)
also have "... = yn i - 1 / real (Suc n)"
using i by auto
also have "... ≤ f x"
using i(2) by(auto simp: En_def diff_less_eq order_less_le_trans intro!: order.strict_implies_order)
finally show ?thesis .
qed
next
show "integrable N (λx. ∑i≤L. (yn i - 1 / real (Suc n)) * indicat_real (En i) x)"
using emeasure_En_fin by fastforce
qed(use g7 f in auto)
finally show ?thesis .
qed
thus ?thesis
by fastforce
qed
finally show ?thesis .
qed
show ?thesis
proof(rule Lim_bounded2)
show "(λn. (∫x. f x ∂N) + 1 / real (Suc n) * (2 * measure N ?K + 1 / real (Suc n) + 2 * B + 1)) ⇢ (∫x. f x ∂N)"
apply(rule tendsto_add[where b=0,simplified])
apply simp
apply(rule tendsto_mult[where a = "0::real", simplified,where b="2 * measure N ?K + 2 * B + 1"])
apply(intro LIMSEQ_Suc[OF lim_inverse_n'] tendsto_add[OF tendsto_const,of _ 0,simplified] tendsto_add[OF _ tendsto_const])+
done
qed(use 1 in auto)
qed
fix f
assume f: "?iscont f" "?csupp f"
show "φ (λx∈topspace X. f x) = (∫x. f x ∂N)"
proof(rule antisym)
have "- φ (λx∈topspace X. f x) = φ (λx∈topspace X. - f x)"
using f by(auto intro!: φdiff[of "λx. 0" f,simplified φ_0,simplified,symmetric])
also have "... ≤ (∫x. - f x ∂N)"
by(intro 1) (auto simp: f)
also have "... = - (∫x. f x ∂N)"
by simp
finally show "φ (λx∈topspace X. f x) ≥ (∫x. f x ∂N)"
by linarith
qed(intro f 1)
qed
show ?thesis
apply(intro exI[where x=M] ex1I[where a=N] rep_measures_real_unique[OF lh(1,2),of _ N])
using sets_N g1 g2 g3 g4 g5 g6 g7 g8 by auto
qed
subsection ‹ Riesz Representation Theorem for Complex Numbers›
theorem Riesz_representation_complex_complete:
fixes X :: "'a topology" and φ :: "('a ⇒ complex) ⇒ complex"
assumes lh:"locally_compact_space X" "Hausdorff_space X"
and plf:"positive_linear_functional_on_CX X φ"
shows "∃M. ∃!N. sets N = M ∧ subalgebra N (borel_of X)
∧ (∀A∈sets N. emeasure N A = (⨅C∈{C. openin X C ∧ A ⊆ C}. emeasure N C))
∧ (∀A. openin X A ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))
∧ (∀A∈sets N. emeasure N A < ∞ ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))
∧ (∀K. compactin X K ⟶ emeasure N K < ∞)
∧ (∀f. continuous_map X euclidean f ⟶ f has_compact_support_on X ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))
∧ (∀f. continuous_map X euclidean f ⟶ f has_compact_support_on X ⟶ complex_integrable N f)
∧ complete_measure N"
proof -
let ?φ' = "λf. Re (φ (λx∈topspace X. complex_of_real (f x)))"
from Riesz_representation_real_complete[OF lh pos_lin_functional_on_CX_complex_decompose_plf[OF plf]]
obtain M N where MN:
"sets N = M" "subalgebra N (borel_of X)" "(∀A∈sets N. emeasure N A = ⨅ (emeasure N ` {C. openin X C ∧ A ⊆ C}))"
"(∀A. openin X A ⟶ emeasure N A = ⨆ (emeasure N ` {K. compactin X K ∧ K ⊆ A}))"
"(∀A∈sets N. emeasure N A < ∞ ⟶ emeasure N A = ⨆ (emeasure N ` {K. compactin X K ∧ K ⊆ A}))"
"(∀K. compactin X K ⟶ emeasure N K < ∞)"
"⋀f. continuous_map X euclideanreal f ⟹ f has_compact_support_on X ⟹ ?φ' (λx∈topspace X. f x) = (∫x. f x ∂N)"
"⋀f. continuous_map X euclideanreal f ⟹ f has_compact_support_on X ⟹ integrable N f" "complete_measure N"
by fastforce
have MN1: "complex_integrable N f" if f:"continuous_map X euclidean f" "f has_compact_support_on X" for f
using f unfolding complex_integrable_iff
by(auto intro!: MN(8))
have MN2: "φ (λx∈topspace X. f x) = (∫x. f x ∂N)"
if f:"continuous_map X euclidean f" "f has_compact_support_on X" for f
proof -
have "φ (λx∈topspace X. f x)
= complex_of_real (?φ' (λx∈topspace X. Re (f x))) + 𝗂 * complex_of_real (?φ' (λx∈topspace X. Im (f x)))"
using f by(intro pos_lin_functional_on_CX_complex_decompose[OF plf])
also have "... = complex_of_real (∫x. Re (f x) ∂N) + 𝗂 * complex_of_real (∫x. Im (f x) ∂N)"
proof -
have *:"?φ' (λx∈topspace X. Re (f x)) = (∫x. Re (f x) ∂N)"
using f by(intro MN(7)) auto
have **:"?φ' (λx∈topspace X. Im (f x)) = (∫x. Im (f x) ∂N)"
using f by(intro MN(7)) auto
show ?thesis
unfolding * ** ..
qed
also have "... = complex_of_real (Re (∫x. f x ∂N)) + 𝗂 * complex_of_real (Im (∫x. f x ∂N))"
by(simp add: integral_Im[OF MN1[OF that]] integral_Re[OF MN1[OF that]])
also have "... = (∫x. f x ∂N)"
using complex_eq by auto
finally show ?thesis .
qed
show ?thesis
apply(intro exI[where x=M] ex1I[where a=N] rep_measures_complex_unique[OF lh])
using MN(1-6,9) MN1 MN2
by auto
qed
subsection ‹ Other Forms of the Theorem ›
text ‹ In the case when the representation measure is on $X$.›
theorem Riesz_representation_real:
assumes lh:"locally_compact_space X" "Hausdorff_space X"
and "positive_linear_functional_on_CX X φ"
shows "∃!N. sets N = sets (borel_of X)
∧ (∀A∈sets N. emeasure N A = (⨅C∈{C. openin X C ∧ A ⊆ C}. emeasure N C))
∧ (∀A. openin X A ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))
∧ (∀A∈sets N. emeasure N A < ∞ ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))
∧ (∀K. compactin X K ⟶ emeasure N K < ∞)
∧ (∀f. continuous_map X euclideanreal f ⟶ f has_compact_support_on X ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))
∧ (∀f. continuous_map X euclideanreal f ⟶ f has_compact_support_on X ⟶ integrable N f)"
proof -
from Riesz_representation_real_complete[OF assms] obtain M N where MN:
"sets N = M" "subalgebra N (borel_of X)" "(∀A∈sets N. emeasure N A = ⨅ (emeasure N ` {C. openin X C ∧ A ⊆ C}))"
"(∀A. openin X A ⟶ emeasure N A = ⨆ (emeasure N ` {K. compactin X K ∧ K ⊆ A}))"
"(∀A∈sets N. emeasure N A < ∞ ⟶ emeasure N A = ⨆ (emeasure N ` {K. compactin X K ∧ K ⊆ A}))"
"(∀K. compactin X K ⟶ emeasure N K < ∞)"
"⋀f. continuous_map X euclideanreal f ⟹ f has_compact_support_on X ⟹ φ (λx∈topspace X. f x) = (∫x. f x ∂N)"
"⋀f. continuous_map X euclideanreal f ⟹ f has_compact_support_on X ⟹ integrable N f" "complete_measure N"
by fastforce
define N' where "N' ≡ restr_to_subalg N (borel_of X)"
have g1: "sets N' = sets (borel_of X)" (is ?g1)
and g2: "∀A∈sets N'. emeasure N' A = (⨅C∈{C. openin X C ∧ A ⊆ C}. emeasure N' C)" (is ?g2)
and g3: "∀A. openin X A ⟶ emeasure N' A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N' K)" (is ?g3)
and g4: "∀A∈sets N'. emeasure N' A < ∞ ⟶ emeasure N' A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N' K)" (is ?g4)
and g5: "∀K. compactin X K ⟶ emeasure N' K < ∞" (is ?g5)
and g6: "∀f. continuous_map X euclideanreal f ⟶ f has_compact_support_on X ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N')" (is ?g6)
and g7: "∀f. continuous_map X euclideanreal f ⟶ f has_compact_support_on X ⟶ integrable N' f" (is ?g7)
proof -
have sets_N': "sets N' = borel_of X"
using sets_restr_to_subalg[OF MN(2)] by(auto simp: N'_def)
have emeasure_N': "⋀A. A ∈ sets N' ⟹ emeasure N' A = emeasure N A"
by (simp add: MN(2) N'_def emeasure_restr_to_subalg sets_restr_to_subalg)
have setsN'[measurable]: "⋀A. openin X A ⟹ A ∈ sets N'" "⋀A. compactin X A ⟹ A ∈ sets N'"
by(auto simp: sets_N' dest: borel_of_open borel_of_closed[OF compactin_imp_closedin[OF lh(2)]])
have sets_N'_sets_N[simp]: "⋀A. A ∈ sets N' ⟹ A ∈ sets N"
using MN(2) sets_N' subalgebra_def by blast
show ?g1
by (simp add: MN(2) N'_def sets_restr_to_subalg)
show ?g2
using MN(3) by(auto simp: emeasure_N')
show ?g3
using MN(4) by(auto simp: emeasure_N')
show ?g4
using MN(5) by(auto simp: emeasure_N')
show ?g5
using MN(6) by(auto simp: emeasure_N')
show ?g6 ?g7
proof safe
fix f
assume f:"continuous_map X euclideanreal f" "f has_compact_support_on X"
then have [measurable]: "f ∈ borel_measurable (borel_of X)"
by (simp add: continuous_lower_semicontinuous lower_semicontinuous_map_measurable)
from MN(7,8) f show "φ (λx∈topspace X. f x) = (∫x. f x ∂N')" "integrable N' f"
by(auto simp: N'_def integral_subalgebra2[OF MN(2)] intro!: integrable_in_subalg[OF MN(2)])
qed
qed
have g8: "⋀L. sets L = sets (borel_of X) ⟹ subalgebra L (borel_of X)"
by (metis sets_eq_imp_space_eq subalgebra_def subset_refl)
show ?thesis
apply(intro ex1I[where a=N'] rep_measures_real_unique[OF lh])
using g1 g2 g3 g4 g5 g6 g7 g8 by auto
qed
theorem Riesz_representation_complex:
fixes X :: "'a topology" and φ :: "('a ⇒ complex) ⇒ complex"
assumes lh:"locally_compact_space X" "Hausdorff_space X"
and "positive_linear_functional_on_CX X φ"
shows "∃!N. sets N = sets (borel_of X)
∧ (∀A∈sets N. emeasure N A = (⨅C∈{C. openin X C ∧ A ⊆ C}. emeasure N C))
∧ (∀A. openin X A ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))
∧ (∀A∈sets N. emeasure N A < ∞ ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))
∧ (∀K. compactin X K ⟶ emeasure N K < ∞)
∧ (∀f. continuous_map X euclidean f ⟶ f has_compact_support_on X ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))
∧ (∀f. continuous_map X euclidean f ⟶ f has_compact_support_on X ⟶ complex_integrable N f)"
proof -
from Riesz_representation_complex_complete[OF assms] obtain M N where MN:
"sets N = M" "subalgebra N (borel_of X)" "(∀A∈sets N. emeasure N A = ⨅ (emeasure N ` {C. openin X C ∧ A ⊆ C}))"
"(∀A. openin X A ⟶ emeasure N A = ⨆ (emeasure N ` {K. compactin X K ∧ K ⊆ A}))"
"(∀A∈sets N. emeasure N A < ∞ ⟶ emeasure N A = ⨆ (emeasure N ` {K. compactin X K ∧ K ⊆ A}))"
"(∀K. compactin X K ⟶ emeasure N K < ∞)"
"⋀f. continuous_map X euclidean f ⟹ f has_compact_support_on X ⟹ φ (λx∈topspace X. f x) = (∫x. f x ∂N)"
"⋀f. continuous_map X euclidean f ⟹ f has_compact_support_on X ⟹ complex_integrable N f" "complete_measure N"
by fastforce
define N' where "N' ≡ restr_to_subalg N (borel_of X)"
have g1: "sets N' = sets (borel_of X)" (is ?g1)
and g2: "∀A∈sets N'. emeasure N' A = (⨅C∈{C. openin X C ∧ A ⊆ C}. emeasure N' C)" (is ?g2)
and g3: "∀A. openin X A ⟶ emeasure N' A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N' K)" (is ?g3)
and g4: "∀A∈sets N'. emeasure N' A < ∞ ⟶ emeasure N' A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N' K)" (is ?g4)
and g5: "∀K. compactin X K ⟶ emeasure N' K < ∞" (is ?g5)
and g6: "∀f. continuous_map X euclidean f ⟶ f has_compact_support_on X ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N')" (is ?g6)
and g7: "∀f. continuous_map X euclidean f ⟶ f has_compact_support_on X ⟶ complex_integrable N' f" (is ?g7)
proof -
have sets_N': "sets N' = borel_of X"
using sets_restr_to_subalg[OF MN(2)] by(auto simp: N'_def)
have emeasure_N': "⋀A. A ∈ sets N' ⟹ emeasure N' A = emeasure N A"
by (simp add: MN(2) N'_def emeasure_restr_to_subalg sets_restr_to_subalg)
have setsN'[measurable]: "⋀A. openin X A ⟹ A ∈ sets N'" "⋀A. compactin X A ⟹ A ∈ sets N'"
by(auto simp: sets_N' dest: borel_of_open borel_of_closed[OF compactin_imp_closedin[OF lh(2)]])
have sets_N'_sets_N[simp]: "⋀A. A ∈ sets N' ⟹ A ∈ sets N"
using MN(2) sets_N' subalgebra_def by blast
show ?g1
by (simp add: MN(2) N'_def sets_restr_to_subalg)
show ?g2
using MN(3) by(auto simp: emeasure_N')
show ?g3
using MN(4) by(auto simp: emeasure_N')
show ?g4
using MN(5) by(auto simp: emeasure_N')
show ?g5
using MN(6) by(auto simp: emeasure_N')
show ?g6 ?g7
proof safe
fix f :: "_ ⇒ complex"
assume f:"continuous_map X euclidean f" "f has_compact_support_on X"
then have [measurable]: "f ∈ borel_measurable (borel_of X)"
by (metis borel_of_euclidean continuous_map_measurable)
show "φ (λx∈topspace X. f x) = (∫x. f x ∂N')" "integrable N' f"
using MN(7,8) f by(auto simp: N'_def integral_subalgebra2[OF MN(2)] intro!: integrable_in_subalg[OF MN(2)])
qed
qed
have g8: "⋀L. sets L = sets (borel_of X) ⟹ subalgebra L (borel_of X)"
by (metis sets_eq_imp_space_eq subalgebra_def subset_refl)
show ?thesis
apply(intro ex1I[where a=N'] rep_measures_complex_unique[OF lh])
using g1 g2 g3 g4 g5 g6 g7 g8 by auto
qed
subsubsection ‹ Theorem for Compact Hausdorff Spaces ›
theorem Riesz_representation_real_compact_Hausdorff:
fixes X :: "'a topology" and φ :: "('a ⇒ real) ⇒ real"
assumes lh:"compact_space X" "Hausdorff_space X"
and "positive_linear_functional_on_CX X φ"
shows "∃!N. sets N = sets (borel_of X) ∧ finite_measure N
∧ (∀A∈sets N. emeasure N A = (⨅C∈{C. openin X C ∧ A ⊆ C}. emeasure N C))
∧ (∀A. openin X A ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))
∧ (∀A∈sets N. emeasure N A < ∞ ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))
∧ (∀K. compactin X K ⟶ emeasure N K < ∞)
∧ (∀f. continuous_map X euclideanreal f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))
∧ (∀f. continuous_map X euclideanreal f ⟶ integrable N f)"
proof -
have [simp]: "compactin X (X closure_of A)" for A
by (simp add: closedin_compact_space lh(1))
from Riesz_representation_real[OF compact_imp_locally_compact_space[OF lh(1)] assms(2,3)] obtain N where N:
"sets N = sets (borel_of X)"
"(∀A∈sets N. emeasure N A = (⨅C∈{C. openin X C ∧ A ⊆ C}. emeasure N C))"
"(∀A. openin X A ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))"
"(∀A∈sets N. emeasure N A < ∞ ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))"
"(∀K. compactin X K ⟶ emeasure N K < ∞)"
"(∀f. continuous_map X euclideanreal f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))"
"(∀f. continuous_map X euclideanreal f ⟶ integrable N f)"
by(fastforce simp: assms(1))
have space_N:"space N = topspace X"
by (simp add: N(1) sets_eq_imp_space_eq space_borel_of)
have fin:"finite_measure N"
using N(5)[rule_format,of "topspace X"] lh(1)
by(auto intro!: finite_measureI simp: space_N compact_space_def)
have 1:"⋀L. sets L = sets (borel_of X) ⟹ subalgebra L (borel_of X)"
by (metis sets_eq_imp_space_eq subalgebra_def subset_refl)
show ?thesis
by(intro ex1I[where a=N] rep_measures_real_unique[OF compact_imp_locally_compact_space[OF lh(1)] lh(2)])
(use N fin 1 in auto)
qed
theorem Riesz_representation_complex_compact_Hausdorff:
fixes X :: "'a topology" and φ :: "('a ⇒ complex) ⇒ complex"
assumes lh:"compact_space X" "Hausdorff_space X"
and "positive_linear_functional_on_CX X φ"
shows "∃!N. sets N = sets (borel_of X) ∧ finite_measure N
∧ (∀A∈sets N. emeasure N A = (⨅C∈{C. openin X C ∧ A ⊆ C}. emeasure N C))
∧ (∀A. openin X A ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))
∧ (∀A∈sets N. emeasure N A < ∞ ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))
∧ (∀K. compactin X K ⟶ emeasure N K < ∞)
∧ (∀f. continuous_map X euclidean f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))
∧ (∀f. continuous_map X euclidean f ⟶ complex_integrable N f)"
proof -
have [simp]: "compactin X (X closure_of A)" for A
by (simp add: closedin_compact_space lh(1))
from Riesz_representation_complex[OF compact_imp_locally_compact_space[OF lh(1)] assms(2,3)] obtain N where N:
"sets N = sets (borel_of X)"
"(∀A∈sets N. emeasure N A = (⨅C∈{C. openin X C ∧ A ⊆ C}. emeasure N C))"
"(∀A. openin X A ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))"
"(∀A∈sets N. emeasure N A < ∞ ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))"
"(∀K. compactin X K ⟶ emeasure N K < ∞)"
"(∀f. continuous_map X euclidean f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))"
"(∀f. continuous_map X euclidean f ⟶ complex_integrable N f)"
by (fastforce simp: lh(1))
have space_N:"space N = topspace X"
by (simp add: N(1) sets_eq_imp_space_eq space_borel_of)
have fin:"finite_measure N"
using N(5)[rule_format,of "topspace X"] lh(1)
by(auto intro!: finite_measureI simp: space_N compact_space_def)
have 1:"⋀L. sets L = sets (borel_of X) ⟹ subalgebra L (borel_of X)"
by (metis sets_eq_imp_space_eq subalgebra_def subset_refl)
show ?thesis
by(intro ex1I[where a=N] rep_measures_complex_unique[OF compact_imp_locally_compact_space[OF lh(1)] lh(2)])
(use N fin 1 in auto)
qed
subsubsection ‹ Theorem for Compact Metrizable Spaces›
theorem Riesz_representation_real_compact_metrizable:
fixes X :: "'a topology" and φ :: "('a ⇒ real) ⇒ real"
assumes lh:"compact_space X" "metrizable_space X"
and plf:"positive_linear_functional_on_CX X φ"
shows "∃!N. sets N = sets (borel_of X) ∧ finite_measure N
∧ (∀f. continuous_map X euclideanreal f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))"
proof -
have hd: "Hausdorff_space X"
by (simp add: lh(2) metrizable_imp_Hausdorff_space)
from Riesz_representation_real_compact_Hausdorff[OF lh(1) hd plf] obtain N where N:
"sets N = sets (borel_of X)" "finite_measure N"
"(∀A∈sets N. emeasure N A = (⨅C∈{C. openin X C ∧ A ⊆ C}. emeasure N C))"
"(∀A. openin X A ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))"
"(∀A∈sets N. emeasure N A < ∞ ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))"
"(∀K. compactin X K ⟶ emeasure N K < ∞)"
"(∀f. continuous_map X euclideanreal f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))"
"(∀f. continuous_map X euclideanreal f ⟶ integrable N f)"
by fastforce
then have tight_on_N:"tight_on X N"
using finite_measure.tight_on_compact_space lh(1) lh(2) by metis
show ?thesis
proof(safe intro!: ex1I[where a=N])
fix M
assume M:"sets M = sets (borel_of X)" "finite_measure M" "(∀f. continuous_map X euclideanreal f ⟶ φ (restrict f (topspace X)) = integral⇧L M f)"
then have "tight_on X M"
using finite_measure.tight_on_compact_space lh(1) lh(2) by blast
thus "M = N"
using N(7) M(3) by(auto intro!: finite_tight_measure_eq[OF compact_imp_locally_compact_space[OF lh(1)] lh(2)] tight_on_N)
qed(use N in auto)
qed
theorem Riesz_representation_real_compact_metrizable_le1:
fixes X :: "'a topology" and φ :: "('a ⇒ real) ⇒ real"
assumes lh:"compact_space X" "metrizable_space X"
and plf:"positive_linear_functional_on_CX X φ"
shows "∃!N. sets N = sets (borel_of X) ∧ finite_measure N
∧ (∀f. continuous_map X euclideanreal f ⟶ f ∈ topspace X → {0..1} ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))"
proof -
have hd: "Hausdorff_space X"
by (simp add: lh(2) metrizable_imp_Hausdorff_space)
from Riesz_representation_real_compact_Hausdorff[OF lh(1) hd plf] obtain N where N:
"sets N = sets (borel_of X)" "finite_measure N"
"(∀A∈sets N. emeasure N A = (⨅C∈{C. openin X C ∧ A ⊆ C}. emeasure N C))"
"(∀A. openin X A ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))"
"(∀A∈sets N. emeasure N A < ∞ ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))"
"(∀K. compactin X K ⟶ emeasure N K < ∞)"
"(∀f. continuous_map X euclideanreal f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))"
"(∀f. continuous_map X euclideanreal f ⟶ integrable N f)"
by fastforce
then have tight_on_N:"tight_on X N"
using finite_measure.tight_on_compact_space lh(1) lh(2) by metis
show ?thesis
proof(safe intro!: ex1I[where a=N])
fix M
assume M:"sets M = sets (borel_of X)" "finite_measure M" "(∀f. continuous_map X euclideanreal f ⟶ f ∈ topspace X → {0..1} ⟶ φ (restrict f (topspace X)) = integral⇧L M f)"
then have "tight_on X M"
using finite_measure.tight_on_compact_space lh(1) lh(2) by blast
thus "M = N"
using N(7) M(3) by(auto intro!: finite_tight_measure_eq[OF compact_imp_locally_compact_space[OF lh(1)] lh(2)] tight_on_N)
qed(use N in auto)
qed
theorem Riesz_representation_complex_compact_metrizable:
fixes X :: "'a topology" and φ :: "('a ⇒ complex) ⇒ complex"
assumes lh:"compact_space X" "metrizable_space X"
and plf:"positive_linear_functional_on_CX X φ"
shows "∃!N. sets N = sets (borel_of X) ∧ finite_measure N
∧ (∀f. continuous_map X euclidean f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))"
proof-
have hd: "Hausdorff_space X"
by (simp add: lh(2) metrizable_imp_Hausdorff_space)
from Riesz_representation_complex_compact_Hausdorff[OF lh(1) hd plf] obtain N where N:
"sets N = sets (borel_of X)" "finite_measure N"
"(∀A∈sets N. emeasure N A = (⨅C∈{C. openin X C ∧ A ⊆ C}. emeasure N C))"
"(∀A. openin X A ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))"
"(∀A∈sets N. emeasure N A < ∞ ⟶ emeasure N A = (⨆K∈{K. compactin X K ∧ K ⊆ A}. emeasure N K))"
"(∀K. compactin X K ⟶ emeasure N K < ∞)"
"(∀f. continuous_map X euclidean f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))"
"(∀f. continuous_map X euclidean f ⟶ complex_integrable N f)"
by fastforce
then have tight_on_N:"tight_on X N"
using finite_measure.tight_on_compact_space lh(1) lh(2) by metis
show ?thesis
proof(safe intro!: ex1I[where a=N])
fix M
assume M:"sets M = sets (borel_of X)" "finite_measure M" "(∀f. continuous_map X euclidean f ⟶ φ (restrict f (topspace X)) = (∫x. f x ∂M))"
then have tight_on_M:"tight_on X M"
using finite_measure.tight_on_compact_space lh(1) lh(2) by blast
have "(∫x. f x ∂N) = (∫x. f x ∂M)" if f:"continuous_map X euclideanreal f" for f
proof -
have "(∫x. f x ∂N) = Re (∫x. complex_of_real (f x) ∂N)"
by simp
also have "... = Re (φ (λx∈topspace X. complex_of_real (f x)))"
by(intro arg_cong[where f=Re] N(7)[rule_format,symmetric]) (simp add: f)
also have "... = Re (∫x. complex_of_real (f x) ∂M)"
by(intro arg_cong[where f=Re] M(3)[rule_format]) (simp add: f)
also have "... = (∫x. f x ∂M)"
by simp
finally show ?thesis .
qed
thus "M = N"
by(auto intro!: finite_tight_measure_eq[OF compact_imp_locally_compact_space[OF lh(1)] lh(2)] tight_on_N tight_on_M)
qed(use N in auto)
qed
theorem Riesz_representation_real_compact_metrizable_subprob:
fixes X :: "'a topology" and φ :: "('a ⇒ real) ⇒ real"
assumes lh:"compact_space X" "metrizable_space X"
and plf:"positive_linear_functional_on_CX X φ"
and le1: "φ (λx∈topspace X. 1) ≤ 1" and ne: "X ≠ trivial_topology"
shows "∃!N. sets N = sets (borel_of X) ∧ subprob_space N
∧ (∀f. continuous_map X euclideanreal f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))"
proof -
from Riesz_representation_real_compact_metrizable[OF assms(1-3)]
obtain N where N: "sets N = sets (borel_of X)" "finite_measure N" "(∀f. continuous_map X euclideanreal f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))"
"⋀M. sets M = sets (borel_of X) ⟹ finite_measure M ⟹ (∀f. continuous_map X euclideanreal f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂M)) ⟹ M = N"
by fastforce
then interpret finite_measure N
by blast
have subN:"subprob_space N"
proof
have "measure N (space N) = (∫x. 1 ∂N)"
by simp
also have "... = φ (λx∈topspace X. 1)"
by(intro N(3)[rule_format,symmetric]) simp
also have "... ≤ 1"
by fact
finally show "emeasure N (space N) ≤ 1"
by (simp add: emeasure_eq_measure)
next
show "space N ≠ {}"
using sets_eq_imp_space_eq[OF N(1)] ne by(auto simp: space_borel_of)
qed
show ?thesis
using N(4)[OF _ subprob_space.axioms(1)] subN N(1,3) by(auto intro!: ex1I[where a=N])
qed
theorem Riesz_representation_real_compact_metrizable_subprob_le1:
fixes X :: "'a topology" and φ :: "('a ⇒ real) ⇒ real"
assumes lh:"compact_space X" "metrizable_space X"
and plf:"positive_linear_functional_on_CX X φ"
and le1: "φ (λx∈topspace X. 1) ≤ 1" and ne: "X ≠ trivial_topology"
shows "∃!N. sets N = sets (borel_of X) ∧ subprob_space N
∧ (∀f. continuous_map X euclideanreal f ⟶ f ∈ topspace X → {0..1} ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))"
proof -
from Riesz_representation_real_compact_metrizable_le1[OF lh plf]
obtain N where N: "sets N = sets (borel_of X)" "finite_measure N" "(∀f. continuous_map X euclideanreal f ⟶ f ∈ topspace X → {0..1} ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))"
"⋀M. sets M = sets (borel_of X) ⟹ finite_measure M ⟹ (∀f. continuous_map X euclideanreal f ⟶ f ∈ topspace X → {0..1} ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂M)) ⟹ M = N"
by fastforce
then interpret finite_measure N
by blast
have subN:"subprob_space N"
proof
have "measure N (space N) = (∫x. 1 ∂N)"
by simp
also have "... = φ (λx∈topspace X. 1)"
by(intro N(3)[rule_format,symmetric]) simp_all
also have "... ≤ 1"
by fact
finally show "emeasure N (space N) ≤ 1"
by (simp add: emeasure_eq_measure)
next
show "space N ≠ {}"
using sets_eq_imp_space_eq[OF N(1)] ne by(auto simp: space_borel_of)
qed
show ?thesis
using N(4)[OF _ subprob_space.axioms(1)] subN N(1,3) by(auto intro!: ex1I[where a=N])
qed
theorem Riesz_representation_real_compact_metrizable_prob:
fixes X :: "'a topology" and φ :: "('a ⇒ real) ⇒ real"
assumes lh:"compact_space X" "metrizable_space X"
and plf:"positive_linear_functional_on_CX X φ"
and "φ (λx∈topspace X. 1) = 1"
shows "∃!N. sets N = sets (borel_of X) ∧ prob_space N
∧ (∀f. continuous_map X euclideanreal f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))"
proof -
from Riesz_representation_real_compact_metrizable[OF lh plf]
obtain N where N: "sets N = sets (borel_of X)" "finite_measure N" "(∀f. continuous_map X euclideanreal f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))"
"⋀M. sets M = sets (borel_of X) ⟹ finite_measure M ⟹ (∀f. continuous_map X euclideanreal f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂M)) ⟹ M = N"
by fastforce
then interpret finite_measure N
by blast
have probN:"prob_space N"
proof
have "measure N (space N) = (∫x. 1 ∂N)"
by simp
also have "... = φ (λx∈topspace X. 1)"
by(intro N(3)[rule_format,symmetric]) simp
also have "... = 1"
by fact
finally show "emeasure N (space N) = 1"
by (simp add: emeasure_eq_measure)
qed
show ?thesis
using N(4)[OF _ prob_space.finite_measure] probN N(1,3) by(auto intro!: ex1I[where a=N])
qed
theorem Riesz_representation_complex_compact_metrizable_subprob:
fixes X :: "'a topology" and φ :: "('a ⇒ complex) ⇒ complex"
assumes lh:"compact_space X" "metrizable_space X"
and plf:"positive_linear_functional_on_CX X φ"
and le1: "Re (φ (λx∈topspace X. 1)) ≤ 1" and ne: "X ≠ trivial_topology"
shows "∃!N. sets N = sets (borel_of X) ∧ subprob_space N
∧ (∀f. continuous_map X euclidean f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))"
proof -
from Riesz_representation_complex_compact_metrizable[OF lh plf]
obtain N where N: "sets N = sets (borel_of X)" "finite_measure N" "(∀f. continuous_map X euclidean f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))"
"⋀M. sets M = sets (borel_of X) ⟹ finite_measure M ⟹ (∀f. continuous_map X euclidean f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂M)) ⟹ M = N"
by fastforce
then interpret finite_measure N
by blast
have subN:"subprob_space N"
proof
have "measure N (space N) = (∫x. 1 ∂N)"
by simp
also have "... = Re (∫x. 1 ∂N)"
by simp
also have "... = Re (φ (λx∈topspace X. 1))"
by(intro arg_cong[where f=Re] N(3)[rule_format,symmetric]) simp
also have "... ≤ 1"
by fact
finally show "emeasure N (space N) ≤ 1"
by (simp add: emeasure_eq_measure)
next
show "space N ≠ {}"
using sets_eq_imp_space_eq[OF N(1)] ne by(auto simp: space_borel_of)
qed
show ?thesis
using N(4)[OF _ subprob_space.axioms(1)] subN N(1,3) by(auto intro!: ex1I[where a=N])
qed
theorem Riesz_representation_complex_compact_metrizable_prob:
fixes X :: "'a topology" and φ :: "('a ⇒ complex) ⇒ complex"
assumes lh:"compact_space X" "metrizable_space X"
and plf:"positive_linear_functional_on_CX X φ"
and "Re (φ (λx∈topspace X. 1)) = 1"
shows "∃!N. sets N = sets (borel_of X) ∧ prob_space N
∧ (∀f. continuous_map X euclidean f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))"
proof -
from Riesz_representation_complex_compact_metrizable[OF lh plf]
obtain N where N: "sets N = sets (borel_of X)" "finite_measure N" "(∀f. continuous_map X euclidean f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂N))"
"⋀M. sets M = sets (borel_of X) ⟹ finite_measure M ⟹ (∀f. continuous_map X euclidean f ⟶ φ (λx∈topspace X. f x) = (∫x. f x ∂M)) ⟹ M = N"
by fastforce
then interpret finite_measure N
by blast
have probN:"prob_space N"
proof
have "measure N (space N) = (∫x. 1 ∂N)"
by simp
also have "... = Re (∫x. 1 ∂N)"
by simp
also have "... = Re (φ (λx∈topspace X. 1))"
by(intro arg_cong[where f=Re] N(3)[rule_format,symmetric]) simp
also have "... = 1"
by fact
finally show "emeasure N (space N) = 1"
by (simp add: emeasure_eq_measure)
qed
show ?thesis
using N(4)[OF _ prob_space.finite_measure] probN N(1,3) by(auto intro!: ex1I[where a=N])
qed
end