src/HOL/Deriv.thy
changeset 75462 7448423e5dba
parent 75243 a2b8394ce1f1
child 76033 97b6daab0233
equal deleted inserted replaced
75461:4c3bc0d2568f 75462:7448423e5dba
   839   by (auto simp: has_field_derivative_def ac_simps)
   839   by (auto simp: has_field_derivative_def ac_simps)
   840 
   840 
   841 
   841 
   842 subsection \<open>Vector derivative\<close>
   842 subsection \<open>Vector derivative\<close>
   843 
   843 
   844 lemma has_field_derivative_iff_has_vector_derivative:
   844 text \<open>It's for real derivatives only, and not obviously generalisable to field derivatives\<close>
   845   "(f has_field_derivative y) F \<longleftrightarrow> (f has_vector_derivative y) F"
   845 lemma has_real_derivative_iff_has_vector_derivative:
       
   846   "(f has_real_derivative y) F \<longleftrightarrow> (f has_vector_derivative y) F"
   846   unfolding has_vector_derivative_def has_field_derivative_def real_scaleR_def mult_commute_abs ..
   847   unfolding has_vector_derivative_def has_field_derivative_def real_scaleR_def mult_commute_abs ..
   847 
   848 
   848 lemma has_field_derivative_subset:
   849 lemma has_field_derivative_subset:
   849   "(f has_field_derivative y) (at x within s) \<Longrightarrow> t \<subseteq> s \<Longrightarrow>
   850   "(f has_field_derivative y) (at x within s) \<Longrightarrow> t \<subseteq> s \<Longrightarrow>
   850     (f has_field_derivative y) (at x within t)"
   851     (f has_field_derivative y) (at x within t)"
   851   unfolding has_field_derivative_def by (rule has_derivative_subset)
   852   by (fact DERIV_subset)
   852 
   853 
   853 lemma has_vector_derivative_const[simp, derivative_intros]: "((\<lambda>x. c) has_vector_derivative 0) net"
   854 lemma has_vector_derivative_const[simp, derivative_intros]: "((\<lambda>x. c) has_vector_derivative 0) net"
   854   by (auto simp: has_vector_derivative_def)
   855   by (auto simp: has_vector_derivative_def)
   855 
   856 
   856 lemma has_vector_derivative_id[simp, derivative_intros]: "((\<lambda>x. x) has_vector_derivative 1) net"
   857 lemma has_vector_derivative_id[simp, derivative_intros]: "((\<lambda>x. x) has_vector_derivative 1) net"
   901   by (simp add: has_vector_derivative_def scaleR_right scaleR_left scaleR_right_distrib)
   902   by (simp add: has_vector_derivative_def scaleR_right scaleR_left scaleR_right_distrib)
   902 
   903 
   903 lemma has_vector_derivative_scaleR[derivative_intros]:
   904 lemma has_vector_derivative_scaleR[derivative_intros]:
   904   "(f has_field_derivative f') (at x within s) \<Longrightarrow> (g has_vector_derivative g') (at x within s) \<Longrightarrow>
   905   "(f has_field_derivative f') (at x within s) \<Longrightarrow> (g has_vector_derivative g') (at x within s) \<Longrightarrow>
   905     ((\<lambda>x. f x *\<^sub>R g x) has_vector_derivative (f x *\<^sub>R g' + f' *\<^sub>R g x)) (at x within s)"
   906     ((\<lambda>x. f x *\<^sub>R g x) has_vector_derivative (f x *\<^sub>R g' + f' *\<^sub>R g x)) (at x within s)"
   906   unfolding has_field_derivative_iff_has_vector_derivative
   907   unfolding has_real_derivative_iff_has_vector_derivative
   907   by (rule bounded_bilinear.has_vector_derivative[OF bounded_bilinear_scaleR])
   908   by (rule bounded_bilinear.has_vector_derivative[OF bounded_bilinear_scaleR])
   908 
   909 
   909 lemma has_vector_derivative_mult[derivative_intros]:
   910 lemma has_vector_derivative_mult[derivative_intros]:
   910   "(f has_vector_derivative f') (at x within s) \<Longrightarrow> (g has_vector_derivative g') (at x within s) \<Longrightarrow>
   911   "(f has_vector_derivative f') (at x within s) \<Longrightarrow> (g has_vector_derivative g') (at x within s) \<Longrightarrow>
   911     ((\<lambda>x. f x * g x) has_vector_derivative (f x * g' + f' * g x)) (at x within s)"
   912     ((\<lambda>x. f x * g x) has_vector_derivative (f x * g' + f' * g x)) (at x within s)"
   913   by (rule bounded_bilinear.has_vector_derivative[OF bounded_bilinear_mult])
   914   by (rule bounded_bilinear.has_vector_derivative[OF bounded_bilinear_mult])
   914 
   915 
   915 lemma has_vector_derivative_of_real[derivative_intros]:
   916 lemma has_vector_derivative_of_real[derivative_intros]:
   916   "(f has_field_derivative D) F \<Longrightarrow> ((\<lambda>x. of_real (f x)) has_vector_derivative (of_real D)) F"
   917   "(f has_field_derivative D) F \<Longrightarrow> ((\<lambda>x. of_real (f x)) has_vector_derivative (of_real D)) F"
   917   by (rule bounded_linear.has_vector_derivative[OF bounded_linear_of_real])
   918   by (rule bounded_linear.has_vector_derivative[OF bounded_linear_of_real])
   918     (simp add: has_field_derivative_iff_has_vector_derivative)
   919     (simp add: has_real_derivative_iff_has_vector_derivative)
   919 
   920 
   920 lemma has_vector_derivative_real_field:
   921 lemma has_vector_derivative_real_field:
   921   "(f has_field_derivative f') (at (of_real a)) \<Longrightarrow> ((\<lambda>x. f (of_real x)) has_vector_derivative f') (at a within s)"
   922   "(f has_field_derivative f') (at (of_real a)) \<Longrightarrow> ((\<lambda>x. f (of_real x)) has_vector_derivative f') (at a within s)"
   922   using has_derivative_compose[of of_real of_real a _ f "(*) f'"] 
   923   using has_derivative_compose[of of_real of_real a _ f "(*) f'"] 
   923   by (simp add: scaleR_conv_of_real ac_simps has_vector_derivative_def has_field_derivative_def)
   924   by (simp add: scaleR_conv_of_real ac_simps has_vector_derivative_def has_field_derivative_def)