src/HOL/Deriv.thy
changeset 64272 f76b6dda2e56
parent 64267 b9a1486e79be
child 67149 e61557884799
equal deleted inserted replaced
64269:c939cc16b605 64272:f76b6dda2e56
   349 qed
   349 qed
   350 
   350 
   351 lemmas has_derivative_mult[simp, derivative_intros] = bounded_bilinear.FDERIV[OF bounded_bilinear_mult]
   351 lemmas has_derivative_mult[simp, derivative_intros] = bounded_bilinear.FDERIV[OF bounded_bilinear_mult]
   352 lemmas has_derivative_scaleR[simp, derivative_intros] = bounded_bilinear.FDERIV[OF bounded_bilinear_scaleR]
   352 lemmas has_derivative_scaleR[simp, derivative_intros] = bounded_bilinear.FDERIV[OF bounded_bilinear_scaleR]
   353 
   353 
   354 lemma has_derivative_setprod[simp, derivative_intros]:
   354 lemma has_derivative_prod[simp, derivative_intros]:
   355   fixes f :: "'i \<Rightarrow> 'a::real_normed_vector \<Rightarrow> 'b::real_normed_field"
   355   fixes f :: "'i \<Rightarrow> 'a::real_normed_vector \<Rightarrow> 'b::real_normed_field"
   356   shows "(\<And>i. i \<in> I \<Longrightarrow> (f i has_derivative f' i) (at x within s)) \<Longrightarrow>
   356   shows "(\<And>i. i \<in> I \<Longrightarrow> (f i has_derivative f' i) (at x within s)) \<Longrightarrow>
   357     ((\<lambda>x. \<Prod>i\<in>I. f i x) has_derivative (\<lambda>y. \<Sum>i\<in>I. f' i y * (\<Prod>j\<in>I - {i}. f j x))) (at x within s)"
   357     ((\<lambda>x. \<Prod>i\<in>I. f i x) has_derivative (\<lambda>y. \<Sum>i\<in>I. f' i y * (\<Prod>j\<in>I - {i}. f j x))) (at x within s)"
   358 proof (induct I rule: infinite_finite_induct)
   358 proof (induct I rule: infinite_finite_induct)
   359   case infinite
   359   case infinite
   375 
   375 
   376 lemma has_derivative_power[simp, derivative_intros]:
   376 lemma has_derivative_power[simp, derivative_intros]:
   377   fixes f :: "'a :: real_normed_vector \<Rightarrow> 'b :: real_normed_field"
   377   fixes f :: "'a :: real_normed_vector \<Rightarrow> 'b :: real_normed_field"
   378   assumes f: "(f has_derivative f') (at x within s)"
   378   assumes f: "(f has_derivative f') (at x within s)"
   379   shows "((\<lambda>x. f x^n) has_derivative (\<lambda>y. of_nat n * f' y * f x^(n - 1))) (at x within s)"
   379   shows "((\<lambda>x. f x^n) has_derivative (\<lambda>y. of_nat n * f' y * f x^(n - 1))) (at x within s)"
   380   using has_derivative_setprod[OF f, of "{..< n}"] by (simp add: setprod_constant ac_simps)
   380   using has_derivative_prod[OF f, of "{..< n}"] by (simp add: prod_constant ac_simps)
   381 
   381 
   382 lemma has_derivative_inverse':
   382 lemma has_derivative_inverse':
   383   fixes x :: "'a::real_normed_div_algebra"
   383   fixes x :: "'a::real_normed_div_algebra"
   384   assumes x: "x \<noteq> 0"
   384   assumes x: "x \<noteq> 0"
   385   shows "(inverse has_derivative (\<lambda>h. - (inverse x * h * inverse x))) (at x within s)"
   385   shows "(inverse has_derivative (\<lambda>h. - (inverse x * h * inverse x))) (at x within s)"