src/HOL/Multivariate_Analysis/Derivative.thy
changeset 61808 fc1556774cfe
parent 61762 d50b993b4fb9
child 61810 3c5040d5694a
equal deleted inserted replaced
61807:965769fe2b63 61808:fc1556774cfe
  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