# Why doesn't Lambert function (ProductLog) simplify?

I have

Simplify[ProductLog[x*Exp[x]]]


By the definition of the Lambert function, this should be simply x. But Mathematica outputs this:

ProductLog[E^x x]


Adding assumptions (e.g., x is real) does not help. Why doesn't Mathematica treat ProductLog[x*Exp[x]] as x, just like it treats Log[Exp[x]] as x (if x is real)? Due to this I cannot, e.g., verify some solutions that DSolve gave for a certain ODE, and this solution contained ProductLog. When I substitute that solution into the original ODE, I do not get zero identically, but instead a cumbersome expression, even after applying FullSimplify.

The identity does not hold for x < -1:

Plot[ProductLog[x*Exp[x]], {x, -5, 5}] FullSimplify[ProductLog[x*Exp[x]], x >= -1]

x    (* result in 10.1.0 under Windows *)

PowerExpand[ProductLog[x Exp[x]]]


x

This assumes $x\ge0$

• ...PowerExpand[] is dangerous to use in general, unless you know what you're doing. Jun 18 '16 at 14:03
• @J.M. Sure, but according to the documentation center, this is the correct way to simplify ProductLog expressions. Jun 18 '16 at 14:06
• Yes, I'm merely giving the general reminder that one should not thoughtlessly use PowerExpand[], in the same manner that one should not thoughtlessly simplify $\log \exp x$ to $x$. Jun 18 '16 at 14:09

The equation

x Exp[x]  == y


has multiple solutions for x.

For example, evaluating

tab = Table[{x -> ProductLog[i, 1]}, {i, 0, 5}]
Exp[x] x /. tab
N[tab]


gives

{1, 1, 1, 1, 1, 1}


and

{{x -> 0.567143}, {x -> -1.53391 + 4.37519 I}, {x -> -2.40159 +
10.7763 I}, {x -> -2.85358 + 17.1135 I}, {x -> -3.16295 +
23.4277 I}, {x -> -3.39869 + 29.7313 I}}


Therefore, it would be potentially incorrect to simplify Simplify[ProductLog[x*Exp[x]]] to x