subsection\<^marker>\<open>tag unimportant\<close> \<open>declaration of derivative/continuous/tendsto introduction rules for bounded linear functions\<close>
lift_definition minus_blinfun :: "'a \\<^sub>L 'b \ 'a \\<^sub>L 'b \ 'a \\<^sub>L 'b" is"\f g x. f x - g x" by (rule bounded_linear_sub)
definition dist_blinfun :: "'a \\<^sub>L 'b \ 'a \\<^sub>L 'b \ real" where"dist_blinfun a b = norm (a - b)"
definition [code del]: "(uniformity :: (('a \\<^sub>L 'b) \ ('a \\<^sub>L 'b)) filter) = (INF e\{0 <..}. principal {(x, y). dist x y < e})"
definition open_blinfun :: "('a \\<^sub>L 'b) set \ bool" where [code del]: "open_blinfun S = (\x\S. \\<^sub>F (x', y) in uniformity. x' = x \ y \S)"
lift_definition uminus_blinfun :: "'a \\<^sub>L 'b \ 'a \\<^sub>L 'b" is "\f x. - f x" by (rule bounded_linear_minus)
lift_definition\<^marker>\<open>tag important\<close> zero_blinfun :: "'a \<Rightarrow>\<^sub>L 'b" is "\<lambda>x. 0" by (rule bounded_linear_zero)
lift_definition\<^marker>\<open>tag important\<close> plus_blinfun :: "'a \<Rightarrow>\<^sub>L 'b \<Rightarrow> 'a \<Rightarrow>\<^sub>L 'b \<Rightarrow> 'a \<Rightarrow>\<^sub>L 'b" is"\f g x. f x + g x" by (metis bounded_linear_add)
lift_definition\<^marker>\<open>tag important\<close> scaleR_blinfun::"real \<Rightarrow> 'a \<Rightarrow>\<^sub>L 'b \<Rightarrow> 'a \<Rightarrow>\<^sub>L 'b" is "\<lambda>r f x. r *\<^sub>R f x" by (metis bounded_linear_compose bounded_linear_scaleR_right)
definition sgn_blinfun :: "'a \\<^sub>L 'b \ 'a \\<^sub>L 'b" where"sgn_blinfun x = scaleR (inverse (norm x)) x"
instance apply standard unfolding dist_blinfun_def open_blinfun_def sgn_blinfun_def uniformity_blinfun_def apply (rule refl | (transfer, force simp: onorm_triangle onorm_scaleR onorm_eq_0 algebra_simps))+ done
lemma norm_blinfun_eqI: assumes"n \ norm (blinfun_apply f x) / norm x" assumes"\x. norm (blinfun_apply f x) \ n * norm x" assumes"0 \ n" shows"norm f = n" by (auto simp: norm_blinfun_def
intro!: antisym onorm_bound assms order_trans[OF _ le_onorm]
bounded_linear_intros)
lemma norm_blinfun: "norm (blinfun_apply f x) \ norm f * norm x" by transfer (rule onorm)
lemma norm_blinfun_bound: "0 \ b \ (\x. norm (blinfun_apply f x) \ b * norm x) \ norm f \ b" by transfer (rule onorm_bound)
lemma bounded_bilinear_blinfun_apply[bounded_bilinear]: "bounded_bilinear blinfun_apply" proof fix f g::"'a \\<^sub>L 'b" and a b::'a and r::real show"(f + g) a = f a + g a""(r *\<^sub>R f) a = r *\<^sub>R f a" by (transfer, simp)+ interpret bounded_linear f for f::"'a \\<^sub>L 'b" by (auto intro!: bounded_linear_intros) show"f (a + b) = f a + f b""f (r *\<^sub>R a) = r *\<^sub>R f a" by (simp_all add: add scaleR) show"\K. \a b. norm (blinfun_apply a b) \ norm a * norm b * K" by (auto intro!: exI[where x=1] norm_blinfun) qed
interpretation blinfun: bounded_bilinear blinfun_apply by (rule bounded_bilinear_blinfun_apply)
instance blinfun :: (real_normed_vector, banach) banach proof fix X::"nat \ 'a \\<^sub>L 'b" assume"Cauchy X"
{ fix x::'a
{ fix x::'a assume"norm x \ 1" have"Cauchy (\n. X n x)" proof (rule CauchyI) fix e::real assume"0 < e" from CauchyD[OF \<open>Cauchy X\<close> \<open>0 < e\<close>] obtain M where M: "\m n. m \ M \ n \ M \ norm (X m - X n) < e" by auto show"\M. \m\M. \n\M. norm (X m x - X n x) < e" proof (safe intro!: exI[where x=M]) fix m n assume le: "M \ m" "M \ n" have"norm (X m x - X n x) = norm ((X m - X n) x)" by (simp add: blinfun.bilinear_simps) alsohave"\ \ norm (X m - X n) * norm x" by (rule norm_blinfun) alsohave"\ \ norm (X m - X n) * 1" using\<open>norm x \<le> 1\<close> norm_ge_zero by (rule mult_left_mono) alsohave"\ = norm (X m - X n)" by simp alsohave"\ < e" using le by fact finallyshow"norm (X m x - X n x) < e" . qed qed hence"convergent (\n. X n x)" by (metis Cauchy_convergent_iff)
} note convergent_norm1 = this
define y where"y = x /\<^sub>R norm x" have y: "norm y \ 1" and xy: "x = norm x *\<^sub>R y" by (simp_all add: y_def inverse_eq_divide) have"convergent (\n. norm x *\<^sub>R X n y)" by (intro bounded_bilinear.convergent[OF bounded_bilinear_scaleR] convergent_const
convergent_norm1 y) alsohave"(\n. norm x *\<^sub>R X n y) = (\n. X n x)" by (subst xy) (simp add: blinfun.bilinear_simps) finallyhave"convergent (\n. X n x)" .
} thenobtain v where v: "\x. (\n. X n x) \ v x" unfolding convergent_def by metis
have"Cauchy (\n. norm (X n))" proof (rule CauchyI) fix e::real assume"e > 0" from CauchyD[OF \<open>Cauchy X\<close> \<open>0 < e\<close>] obtain M where M: "\m n. m \ M \ n \ M \ norm (X m - X n) < e" by auto show"\M. \m\M. \n\M. norm (norm (X m) - norm (X n)) < e" proof (safe intro!: exI[where x=M]) fix m n assume mn: "m \ M" "n \ M" have"norm (norm (X m) - norm (X n)) \ norm (X m - X n)" by (metis norm_triangle_ineq3 real_norm_def) alsohave"\ < e" using mn by fact finallyshow"norm (norm (X m) - norm (X n)) < e" . qed qed thenobtain K where K: "(\n. norm (X n)) \ K" unfolding Cauchy_convergent_iff convergent_def by metis
have"bounded_linear v" proof fix x y and r::real from tendsto_add[OF v[of x] v [of y]] v[of "x + y", unfolded blinfun.bilinear_simps]
tendsto_scaleR[OF tendsto_const[of r] v[of x]] v[of "r *\<^sub>R x", unfolded blinfun.bilinear_simps] show"v (x + y) = v x + v y""v (r *\<^sub>R x) = r *\<^sub>R v x" by (metis (poly_guards_query) LIMSEQ_unique)+ show"\K. \x. norm (v x) \ norm x * K" proof (safe intro!: exI[where x=K]) fix x have"norm (v x) \ K * norm x" by (rule tendsto_le[OF _ tendsto_mult[OF K tendsto_const] tendsto_norm[OF v]])
(auto simp: norm_blinfun) thus"norm (v x) \ norm x * K" by (simp add: ac_simps) qed qed hence Bv: "\x. (\n. X n x) \ Blinfun v x" by (auto simp: bounded_linear_Blinfun_apply v)
have"X \ Blinfun v" proof (rule LIMSEQ_I) fix r::real assume"r > 0"
define r' where "r' = r / 2" have"0 < r'""r' < r"using\<open>r > 0\<close> by (simp_all add: r'_def) from CauchyD[OF \<open>Cauchy X\<close> \<open>r' > 0\<close>] obtain M where M: "\m n. m \ M \ n \ M \ norm (X m - X n) < r'" by metis show"\no. \n\no. norm (X n - Blinfun v) < r" proof (safe intro!: exI[where x=M]) fix n assume n: "M \ n" have"norm (X n - Blinfun v) \ r'" proof (rule norm_blinfun_bound) fix x have"eventually (\m. m \ M) sequentially" by (metis eventually_ge_at_top) hence ev_le: "eventually (\m. norm (X n x - X m x) \ r' * norm x) sequentially" proof eventually_elim case (elim m) have"norm (X n x - X m x) = norm ((X n - X m) x)" by (simp add: blinfun.bilinear_simps) alsohave"\ \ norm ((X n - X m)) * norm x" by (rule norm_blinfun) alsohave"\ \ r' * norm x" using M[OF n elim] by (simp add: mult_right_mono) finallyshow ?case . qed have tendsto_v: "(\m. norm (X n x - X m x)) \ norm (X n x - Blinfun v x)" by (auto intro!: tendsto_intros Bv) show"norm ((X n - Blinfun v) x) \ r' * norm x" by (auto intro!: tendsto_upperbound tendsto_v ev_le simp: blinfun.bilinear_simps) qed (simp add: \<open>0 < r'\<close> less_imp_le) thus"norm (X n - Blinfun v) < r" by (metis \<open>r' < r\<close> le_less_trans) qed qed thus"convergent X" by (rule convergentI) qed
lemma Zfun_sum: assumes"finite s" assumes f: "\i. i \ s \ Zfun (f i) F" shows"Zfun (\x. sum (\i. f i x) s) F" using assms by induct (auto intro!: Zfun_zero Zfun_add)
lemma tendsto_componentwise1: fixes a::"'a::euclidean_space \\<^sub>L 'b::real_normed_vector" and b::"'c \ 'a \\<^sub>L 'b" assumes"(\j. j \ Basis \ ((\n. b n j) \ a j) F)" shows"(b \ a) F" proof - have"\j. j \ Basis \ Zfun (\x. norm (b x j - a j)) F" using assms unfolding tendsto_Zfun_iff Zfun_norm_iff . hence"Zfun (\x. \j\Basis. norm (b x j - a j)) F" by (auto intro!: Zfun_sum) thus ?thesis unfolding tendsto_Zfun_iff by (rule Zfun_le)
(auto intro!: order_trans[OF norm_blinfun_euclidean_le] simp: blinfun.bilinear_simps) qed
lift_definition
blinfun_of_matrix::"('b::euclidean_space \ 'a::euclidean_space \ real) \ 'a \\<^sub>L 'b" is"\a x. \i\Basis. \j\Basis. ((x \ j) * a i j) *\<^sub>R i" by (intro bounded_linear_intros)
lemma blinfun_of_matrix_works: fixes f::"'a::euclidean_space \\<^sub>L 'b::euclidean_space" shows"blinfun_of_matrix (\i j. (f j) \ i) = f" proof (transfer, rule, rule euclidean_eqI) fix f::"'a \ 'b" and x::'a and b::'b assume "bounded_linear f" and b: "b \ Basis" theninterpret bounded_linear f by simp have"(\j\Basis. \i\Basis. (x \ i * (f i \ j)) *\<^sub>R j) \ b
= (\<Sum>j\<in>Basis. if j = b then (\<Sum>i\<in>Basis. (x \<bullet> i * (f i \<bullet> j))) else 0)" using b by (simp add: inner_sum_left inner_Basis if_distrib cong: if_cong) (simp add: sum.swap) alsohave"\ = (\i\Basis. (x \ i * (f i \ b)))" using b by (simp) alsohave"\ = f x \ b" by (metis (mono_tags, lifting) Linear_Algebra.linear_componentwise linear_axioms) finallyshow"(\j\Basis. \i\Basis. (x \ i * (f i \ j)) *\<^sub>R j) \ b = f x \ b" . qed
lemma blinfun_of_matrix_apply: "blinfun_of_matrix a x = (\i\Basis. \j\Basis. ((x \ j) * a i j) *\<^sub>R i)" by transfer simp
lemma blinfun_of_matrix_minus: "blinfun_of_matrix x - blinfun_of_matrix y = blinfun_of_matrix (x - y)" by transfer (auto simp: algebra_simps sum_subtractf)
lemma tendsto_blinfun_of_matrix: assumes"\i j. i \ Basis \ j \ Basis \ ((\n. b n i j) \ a i j) F" shows"((\n. blinfun_of_matrix (b n)) \ blinfun_of_matrix a) F" proof - have"\i j. i \ Basis \ j \ Basis \ Zfun (\x. norm (b x i j - a i j)) F" using assms unfolding tendsto_Zfun_iff Zfun_norm_iff . hence"Zfun (\x. (\i\Basis. \j\Basis. \b x i j - a i j\)) F" by (auto intro!: Zfun_sum) thus ?thesis unfolding tendsto_Zfun_iff blinfun_of_matrix_minus by (rule Zfun_le) (auto intro!: order_trans[OF norm_blinfun_of_matrix]) qed
lemma tendsto_componentwise: fixes a::"'a::euclidean_space \\<^sub>L 'b::euclidean_space" and b::"'c \ 'a \\<^sub>L 'b" shows"(\i j. i \ Basis \ j \ Basis \ ((\n. b n j \ i) \ a j \ i) F) \ (b \ a) F" apply (subst blinfun_of_matrix_works[of a, symmetric]) apply (subst blinfun_of_matrix_works[of "b x"for x, symmetric, abs_def]) by (rule tendsto_blinfun_of_matrix)
lemma
continuous_blinfun_componentwiseI: fixes f:: "'b::t2_space \ 'a::euclidean_space \\<^sub>L 'c::euclidean_space" assumes"\i j. i \ Basis \ j \ Basis \ continuous F (\x. (f x) j \ i)" shows"continuous F f" using assms by (auto simp: continuous_def intro!: tendsto_componentwise)
lemma
continuous_blinfun_componentwiseI1: fixes f:: "'b::t2_space \ 'a::euclidean_space \\<^sub>L 'c::real_normed_vector" assumes"\i. i \ Basis \ continuous F (\x. f x i)" shows"continuous F f" using assms by (auto simp: continuous_def intro!: tendsto_componentwise1)
lemma
continuous_on_blinfun_componentwise: fixes f:: "'d::t2_space \ 'e::euclidean_space \\<^sub>L 'f::real_normed_vector" assumes"\i. i \ Basis \ continuous_on s (\x. f x i)" shows"continuous_on s f" using assms by (auto intro!: continuous_at_imp_continuous_on intro!: tendsto_componentwise1
simp: continuous_on_eq_continuous_within continuous_def)
lemma continuous_blinfun_matrix: fixes f:: "'b::t2_space \ 'a::real_normed_vector \\<^sub>L 'c::real_inner" assumes"continuous F f" shows"continuous F (\x. (f x) j \ i)" by (rule bounded_linear.continuous[OF bounded_linear_blinfun_matrix assms])
lemma continuous_on_blinfun_matrix: fixes f::"'a::t2_space \ 'b::real_normed_vector \\<^sub>L 'c::real_inner" assumes"continuous_on S f" shows"continuous_on S (\x. (f x) j \ i)" using assms by (auto simp: continuous_on_eq_continuous_within continuous_blinfun_matrix)
lemma continuous_on_blinfun_of_matrix[continuous_intros]: assumes"\i j. i \ Basis \ j \ Basis \ continuous_on S (\s. g s i j)" shows"continuous_on S (\s. blinfun_of_matrix (g s))" using assms by (auto simp: continuous_on intro!: tendsto_blinfun_of_matrix)
lemma mult_if_delta: "(if P then (1::'a::comm_semiring_1) else 0) * q = (if P then q else 0)" by auto
lemma blinfun_euclidean_eqI: "(\i. i \ Basis \ blinfun_apply x i = blinfun_apply y i) \ x = y" apply (auto intro!: blinfun_eqI) apply (subst (2) euclidean_representation[symmetric, where'a='a]) apply (subst (1) euclidean_representation[symmetric, where'a='a]) apply (simp add: blinfun.bilinear_simps) done
lemma Blinfun_eq_matrix: "bounded_linear f \ Blinfun f = blinfun_of_matrix (\i j. f j \ i)" by (intro blinfun_euclidean_eqI)
(auto simp: blinfun_of_matrix_apply bounded_linear_Blinfun_apply inner_Basis if_distrib
if_distribR sum.delta' euclidean_representation
cong: if_cong)
text\<open>TODO: generalize (via \<open>compact_cball\<close>)?\<close> instance blinfun :: (euclidean_space, euclidean_space) heine_borel proof fix f :: "nat \ 'a \\<^sub>L 'b" assume f: "bounded (range f)" thenobtain l::"'a \\<^sub>L 'b" and r where r: "strict_mono r" and l: "\e>0. eventually (\n. \i\Basis. dist (f (r n) i) (l i) < e) sequentially" using compact_blinfun_lemma [OF f] by blast
{ fix e::real let ?d = "real_of_nat DIM('a) * real_of_nat DIM('b)" assume"e > 0" hence"e / ?d > 0"by (simp) with l have"eventually (\n. \i\Basis. dist (f (r n) i) (l i) < e / ?d) sequentially" by simp moreover
{ fix n assume n: "\i\Basis. dist (f (r n) i) (l i) < e / ?d" have"norm (f (r n) - l) = norm (blinfun_of_matrix (\i j. (f (r n) - l) j \ i))" unfolding blinfun_of_matrix_works .. alsonote norm_blinfun_of_matrix alsohave"(\i\Basis. \j\Basis. \(f (r n) - l) j \ i\) <
(\<Sum>i\<in>(Basis::'b set). e / real_of_nat DIM('b))" proof (rule sum_strict_mono) fix i::'b assume i: "i \ Basis" have"(\j::'a\Basis. \(f (r n) - l) j \ i\) < (\j::'a\Basis. e / ?d)" proof (rule sum_strict_mono) fix j::'a assume j: "j \ Basis" have"\(f (r n) - l) j \ i\ \ norm ((f (r n) - l) j)" by (simp add: Basis_le_norm i) alsohave"\ < e / ?d" using n i j by (auto simp: dist_norm blinfun.bilinear_simps) finallyshow"\(f (r n) - l) j \ i\ < e / ?d" by simp qed simp_all alsohave"\ \ e / real_of_nat DIM('b)" by simp finallyshow"(\j\Basis. \(f (r n) - l) j \ i\) < e / real_of_nat DIM('b)" by simp qed simp_all alsohave"\ \ e" by simp finallyhave"dist (f (r n)) l < e" by (auto simp: dist_norm)
} ultimatelyhave"eventually (\n. dist (f (r n)) l < e) sequentially" using eventually_elim2 by force
} thenhave *: "((f \ r) \ l) sequentially" unfolding o_def tendsto_iff by simp with r show"\l r. strict_mono r \ ((f \ r) \ l) sequentially" by auto qed
subsection\<^marker>\<open>tag unimportant\<close> \<open>concrete bounded linear functions\<close>
lemma transfer_bounded_bilinear_bounded_linearI: assumes"g = (\i x. (blinfun_apply (f i) x))" shows"bounded_bilinear g = bounded_linear f" proof assume"bounded_bilinear g" theninterpret bounded_bilinear f by (simp add: assms) show"bounded_linear f" proof (unfold_locales, safe intro!: blinfun_eqI) fix i show"f (x + y) i = (f x + f y) i""f (r *\<^sub>R x) i = (r *\<^sub>R f x) i" for r x y by (auto intro!: blinfun_eqI simp: blinfun.bilinear_simps) from _ nonneg_bounded show"\K. \x. norm (f x) \ norm x * K" by (rule ex_reg) (auto intro!: onorm_bound simp: norm_blinfun.rep_eq ac_simps) qed qed (auto simp: assms intro!: blinfun.comp)
lemma blinfun_compose_zero[simp]: "blinfun_compose 0 = (\_. 0)" "blinfun_compose x 0 = 0" by (auto simp: blinfun.bilinear_simps intro!: blinfun_eqI)
lemma blinfun_bij2: fixes f::"'a \\<^sub>L 'a::euclidean_space" assumes"f o\<^sub>L g = id_blinfun" shows"bij (blinfun_apply g)" proof (rule bijI) show"inj g" using assms by (metis blinfun_apply_id_blinfun blinfun_compose.rep_eq injI inj_on_imageI2) thenshow"surj g" using blinfun.bounded_linear_right bounded_linear_def linear_inj_imp_surj by blast qed
lemma blinfun_bij1: fixes f::"'a \\<^sub>L 'a::euclidean_space" assumes"f o\<^sub>L g = id_blinfun" shows"bij (blinfun_apply f)" proof (rule bijI) show"surj (blinfun_apply f)" by (metis assms blinfun_apply_blinfun_compose blinfun_apply_id_blinfun surjI) thenshow"inj (blinfun_apply f)" using blinfun.bounded_linear_right bounded_linear_def linear_surj_imp_inj by blast qed
lift_definition blinfun_inner_right::"'a::real_inner \ 'a \\<^sub>L real" is "(\)" by (rule bounded_linear_inner_right) declare blinfun_inner_right.rep_eq[simp]
lemma bounded_linear_blinfun_inner_right[bounded_linear]: "bounded_linear blinfun_inner_right" by transfer (rule bounded_bilinear_inner)
lift_definition blinfun_inner_left::"'a::real_inner \ 'a \\<^sub>L real" is "\x y. y \x" by (rule bounded_linear_inner_left) declare blinfun_inner_left.rep_eq[simp]
lemma bounded_linear_blinfun_inner_left[bounded_linear]: "bounded_linear blinfun_inner_left" by transfer (rule bounded_bilinear.flip[OF bounded_bilinear_inner])
lift_definition blinfun_scaleR_right::"real \ 'a \\<^sub>L 'a::real_normed_vector" is "(*\<^sub>R)" by (rule bounded_linear_scaleR_right) declare blinfun_scaleR_right.rep_eq[simp]
lemma bounded_linear_blinfun_scaleR_right[bounded_linear]: "bounded_linear blinfun_scaleR_right" by transfer (rule bounded_bilinear_scaleR)
lift_definition blinfun_scaleR_left::"'a::real_normed_vector \ real \\<^sub>L 'a" is "\x y. y *\<^sub>R x" by (rule bounded_linear_scaleR_left) lemmas [simp] = blinfun_scaleR_left.rep_eq
lemma bounded_linear_blinfun_scaleR_left[bounded_linear]: "bounded_linear blinfun_scaleR_left" by transfer (rule bounded_bilinear.flip[OF bounded_bilinear_scaleR])
lift_definition blinfun_mult_right::"'a \ 'a \\<^sub>L 'a::real_normed_algebra" is "(*)" by (rule bounded_linear_mult_right) declare blinfun_mult_right.rep_eq[simp]
lemma bounded_linear_blinfun_mult_right[bounded_linear]: "bounded_linear blinfun_mult_right" by transfer (rule bounded_bilinear_mult)
lift_definition blinfun_mult_left::"'a::real_normed_algebra \ 'a \\<^sub>L 'a" is "\x y. y * x" by (rule bounded_linear_mult_left) lemmas [simp] = blinfun_mult_left.rep_eq
lemma bounded_linear_blinfun_mult_left[bounded_linear]: "bounded_linear blinfun_mult_left" by transfer (rule bounded_bilinear.flip[OF bounded_bilinear_mult])
subsection \<open>The strong operator topology on continuous linear operators\<close>
text\<open>Let \<open>'a\<close> and \<open>'b\<close> be two normed real vector spaces. Then the space of linear continuous
operators from\<open>'a\<close> to \<open>'b\<close> has a canonical norm, and therefore a canonical corresponding topology
(the type classesinstantiation are given in\<^file>\<open>Bounded_Linear_Function.thy\<close>).
However, there is another topology on this space, the strong operator topology, where\<open>T\<^sub>n\<close> tends to \<open>T\<close> iff, for all \<open>x\<close> in \<open>'a\<close>, then \<open>T\<^sub>n x\<close> tends to \<open>T x\<close>. This is precisely the product topology where the target space is endowed with the norm topology. It is especially useful when \<open>'b\<close> is the set
of real numbers, since then this topology is compact.
We can not implement it using type classes as there is already a topology, but at least we
can define it as a topology.
Note that there is yet another (common and useful) topology on operator spaces, the weak operator
topology, defined analogously using the product topology, but where the target space is given the
weak-* topology, i.e., the pullback of the weak topology on the bidual of the space under the
canonical embedding of a space into its bidual. We do not define it there, although it could alsobe
defined analogously. \<close>
lemma strong_operator_topology_topspace: "topspace strong_operator_topology = UNIV" unfolding strong_operator_topology_def topspace_pullback_topology topspace_euclidean by auto
lemma strong_operator_topology_basis: fixes f::"('a::real_normed_vector \\<^sub>L'b::real_normed_vector)" and U::"'i \ 'b set" and x::"'i \ 'a" assumes"finite I""\i. i \ I \ open (U i)" shows"openin strong_operator_topology {f. \i\I. blinfun_apply f (x i) \ U i}" proof - have"open {g::('a\'b). \i\I. g (x i) \ U i}" by (rule product_topology_basis'[OF assms]) moreoverhave"{f. \i\I. blinfun_apply f (x i) \ U i}
= blinfun_apply-`{g::('a\'b). \i\I. g (x i) \ U i} \ UNIV" by auto ultimatelyshow ?thesis unfolding strong_operator_topology_def by (subst openin_pullback_topology) auto qed
lemma strong_operator_topology_continuous_evaluation: "continuous_map strong_operator_topology euclidean (\f. blinfun_apply f x)" proof - have"continuous_map strong_operator_topology euclidean ((\f. f x) o blinfun_apply)" unfolding strong_operator_topology_def apply (rule continuous_map_pullback) using continuous_on_product_coordinates by fastforce thenshow ?thesis unfolding comp_def by simp qed
lemma continuous_on_strong_operator_topo_iff_coordinatewise: "continuous_map T strong_operator_topology f \<longleftrightarrow> (\<forall>x. continuous_map T euclidean (\<lambda>y. blinfun_apply (f y) x))" proof (auto) fix x::"'b" assume"continuous_map T strong_operator_topology f" with continuous_map_compose[OF this strong_operator_topology_continuous_evaluation] have"continuous_map T euclidean ((\z. blinfun_apply z x) o f)" by simp thenshow"continuous_map T euclidean (\y. blinfun_apply (f y) x)" unfolding comp_def by auto next assume *: "\x. continuous_map T euclidean (\y. blinfun_apply (f y) x)" have"\i. continuous_map T euclidean (\x. blinfun_apply (f x) i)" using * unfolding comp_def by auto thenhave"continuous_map T euclidean (blinfun_apply o f)" unfolding o_def by (metis (no_types) continuous_map_componentwise_UNIV euclidean_product_topology) show"continuous_map T strong_operator_topology f" unfolding strong_operator_topology_def apply (rule continuous_map_pullback') by (auto simp add: \<open>continuous_map T euclidean (blinfun_apply o f)\<close>) qed
lemma strong_operator_topology_weaker_than_euclidean: "continuous_map euclidean strong_operator_topology (\f. f)" by (subst continuous_on_strong_operator_topo_iff_coordinatewise,
auto simp add: linear_continuous_on)
end
¤ Dauer der Verarbeitung: 0.16 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.