At the end of the documentation for Solve
, under "Possible Issues", you'll see that Solve
gives "generic solutions", which means they work for most (but not necessarily all) values of the variables and parameters.
For more on this, see "Generic and Non-Generic Cases" at https://reference.wolfram.com/language/tutorial/MathematicalFunctions.html#16439
To see the restrictions on the parameters and variables, you can use Solve
with the MaxExtraConditions->All
option:
Solve[x/(1 + Sqrt[1 - x])^2 == y, x, MaxExtraConditions -> All]

But there are some caveats:
1)MaxExtraConditions->All
will sometimes prevent Solve
from giving a solution; in that case, you can instead try Solve
with the Method->Reduce
option, or Reduce
; these will usually (but not always—see below) give a complete solution set with all the restrictions:
Solve[x Log[x] == a, x]
Solve[x Log[x] == a, x, MaxExtraConditions -> All]
Solve[x Log[x] == a, x, Method -> Reduce]
Reduce[x Log[x] == a, x]

2)While the documentation (Solve: Details and Options) says "With Method->Reduce, Solve uses only equivalent transformations and finds all solutions" [emphasis mine], this does not appear to always be the case. For instance, in the following, Method->Reduce
misses the solution $x = 1$ when $a = 0$. This solution is found by Solve
with the MaxExtraConditions->All
option, and by Reduce
:
Solve[a x^2 + x == 1, x]
Solve[a x^2 + x == 1, x, MaxExtraConditions -> All]
Solve[a x^2 + x == 1, x, Method -> Reduce]
Reduce[a x^2 + x == 1, x]

3)The above might appear to suggest that you're safest using Reduce
, since the documentation (Solve: Possible Issues) says "Reduce gives all solutions, including those that require equations on parameters" [emphasis mine]. However, here's an example in which Solve
returns a result, while Reduce
, and Solve
with MaxExtraCondtions->All
or Method->Reduce
do not:
Solve[5 == x*2^(x^2), x]
Solve[5 == x*2^(x^2), x, MaxExtraConditions -> All]
Solve[5 == x*2^(x^2), x, Method -> Reduce]
Reduce[5 == x*2^(x^2), x]

We can get the latter three to supply Solve's solution by imposing a domain restriction:
Solve[5 == x*2^(x^2) && x \[Element] Reals, x, MaxExtraConditions->All]
Solve[5 == x*2^(x^2) && x \[Element] Reals, x, Method -> Reduce]
Reduce[5 == x*2^(x^2) && x \[Element] Reals, x]

So perhaps it's more accurate to say "When Reduce
returns a result, it gives all solutions; but sometimes Solve
will return a result when Reduce
does not".
N.B.: The above were run on:

Reduce
? That usually gives more detailed information about these sort of things. Also,Solve
for me raises a warning message that the solution may not be completely general. $\endgroup$Solve
, under "Possible Issues", you'll see thatSolve
gives "generic solutions", which means they work for most (but not necessarily all) values of the vars and params [See "Generic and Non-Generic Cases" at reference.wolfram.com/language/tutorial/… ] To obtain a genl result that includes the restrictions on the vars and params, you can use eitherReduce
, orSolve
with theMethod->Reduce
option. [MaxExtraConditions->All
will give all restrictions on the displayed solns, but not necessarily all solns.] $\endgroup$