# Why does Mathematica not seem to know that $i^x$ cannot be equal to $0$?

I am experiencing a curious behaviour of Simplify when handling expressions involving powers of $\mathbf{i}$, such as $\mathbf{i}^x$ where $x$ is unknown.

For example, when I take the equation 2^x a == 0, and I ask Mathematica to simplify it for me by calling Simplify[2^x a == 0], it rightly answers that the original equation is equivalent to a==0; hence clearly Mathematica's Simplify "knows" that taking a power of something non-zero cannot produce a zero. However, if I ask about I^x a == 0, then the result of Simplify is merely I^x a == 0, i.e. what I started with. This remains true after adding the assumption that $x$ is an integer or changing Simplify to FullSimplify (i.e. FullSimplify[I^( x) a == 0, Assumptions -> {Element[x, Integers]}]. It would be much more convenient if

This is obviously not a serious problem, but it can be a nuisance when I need to simplify a number of equations and would like to quickly see the result in a relatively uncluttered form. Also, I am curious about why things work the way they do, i.e. why complex powers are treated so much differently than real powers. Thank you for any solution to the problem, and/or explanation of this phenomenon. (A solution would be a way to "teach" Mathematica to eliminate factors like I^( x) in equations like I^( x)*(something)==0).

• Well, I think in your example the two problems are mathematically different. As $x$ goes to $-\infty$, $i^x$ certainly takes the values $1$ and $-1$ infinitely often (for $x$ congruent to $4$ and $2$ modulo $4$, respectively). After replacing $I$ by $2I$ in your example, the limit comes out as $0$. – Jakub Konieczny Oct 31 '13 at 0:15
• On V 9.01, I get Simplify[2^x a == 0] as 2^x a ==0 not a==0 ? screen shot !Mathematica graphics – Nasser Oct 31 '13 at 0:28
• @Nasser: I'm using V 8.0. I didn't realise this would differ between versions. – Jakub Konieczny Oct 31 '13 at 0:30
• Now in V11.3, I^(1000. I) underflows to 0. + 0. I, not that that should count, though. – Michael E2 Apr 10 '18 at 16:26

We can actually 'teach' Simplify using the option TransformationFunctions.

dropPows[Power[_?NumericQ, _] a_ == 0] := a == 0

Simplify[I^x a == 0, TransformationFunctions -> {Automatic, dropPows}]
(* a == 0 *)

• Thanks! It works as I was hoping it would. – Jakub Konieczny Oct 31 '13 at 0:12

Maybe this is a difference in versions (9.0.1), but when I do:

FullSimplify[2^x a == 0, x \[Element] Reals]
a == 0


Replacing 2 with I gives the same answer

FullSimplify[I^x a == 0, x \[Element] Reals]
a == 0

• The take-away lesson here, which I think is the important point, is that you need to Simplify that x is a number. Seems cleaner than a special transformation function. – Michael E2 Apr 10 '18 at 16:23

Counterexample, of arguable importance:

FunctionExpand[I^x] /. x -> DirectedInfinity[I]
(*  0  *)


Which shows why @bill s's idea of restricting x to a number might help simplify the expression. I don't know if FullSimplify was necessary back then, but in V11 the following works:

Simplify[I^x a == 0, x ∈ Complexes]
(*  a == 0  *)


While TransformationFunction is really the way to go, a quick way is to use replacement rules directly:

I^x a == 0 /. {Power[_?NumericQ, _] x_ == 0 :> x == 0}


a == 0