785 bounded_linear.tendsto [OF bounded_linear_of_real] |
785 bounded_linear.tendsto [OF bounded_linear_of_real] |
786 |
786 |
787 lemmas tendsto_scaleR [tendsto_intros] = |
787 lemmas tendsto_scaleR [tendsto_intros] = |
788 bounded_bilinear.tendsto [OF bounded_bilinear_scaleR] |
788 bounded_bilinear.tendsto [OF bounded_bilinear_scaleR] |
789 |
789 |
790 lemmas tendsto_mult [tendsto_intros] = |
790 |
791 bounded_bilinear.tendsto [OF bounded_bilinear_mult] |
791 text\<open>Analogous type class for multiplication\<close> |
|
792 class topological_semigroup_mult = topological_space + semigroup_mult + |
|
793 assumes tendsto_mult_Pair: "LIM x (nhds a \<times>\<^sub>F nhds b). fst x * snd x :> nhds (a * b)" |
|
794 |
|
795 instance real_normed_algebra < topological_semigroup_mult |
|
796 proof |
|
797 fix a b :: 'a |
|
798 show "((\<lambda>x. fst x * snd x) \<longlongrightarrow> a * b) (nhds a \<times>\<^sub>F nhds b)" |
|
799 unfolding nhds_prod[symmetric] |
|
800 using tendsto_fst[OF filterlim_ident, of "(a,b)"] tendsto_snd[OF filterlim_ident, of "(a,b)"] |
|
801 by (simp add: bounded_bilinear.tendsto [OF bounded_bilinear_mult]) |
|
802 qed |
|
803 |
|
804 lemma tendsto_mult [tendsto_intros]: |
|
805 fixes a b :: "'a::topological_semigroup_mult" |
|
806 shows "(f \<longlongrightarrow> a) F \<Longrightarrow> (g \<longlongrightarrow> b) F \<Longrightarrow> ((\<lambda>x. f x * g x) \<longlongrightarrow> a * b) F" |
|
807 using filterlim_compose[OF tendsto_mult_Pair, of "\<lambda>x. (f x, g x)" a b F] |
|
808 by (simp add: nhds_prod[symmetric] tendsto_Pair) |
792 |
809 |
793 lemma tendsto_mult_left: "(f \<longlongrightarrow> l) F \<Longrightarrow> ((\<lambda>x. c * (f x)) \<longlongrightarrow> c * l) F" |
810 lemma tendsto_mult_left: "(f \<longlongrightarrow> l) F \<Longrightarrow> ((\<lambda>x. c * (f x)) \<longlongrightarrow> c * l) F" |
794 for c :: "'a::real_normed_algebra" |
811 for c :: "'a::topological_semigroup_mult" |
795 by (rule tendsto_mult [OF tendsto_const]) |
812 by (rule tendsto_mult [OF tendsto_const]) |
796 |
813 |
797 lemma tendsto_mult_right: "(f \<longlongrightarrow> l) F \<Longrightarrow> ((\<lambda>x. (f x) * c) \<longlongrightarrow> l * c) F" |
814 lemma tendsto_mult_right: "(f \<longlongrightarrow> l) F \<Longrightarrow> ((\<lambda>x. (f x) * c) \<longlongrightarrow> l * c) F" |
798 for c :: "'a::real_normed_algebra" |
815 for c :: "'a::topological_semigroup_mult" |
799 by (rule tendsto_mult [OF _ tendsto_const]) |
816 by (rule tendsto_mult [OF _ tendsto_const]) |
800 |
817 |
801 lemmas continuous_of_real [continuous_intros] = |
818 lemmas continuous_of_real [continuous_intros] = |
802 bounded_linear.continuous [OF bounded_linear_of_real] |
819 bounded_linear.continuous [OF bounded_linear_of_real] |
803 |
820 |
2067 by (rule Suc) |
2084 by (rule Suc) |
2068 finally show ?case . |
2085 finally show ?case . |
2069 qed |
2086 qed |
2070 |
2087 |
2071 lemma convergent_add: |
2088 lemma convergent_add: |
2072 fixes X Y :: "nat \<Rightarrow> 'a::real_normed_vector" |
2089 fixes X Y :: "nat \<Rightarrow> 'a::topological_monoid_add" |
2073 assumes "convergent (\<lambda>n. X n)" |
2090 assumes "convergent (\<lambda>n. X n)" |
2074 and "convergent (\<lambda>n. Y n)" |
2091 and "convergent (\<lambda>n. Y n)" |
2075 shows "convergent (\<lambda>n. X n + Y n)" |
2092 shows "convergent (\<lambda>n. X n + Y n)" |
2076 using assms unfolding convergent_def by (blast intro: tendsto_add) |
2093 using assms unfolding convergent_def by (blast intro: tendsto_add) |
2077 |
2094 |
2078 lemma convergent_sum: |
2095 lemma convergent_sum: |
2079 fixes X :: "'a \<Rightarrow> nat \<Rightarrow> 'b::real_normed_vector" |
2096 fixes X :: "'a \<Rightarrow> nat \<Rightarrow> 'b::topological_comm_monoid_add" |
2080 shows "(\<And>i. i \<in> A \<Longrightarrow> convergent (\<lambda>n. X i n)) \<Longrightarrow> convergent (\<lambda>n. \<Sum>i\<in>A. X i n)" |
2097 shows "(\<And>i. i \<in> A \<Longrightarrow> convergent (\<lambda>n. X i n)) \<Longrightarrow> convergent (\<lambda>n. \<Sum>i\<in>A. X i n)" |
2081 by (induct A rule: infinite_finite_induct) (simp_all add: convergent_const convergent_add) |
2098 by (induct A rule: infinite_finite_induct) (simp_all add: convergent_const convergent_add) |
2082 |
2099 |
2083 lemma (in bounded_linear) convergent: |
2100 lemma (in bounded_linear) convergent: |
2084 assumes "convergent (\<lambda>n. X n)" |
2101 assumes "convergent (\<lambda>n. X n)" |
2089 assumes "convergent (\<lambda>n. X n)" |
2106 assumes "convergent (\<lambda>n. X n)" |
2090 and "convergent (\<lambda>n. Y n)" |
2107 and "convergent (\<lambda>n. Y n)" |
2091 shows "convergent (\<lambda>n. X n ** Y n)" |
2108 shows "convergent (\<lambda>n. X n ** Y n)" |
2092 using assms unfolding convergent_def by (blast intro: tendsto) |
2109 using assms unfolding convergent_def by (blast intro: tendsto) |
2093 |
2110 |
2094 lemma convergent_minus_iff: "convergent X \<longleftrightarrow> convergent (\<lambda>n. - X n)" |
2111 lemma convergent_minus_iff: |
2095 for X :: "nat \<Rightarrow> 'a::real_normed_vector" |
2112 fixes X :: "nat \<Rightarrow> 'a::topological_group_add" |
2096 apply (simp add: convergent_def) |
2113 shows "convergent X \<longleftrightarrow> convergent (\<lambda>n. - X n)" |
2097 apply (auto dest: tendsto_minus) |
2114 unfolding convergent_def by (force dest: tendsto_minus) |
2098 apply (drule tendsto_minus) |
|
2099 apply auto |
|
2100 done |
|
2101 |
2115 |
2102 lemma convergent_diff: |
2116 lemma convergent_diff: |
2103 fixes X Y :: "nat \<Rightarrow> 'a::real_normed_vector" |
2117 fixes X Y :: "nat \<Rightarrow> 'a::topological_group_add" |
2104 assumes "convergent (\<lambda>n. X n)" |
2118 assumes "convergent (\<lambda>n. X n)" |
2105 assumes "convergent (\<lambda>n. Y n)" |
2119 assumes "convergent (\<lambda>n. Y n)" |
2106 shows "convergent (\<lambda>n. X n - Y n)" |
2120 shows "convergent (\<lambda>n. X n - Y n)" |
2107 using assms unfolding convergent_def by (blast intro: tendsto_diff) |
2121 using assms unfolding convergent_def by (blast intro: tendsto_diff) |
2108 |
2122 |
2121 lemma convergent_of_real: |
2135 lemma convergent_of_real: |
2122 "convergent f \<Longrightarrow> convergent (\<lambda>n. of_real (f n) :: 'a::real_normed_algebra_1)" |
2136 "convergent f \<Longrightarrow> convergent (\<lambda>n. of_real (f n) :: 'a::real_normed_algebra_1)" |
2123 unfolding convergent_def by (blast intro!: tendsto_of_real) |
2137 unfolding convergent_def by (blast intro!: tendsto_of_real) |
2124 |
2138 |
2125 lemma convergent_add_const_iff: |
2139 lemma convergent_add_const_iff: |
2126 "convergent (\<lambda>n. c + f n :: 'a::real_normed_vector) \<longleftrightarrow> convergent f" |
2140 "convergent (\<lambda>n. c + f n :: 'a::topological_ab_group_add) \<longleftrightarrow> convergent f" |
2127 proof |
2141 proof |
2128 assume "convergent (\<lambda>n. c + f n)" |
2142 assume "convergent (\<lambda>n. c + f n)" |
2129 from convergent_diff[OF this convergent_const[of c]] show "convergent f" |
2143 from convergent_diff[OF this convergent_const[of c]] show "convergent f" |
2130 by simp |
2144 by simp |
2131 next |
2145 next |
2133 from convergent_add[OF convergent_const[of c] this] show "convergent (\<lambda>n. c + f n)" |
2147 from convergent_add[OF convergent_const[of c] this] show "convergent (\<lambda>n. c + f n)" |
2134 by simp |
2148 by simp |
2135 qed |
2149 qed |
2136 |
2150 |
2137 lemma convergent_add_const_right_iff: |
2151 lemma convergent_add_const_right_iff: |
2138 "convergent (\<lambda>n. f n + c :: 'a::real_normed_vector) \<longleftrightarrow> convergent f" |
2152 "convergent (\<lambda>n. f n + c :: 'a::topological_ab_group_add) \<longleftrightarrow> convergent f" |
2139 using convergent_add_const_iff[of c f] by (simp add: add_ac) |
2153 using convergent_add_const_iff[of c f] by (simp add: add_ac) |
2140 |
2154 |
2141 lemma convergent_diff_const_right_iff: |
2155 lemma convergent_diff_const_right_iff: |
2142 "convergent (\<lambda>n. f n - c :: 'a::real_normed_vector) \<longleftrightarrow> convergent f" |
2156 "convergent (\<lambda>n. f n - c :: 'a::topological_ab_group_add) \<longleftrightarrow> convergent f" |
2143 using convergent_add_const_right_iff[of f "-c"] by (simp add: add_ac) |
2157 using convergent_add_const_right_iff[of f "-c"] by (simp add: add_ac) |
2144 |
2158 |
2145 lemma convergent_mult: |
2159 lemma convergent_mult: |
2146 fixes X Y :: "nat \<Rightarrow> 'a::real_normed_field" |
2160 fixes X Y :: "nat \<Rightarrow> 'a::topological_semigroup_mult" |
2147 assumes "convergent (\<lambda>n. X n)" |
2161 assumes "convergent (\<lambda>n. X n)" |
2148 and "convergent (\<lambda>n. Y n)" |
2162 and "convergent (\<lambda>n. Y n)" |
2149 shows "convergent (\<lambda>n. X n * Y n)" |
2163 shows "convergent (\<lambda>n. X n * Y n)" |
2150 using assms unfolding convergent_def by (blast intro: tendsto_mult) |
2164 using assms unfolding convergent_def by (blast intro: tendsto_mult) |
2151 |
2165 |
2152 lemma convergent_mult_const_iff: |
2166 lemma convergent_mult_const_iff: |
2153 assumes "c \<noteq> 0" |
2167 assumes "c \<noteq> 0" |
2154 shows "convergent (\<lambda>n. c * f n :: 'a::real_normed_field) \<longleftrightarrow> convergent f" |
2168 shows "convergent (\<lambda>n. c * f n :: 'a::{field,topological_semigroup_mult}) \<longleftrightarrow> convergent f" |
2155 proof |
2169 proof |
2156 assume "convergent (\<lambda>n. c * f n)" |
2170 assume "convergent (\<lambda>n. c * f n)" |
2157 from assms convergent_mult[OF this convergent_const[of "inverse c"]] |
2171 from assms convergent_mult[OF this convergent_const[of "inverse c"]] |
2158 show "convergent f" by (simp add: field_simps) |
2172 show "convergent f" by (simp add: field_simps) |
2159 next |
2173 next |
2161 from convergent_mult[OF convergent_const[of c] this] show "convergent (\<lambda>n. c * f n)" |
2175 from convergent_mult[OF convergent_const[of c] this] show "convergent (\<lambda>n. c * f n)" |
2162 by simp |
2176 by simp |
2163 qed |
2177 qed |
2164 |
2178 |
2165 lemma convergent_mult_const_right_iff: |
2179 lemma convergent_mult_const_right_iff: |
2166 fixes c :: "'a::real_normed_field" |
2180 fixes c :: "'a::{field,topological_semigroup_mult}" |
2167 assumes "c \<noteq> 0" |
2181 assumes "c \<noteq> 0" |
2168 shows "convergent (\<lambda>n. f n * c) \<longleftrightarrow> convergent f" |
2182 shows "convergent (\<lambda>n. f n * c) \<longleftrightarrow> convergent f" |
2169 using convergent_mult_const_iff[OF assms, of f] by (simp add: mult_ac) |
2183 using convergent_mult_const_iff[OF assms, of f] by (simp add: mult_ac) |
2170 |
2184 |
2171 lemma convergent_imp_Bseq: "convergent f \<Longrightarrow> Bseq f" |
2185 lemma convergent_imp_Bseq: "convergent f \<Longrightarrow> Bseq f" |