1583 qed (insert e, auto) |
1583 qed (insert e, auto) |
1584 qed |
1584 qed |
1585 |
1585 |
1586 text \<open>Hence the following eccentric variant of the inverse function theorem. |
1586 text \<open>Hence the following eccentric variant of the inverse function theorem. |
1587 This has no continuity assumptions, but we do need the inverse function. |
1587 This has no continuity assumptions, but we do need the inverse function. |
1588 We could put @{text "f' \<circ> g = I"} but this happens to fit with the minimal linear |
1588 We could put \<open>f' \<circ> g = I\<close> but this happens to fit with the minimal linear |
1589 algebra theory I've set up so far.\<close> |
1589 algebra theory I've set up so far.\<close> |
1590 |
1590 |
1591 (* move before left_inverse_linear in Euclidean_Space*) |
1591 (* move before left_inverse_linear in Euclidean_Space*) |
1592 |
1592 |
1593 lemma right_inverse_linear: |
1593 lemma right_inverse_linear: |
2262 assumes "x0 \<in> s" "summable (\<lambda>n. f n x0)" and x: "x \<in> s" |
2262 assumes "x0 \<in> s" "summable (\<lambda>n. f n x0)" and x: "x \<in> s" |
2263 shows "summable (\<lambda>n. f n x)" and "(\<lambda>x. \<Sum>n. f n x) differentiable (at x)" |
2263 shows "summable (\<lambda>n. f n x)" and "(\<lambda>x. \<Sum>n. f n x) differentiable (at x)" |
2264 proof - |
2264 proof - |
2265 from assms(4) obtain g' where A: "uniform_limit s (\<lambda>n x. \<Sum>i<n. f' i x) g' sequentially" |
2265 from assms(4) obtain g' where A: "uniform_limit s (\<lambda>n x. \<Sum>i<n. f' i x) g' sequentially" |
2266 unfolding uniformly_convergent_on_def by blast |
2266 unfolding uniformly_convergent_on_def by blast |
2267 from x and `open s` have s: "at x within s = at x" by (rule at_within_open) |
2267 from x and \<open>open s\<close> have s: "at x within s = at x" by (rule at_within_open) |
2268 have "\<exists>g. \<forall>x\<in>s. (\<lambda>n. f n x) sums g x \<and> (g has_field_derivative g' x) (at x within s)" |
2268 have "\<exists>g. \<forall>x\<in>s. (\<lambda>n. f n x) sums g x \<and> (g has_field_derivative g' x) (at x within s)" |
2269 by (intro has_field_derivative_series[of s f f' g' x0] assms A has_field_derivative_at_within) |
2269 by (intro has_field_derivative_series[of s f f' g' x0] assms A has_field_derivative_at_within) |
2270 then obtain g where g: "\<And>x. x \<in> s \<Longrightarrow> (\<lambda>n. f n x) sums g x" |
2270 then obtain g where g: "\<And>x. x \<in> s \<Longrightarrow> (\<lambda>n. f n x) sums g x" |
2271 "\<And>x. x \<in> s \<Longrightarrow> (g has_field_derivative g' x) (at x within s)" by blast |
2271 "\<And>x. x \<in> s \<Longrightarrow> (g has_field_derivative g' x) (at x within s)" by blast |
2272 from g[OF x] show "summable (\<lambda>n. f n x)" by (auto simp: summable_def) |
2272 from g[OF x] show "summable (\<lambda>n. f n x)" by (auto simp: summable_def) |
2273 from g(2)[OF x] have g': "(g has_derivative op * (g' x)) (at x)" |
2273 from g(2)[OF x] have g': "(g has_derivative op * (g' x)) (at x)" |
2274 by (simp add: has_field_derivative_def s) |
2274 by (simp add: has_field_derivative_def s) |
2275 have "((\<lambda>x. \<Sum>n. f n x) has_derivative op * (g' x)) (at x)" |
2275 have "((\<lambda>x. \<Sum>n. f n x) has_derivative op * (g' x)) (at x)" |
2276 by (rule has_derivative_transform_within_open[OF `open s` x _ g']) |
2276 by (rule has_derivative_transform_within_open[OF \<open>open s\<close> x _ g']) |
2277 (insert g, auto simp: sums_iff) |
2277 (insert g, auto simp: sums_iff) |
2278 thus "(\<lambda>x. \<Sum>n. f n x) differentiable (at x)" unfolding differentiable_def |
2278 thus "(\<lambda>x. \<Sum>n. f n x) differentiable (at x)" unfolding differentiable_def |
2279 by (auto simp: summable_def differentiable_def has_field_derivative_def) |
2279 by (auto simp: summable_def differentiable_def has_field_derivative_def) |
2280 qed |
2280 qed |
2281 |
2281 |
2284 assumes "convex s" "open s" |
2284 assumes "convex s" "open s" |
2285 assumes "\<And>n x. x \<in> s \<Longrightarrow> (f n has_field_derivative f' n x) (at x)" |
2285 assumes "\<And>n x. x \<in> s \<Longrightarrow> (f n has_field_derivative f' n x) (at x)" |
2286 assumes "uniformly_convergent_on s (\<lambda>n x. \<Sum>i<n. f' i x)" |
2286 assumes "uniformly_convergent_on s (\<lambda>n x. \<Sum>i<n. f' i x)" |
2287 assumes "x0 \<in> s" "summable (\<lambda>n. f n x0)" |
2287 assumes "x0 \<in> s" "summable (\<lambda>n. f n x0)" |
2288 shows "(\<lambda>x. \<Sum>n. f n x) differentiable (at x0)" |
2288 shows "(\<lambda>x. \<Sum>n. f n x) differentiable (at x0)" |
2289 using differentiable_series[OF assms, of x0] `x0 \<in> s` by blast+ |
2289 using differentiable_series[OF assms, of x0] \<open>x0 \<in> s\<close> by blast+ |
2290 |
2290 |
2291 text \<open>Considering derivative @{typ "real \<Rightarrow> 'b::real_normed_vector"} as a vector.\<close> |
2291 text \<open>Considering derivative @{typ "real \<Rightarrow> 'b::real_normed_vector"} as a vector.\<close> |
2292 |
2292 |
2293 definition "vector_derivative f net = (SOME f'. (f has_vector_derivative f') net)" |
2293 definition "vector_derivative f net = (SOME f'. (f has_vector_derivative f') net)" |
2294 |
2294 |