src/HOL/Library/Inner_Product.thy
changeset 39198 f967a16dfcdd
parent 31590 776d6a4c1327
child 39302 d7728f65b353
equal deleted inserted replaced
39166:19efc2af3e6c 39198:f967a16dfcdd
   305   assumes "x \<noteq> 0" shows "GDERIV (\<lambda>x. norm x) x :> sgn x"
   305   assumes "x \<noteq> 0" shows "GDERIV (\<lambda>x. norm x) x :> sgn x"
   306 proof -
   306 proof -
   307   have 1: "FDERIV (\<lambda>x. inner x x) x :> (\<lambda>h. inner x h + inner h x)"
   307   have 1: "FDERIV (\<lambda>x. inner x x) x :> (\<lambda>h. inner x h + inner h x)"
   308     by (intro inner.FDERIV FDERIV_ident)
   308     by (intro inner.FDERIV FDERIV_ident)
   309   have 2: "(\<lambda>h. inner x h + inner h x) = (\<lambda>h. inner h (scaleR 2 x))"
   309   have 2: "(\<lambda>h. inner x h + inner h x) = (\<lambda>h. inner h (scaleR 2 x))"
   310     by (simp add: expand_fun_eq inner_commute)
   310     by (simp add: ext_iff inner_commute)
   311   have "0 < inner x x" using `x \<noteq> 0` by simp
   311   have "0 < inner x x" using `x \<noteq> 0` by simp
   312   then have 3: "DERIV sqrt (inner x x) :> (inverse (sqrt (inner x x)) / 2)"
   312   then have 3: "DERIV sqrt (inner x x) :> (inverse (sqrt (inner x x)) / 2)"
   313     by (rule DERIV_real_sqrt)
   313     by (rule DERIV_real_sqrt)
   314   have 4: "(inverse (sqrt (inner x x)) / 2) *\<^sub>R 2 *\<^sub>R x = sgn x"
   314   have 4: "(inverse (sqrt (inner x x)) / 2) *\<^sub>R 2 *\<^sub>R x = sgn x"
   315     by (simp add: sgn_div_norm norm_eq_sqrt_inner)
   315     by (simp add: sgn_div_norm norm_eq_sqrt_inner)