Can someone shed some light on why

Assuming[{x ∈ Reals}, x (Sign[x]^2 - 1)] // FullSimplify


x (-1 + Sign[x]^2)

instead of zero please?
I know one can not expect FullSimplify to perform miracles but this example does seem pretty obvious.

  • $\begingroup$ It returns zero for me. Version 9.0. $\endgroup$
    – C. E.
    Nov 8, 2013 at 12:36
  • $\begingroup$ FullSimplify[x (Sign[x]^2 - 1), Assumptions -> {x \[Element] Reals}] gives 0 on version 9.0.1 $\endgroup$
    – cormullion
    Nov 8, 2013 at 12:37
  • $\begingroup$ ver@cormullion, I have a 64 bit student version on a 64 bit Win 8 machine and get what I posted. $\endgroup$
    – Freakalien
    Nov 8, 2013 at 12:50
  • $\begingroup$ Sorry @cormuullion, I posted my comment too quickly. Yes I also get zero for your modified example using Assumptions, but the question still remains for my original example. $\endgroup$
    – Freakalien
    Nov 8, 2013 at 12:54
  • $\begingroup$ @Anon, you get zero? Are you using a student version? $\endgroup$
    – Freakalien
    Nov 8, 2013 at 12:55

2 Answers 2


Your example evaluates

Assuming[{x ∈ Reals}, x (Sign[x]^2 - 1)]

BEFORE simplifying.

The correct way to inform your assumptions to FullSimplify[] is:

FullSimplify[x (Sign[x]^2 - 1), Assumptions -> {x ∈ Reals}] 

Which returns zero.


Assuming[{x ∈ Reals}, FullSimplify[x (Sign[x]^2 - 1)]]
  • 2
    $\begingroup$ Yep, makes sense. Cheers... $\endgroup$
    – Freakalien
    Nov 8, 2013 at 13:25

1. The first reason is that Sign[0] yields 0, so even assuming x ∈ Reals this expression:
Sign[x]^2 - 1 cannot be evaluated to 0.

2. The next problem is that Assuming[{x ∈ Reals}, x (Sign[x]^2 - 1)] is evaluated first, then the assumption imposed doesn't affect the simplification procedure since FullSimplify being outside Assuming doesn't know anything about x, thus the final result is correct.

Ad 1. In general Sign is a complex function, for a complex number $ z\neq0\;$ it is equal to z/Abs[z], e.g. see its graphs of the real and imaginary parts:

GraphicsRow[ Table[ Plot3D[ f @ Sign[x + I y], {x, -3, 3}, {y, -3, 3}, 
                            ColorFunction -> "DeepSeaColors",], {f, {Re, Im}}]]

enter image description here


One can impose global assumptions for a Mathematica session, e.g.

$Assumptions = z ∈ Reals;

then one can do as it was assumed in the question:

z (Sign[z]^2 - 1) // FullSimplify

On the other hand you can use assumption restricted to FullSimplify only:

FullSimplify[ x (Sign[x]^2 - 1), x ∈ Reals]

For more detailed discussion see e.g. this question How to specify assumptions before evaluation?.

  • $\begingroup$ I don't have the points to up vote your answer so thanks. $\endgroup$
    – Freakalien
    Nov 8, 2013 at 13:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.