generalized Lambert W



The to_poly_solver would benefit from having a generalized Lambert function; see

  http://functions.wolfram.com/ElementaryFunctions/ProductLog2/

The general simplifier does lambert_w(-log(2)/2) --> -log(2). Since this simplification
isn't valid for all branches, I can not claim that the solution set to x * exp(x) = z is 
x = lambert_w(z). (Whence bug ID: 3392909.)

We could define lambert_w(complex) = principle branch = lambert_w(0,complex). All other branches
would be lambert_w(integer, complex). I don't like that all that much. I favor the 
verbose: generalized_lambert_w(integer, complex). Alternatively the generalized Lambert
function could memoize: lambert_w[integer](complex). But do we really want Maxima to
save all values in doing something like plot2d(lambert[3](x), ....)?

Defining the generalized Lambert function would be a fun project--I might build a function
(with no numerical evaluation) that allows me to fix the to_poly_solver bug. 

Comments? Has anybody already defined a generalized Lambert function?

--Barton