src/HOL/Multivariate_Analysis/Derivative.thy
changeset 56223 7696903b9e61
parent 56217 dc429a5b13c4
child 56226 29fd6bd9228e
--- a/src/HOL/Multivariate_Analysis/Derivative.thy	Wed Mar 19 23:13:45 2014 +0100
+++ b/src/HOL/Multivariate_Analysis/Derivative.thy	Wed Mar 19 20:50:24 2014 -0700
@@ -766,7 +766,7 @@
 text {* A nice generalization (see Havin's proof of 5.19 from Rudin's book). *}
 
 lemma mvt_general:
-  fixes f :: "real \<Rightarrow> 'a::euclidean_space"
+  fixes f :: "real \<Rightarrow> 'a::real_inner"
   assumes "a < b"
     and "continuous_on {a .. b} f"
     and "\<forall>x\<in>{a<..<b}. (f has_derivative f'(x)) (at x)"
@@ -813,7 +813,7 @@
 text {* Still more general bound theorem. *}
 
 lemma differentiable_bound:
-  fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
+  fixes f :: "'a::real_normed_vector \<Rightarrow> 'b::real_inner"
   assumes "convex s"
     and "\<forall>x\<in>s. (f has_derivative f' x) (at x within s)"
     and "\<forall>x\<in>s. onorm (f' x) \<le> B"
@@ -863,7 +863,7 @@
   proof -
     case goal1
     have "norm (f' x y) \<le> onorm (f' x) * norm y"
-      by (rule onorm(1)[OF derivative_is_linear[OF assms(2)[rule_format,OF goal1]]])
+      by (rule onorm[OF derivative_linear[OF assms(2)[rule_format,OF goal1]]])
     also have "\<dots> \<le> B * norm y"
       apply (rule mult_right_mono)
       using assms(3)[rule_format,OF goal1]
@@ -885,19 +885,6 @@
     by (auto simp add: norm_minus_commute)
 qed
 
-lemma differentiable_bound_real:
-  fixes f :: "real \<Rightarrow> real"
-  assumes "convex s"
-    and "\<forall>x\<in>s. (f has_derivative f' x) (at x within s)"
-    and "\<forall>x\<in>s. onorm (f' x) \<le> B"
-    and x: "x \<in> s"
-    and y: "y \<in> s"
-  shows "norm (f x - f y) \<le> B * norm (x - y)"
-  using differentiable_bound[of s f f' B x y]
-  unfolding Ball_def image_iff o_def
-  using assms
-  by auto
-
 text {* In particular. *}
 
 lemma has_derivative_zero_constant:
@@ -913,8 +900,8 @@
   proof -
     case goal1
     then show ?case
-      using differentiable_bound_real[OF assms(1-2), of 0 x y] and `x \<in> s`
-      unfolding onorm_const
+      using differentiable_bound[OF assms(1-2), of 0 x y] and `x \<in> s`
+      unfolding onorm_zero
       by auto
   qed
   then show ?thesis
@@ -1526,7 +1513,7 @@
     apply auto
     done
   then have *: "0 < onorm g'"
-    unfolding onorm_pos_lt[OF assms(3)[unfolded linear_linear]]
+    unfolding onorm_pos_lt[OF assms(3)]
     by fastforce
   def k \<equiv> "1 / onorm g' / 2"
   have *: "k > 0"
@@ -1590,14 +1577,13 @@
         have "onorm (\<lambda>v. v - g' (f' u v)) \<le> onorm g' * onorm (\<lambda>w. f' a w - f' u w)"
           unfolding *
           apply (rule onorm_compose)
-          unfolding linear_conv_bounded_linear
           apply (rule assms(3) **)+
           done
         also have "\<dots> \<le> onorm g' * k"
           apply (rule mult_left_mono)
           using d1(2)[of u]
-          using onorm_neg[OF **(1)[unfolded linear_linear]]
-          using d and u and onorm_pos_le[OF assms(3)[unfolded linear_linear]]
+          using onorm_neg[where f="\<lambda>x. f' u x - f' a x"]
+          using d and u and onorm_pos_le[OF assms(3)]
           apply (auto simp add: algebra_simps)
           done
         also have "\<dots> \<le> 1 / 2"
@@ -1652,10 +1638,7 @@
     }
     then show "onorm (\<lambda>h. f' m x h - f' n x h) \<le> 2 * e"
       apply -
-      apply (rule onorm(2))
-      apply (rule linear_compose_sub)
-      unfolding linear_conv_bounded_linear
-      using assms(2)[rule_format,OF `x \<in> s`, THEN derivative_linear]
+      apply (rule onorm_le)
       apply auto
       done
   qed