src/HOL/Deriv.thy
changeset 70707 125705f5965f
parent 70615 60483d0385d6
child 70999 5b753486c075
equal deleted inserted replaced
70706:374caac3d624 70707:125705f5965f
   104 lemmas has_derivative_mult_right [derivative_intros] =
   104 lemmas has_derivative_mult_right [derivative_intros] =
   105   bounded_linear.has_derivative [OF bounded_linear_mult_right]
   105   bounded_linear.has_derivative [OF bounded_linear_mult_right]
   106 
   106 
   107 lemmas has_derivative_mult_left [derivative_intros] =
   107 lemmas has_derivative_mult_left [derivative_intros] =
   108   bounded_linear.has_derivative [OF bounded_linear_mult_left]
   108   bounded_linear.has_derivative [OF bounded_linear_mult_left]
       
   109 
       
   110 lemmas has_derivative_of_real[derivative_intros, simp] = 
       
   111   bounded_linear.has_derivative[OF bounded_linear_of_real] 
   109 
   112 
   110 lemma has_derivative_add[simp, derivative_intros]:
   113 lemma has_derivative_add[simp, derivative_intros]:
   111   assumes f: "(f has_derivative f') F"
   114   assumes f: "(f has_derivative f') F"
   112     and g: "(g has_derivative g') F"
   115     and g: "(g has_derivative g') F"
   113   shows "((\<lambda>x. f x + g x) has_derivative (\<lambda>x. f' x + g' x)) F"
   116   shows "((\<lambda>x. f x + g x) has_derivative (\<lambda>x. f' x + g' x)) F"
   791 lemma has_vector_derivative_of_real[derivative_intros]:
   794 lemma has_vector_derivative_of_real[derivative_intros]:
   792   "(f has_field_derivative D) F \<Longrightarrow> ((\<lambda>x. of_real (f x)) has_vector_derivative (of_real D)) F"
   795   "(f has_field_derivative D) F \<Longrightarrow> ((\<lambda>x. of_real (f x)) has_vector_derivative (of_real D)) F"
   793   by (rule bounded_linear.has_vector_derivative[OF bounded_linear_of_real])
   796   by (rule bounded_linear.has_vector_derivative[OF bounded_linear_of_real])
   794     (simp add: has_field_derivative_iff_has_vector_derivative)
   797     (simp add: has_field_derivative_iff_has_vector_derivative)
   795 
   798 
       
   799 lemma has_vector_derivative_real_field:
       
   800   "(f has_field_derivative f') (at (of_real a)) \<Longrightarrow> ((\<lambda>x. f (of_real x)) has_vector_derivative f') (at a within s)"
       
   801   using has_derivative_compose[of of_real of_real a _ f "(*) f'"] 
       
   802   by (simp add: scaleR_conv_of_real ac_simps has_vector_derivative_def has_field_derivative_def)
       
   803 
   796 lemma has_vector_derivative_continuous:
   804 lemma has_vector_derivative_continuous:
   797   "(f has_vector_derivative D) (at x within s) \<Longrightarrow> continuous (at x within s) f"
   805   "(f has_vector_derivative D) (at x within s) \<Longrightarrow> continuous (at x within s) f"
   798   by (auto intro: has_derivative_continuous simp: has_vector_derivative_def)
   806   by (auto intro: has_derivative_continuous simp: has_vector_derivative_def)
   799 
   807 
   800 lemma continuous_on_vector_derivative:
   808 lemma continuous_on_vector_derivative:
  1082     by eventually_elim auto
  1090     by eventually_elim auto
  1083 qed
  1091 qed
  1084 
  1092 
  1085 lemmas has_derivative_floor[derivative_intros] =
  1093 lemmas has_derivative_floor[derivative_intros] =
  1086   floor_has_real_derivative[THEN DERIV_compose_FDERIV]
  1094   floor_has_real_derivative[THEN DERIV_compose_FDERIV]
       
  1095 
       
  1096 lemma continuous_floor:
       
  1097   fixes x::real
       
  1098   shows "x \<notin> \<int> \<Longrightarrow> continuous (at x) (real_of_int \<circ> floor)"
       
  1099   using floor_has_real_derivative [where f=id]
       
  1100   by (auto simp: o_def has_field_derivative_def intro: has_derivative_continuous)
       
  1101 
       
  1102 lemma continuous_frac:
       
  1103   fixes x::real
       
  1104   assumes "x \<notin> \<int>"
       
  1105   shows "continuous (at x) frac"
       
  1106 proof -
       
  1107   have "isCont (\<lambda>x. real_of_int \<lfloor>x\<rfloor>) x"
       
  1108     using continuous_floor [OF assms] by (simp add: o_def)
       
  1109   then have *: "continuous (at x) (\<lambda>x. x - real_of_int \<lfloor>x\<rfloor>)"
       
  1110     by (intro continuous_intros)
       
  1111   moreover have "\<forall>\<^sub>F x in nhds x. frac x = x - real_of_int \<lfloor>x\<rfloor>"
       
  1112     by (simp add: frac_def)
       
  1113   ultimately show ?thesis
       
  1114     by (simp add: LIM_imp_LIM frac_def isCont_def)
       
  1115 qed
  1087 
  1116 
  1088 text \<open>Caratheodory formulation of derivative at a point\<close>
  1117 text \<open>Caratheodory formulation of derivative at a point\<close>
  1089 
  1118 
  1090 lemma CARAT_DERIV:
  1119 lemma CARAT_DERIV:
  1091   "(DERIV f x :> l) \<longleftrightarrow> (\<exists>g. (\<forall>z. f z - f x = g z * (z - x)) \<and> isCont g x \<and> g x = l)"
  1120   "(DERIV f x :> l) \<longleftrightarrow> (\<exists>g. (\<forall>z. f z - f x = g z * (z - x)) \<and> isCont g x \<and> g x = l)"