src/HOL/Multivariate_Analysis/Derivative.thy
changeset 61204 3e491e34a62e
parent 61165 8020249565fb
child 61245 b77bf45efe21
equal deleted inserted replaced
61203:a8a8eca85801 61204:3e491e34a62e
  2275 lemma vector_derivative_diff_at [simp]:
  2275 lemma vector_derivative_diff_at [simp]:
  2276   "\<lbrakk>f differentiable at a; g differentiable at a\<rbrakk>
  2276   "\<lbrakk>f differentiable at a; g differentiable at a\<rbrakk>
  2277    \<Longrightarrow> vector_derivative (\<lambda>x. f x - g x) (at a) = vector_derivative f (at a) - vector_derivative g (at a)"
  2277    \<Longrightarrow> vector_derivative (\<lambda>x. f x - g x) (at a) = vector_derivative f (at a) - vector_derivative g (at a)"
  2278   by (simp add: vector_derivative_at has_vector_derivative_diff vector_derivative_works [symmetric])
  2278   by (simp add: vector_derivative_at has_vector_derivative_diff vector_derivative_works [symmetric])
  2279 
  2279 
       
  2280 lemma vector_derivative_mult_at [simp]:
       
  2281   fixes f g :: "real \<Rightarrow> 'a :: real_normed_algebra"
       
  2282   shows  "\<lbrakk>f differentiable at a; g differentiable at a\<rbrakk>
       
  2283    \<Longrightarrow> vector_derivative (\<lambda>x. f x * g x) (at a) = f a * vector_derivative g (at a) + vector_derivative f (at a) * g a"
       
  2284   by (simp add: vector_derivative_at has_vector_derivative_mult vector_derivative_works [symmetric])
       
  2285 
       
  2286 lemma vector_derivative_scaleR_at [simp]:
       
  2287     "\<lbrakk>f differentiable at a; g differentiable at a\<rbrakk>
       
  2288    \<Longrightarrow> vector_derivative (\<lambda>x. f x *\<^sub>R g x) (at a) = f a *\<^sub>R vector_derivative g (at a) + vector_derivative f (at a) *\<^sub>R g a"
       
  2289 apply (rule vector_derivative_at)
       
  2290 apply (rule has_vector_derivative_scaleR)
       
  2291 apply (auto simp: vector_derivative_works has_vector_derivative_def has_field_derivative_def mult_commute_abs)
       
  2292 done
       
  2293 
  2280 lemma vector_derivative_within_closed_interval:
  2294 lemma vector_derivative_within_closed_interval:
  2281   assumes "a < b"
  2295   assumes "a < b"
  2282     and "x \<in> cbox a b"
  2296     and "x \<in> cbox a b"
  2283   assumes "(f has_vector_derivative f') (at x within cbox a b)"
  2297   assumes "(f has_vector_derivative f') (at x within cbox a b)"
  2284   shows "vector_derivative f (at x within cbox a b) = f'"
  2298   shows "vector_derivative f (at x within cbox a b) = f'"
  2354 lemma vector_derivative_at_within_ivl:
  2368 lemma vector_derivative_at_within_ivl:
  2355   "(f has_vector_derivative f') (at x) \<Longrightarrow>
  2369   "(f has_vector_derivative f') (at x) \<Longrightarrow>
  2356     a \<le> x \<Longrightarrow> x \<le> b \<Longrightarrow> a<b \<Longrightarrow> vector_derivative f (at x within {a..b}) = f'"
  2370     a \<le> x \<Longrightarrow> x \<le> b \<Longrightarrow> a<b \<Longrightarrow> vector_derivative f (at x within {a..b}) = f'"
  2357 using has_vector_derivative_at_within vector_derivative_within_closed_interval by fastforce
  2371 using has_vector_derivative_at_within vector_derivative_within_closed_interval by fastforce
  2358 
  2372 
       
  2373 lemma vector_derivative_chain_at:
       
  2374   assumes "f differentiable at x" "(g differentiable at (f x))"
       
  2375   shows "vector_derivative (g \<circ> f) (at x) =
       
  2376          vector_derivative f (at x) *\<^sub>R vector_derivative g (at (f x))"
       
  2377 by (metis vector_diff_chain_at vector_derivative_at vector_derivative_works assms)
       
  2378 
  2359 end
  2379 end