equal
deleted
inserted
replaced
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) |