# Simplifying the derivative of $|x|$

## Context

In:= D[Abs[x], x] /. x -> 1

Out= Derivative[Abs]

In:= D[x, x] /. x -> 1

Out= 1


## Question

Why is Derivative[Abs][x] not simplifed to 1 when x -> 1?

$\mathrm{abs}(z)$ defined on the set of complex numbers $\mathbb{C}$ is not a holomorphic function because it violates the Cauchy-Riemann conditions, and the derivative is not well defined. $\mathrm{abs}(x)$ defined on the set of real numbers $\mathbb{R}$ is differentiable everywhere except at $x=0$.

Mathematica treats Abs[x] as a function defined on complex numbers and so will not simplify Abs'[x] when it occurs in expressions. However, you can force it to simplify by explicitly stating that the argument is real as follows:

FullSimplify[Abs'[x], x ∈ Reals]
(* Sign[x] *)


Also see this question for a very closely related problem.

• This should be corrected "...hence is differentiable nowhere." because it may be misleading. Obvoiusly it is directionally differentiable, but not holomorphic. Besides that it would deserve the enlightened tag. – Artes Jul 12 '12 at 12:02
• Alternatively, you could phrase this as "the derivative depends on the direction the limit is taken from". So, if you take the derivative along a direction $\theta$, you get $\left(\partial_z|z|\right)_{\theta}=|z|^{-1}\left(\Re(z)\cos(\theta)+\Im(z)\sin(\theta)\right)$(or something like that) – acl Jul 12 '12 at 12:03
• @Artes acl: Thanks, I've edited it :) – rm -rf Jul 12 '12 at 13:43
• It is correct to say that abs, as a complex function, is differentiable nowhere -- meaning that at each complex number it fails to have a derivative. (And then, a fortiori, of course it is nowhere holomorhpic.) The language "the derivative depends on the direction the limit is taken from" is misleading; there is nothing about "direction" involved in what "differentiable" means. – murray Jul 12 '12 at 15:10
• Thanks, I've removed that sentence. I think I'll stop with the mathematical language edits, because this could go on, but I'm not a mathematician and the basic idea and the solution is there. – rm -rf Jul 12 '12 at 15:31

FunctionExpand will resolve this (I think FullSimplify also calls FunctionExpand in the background):

FunctionExpand[Abs'[x], x \[Element] Reals]

(* ==> Sign[x] *)

Abs' // FunctionExpand

(* ==> 1 *)

• ComplexExpand works as well. – Michael E2 Apr 8 '15 at 12:35