assume(x, real), в данном случае, ничего не даст! Связано это с тем, что «диапазоны» возможных значений переменных solve описываются при вызове этой функции. Например, если мы хотели бы найти только положительные значения переменной x, то должны были задать
Код:
> solve({x^2+1=0, x>0}, x);
— и не получили бы ни одного решения. В похожем случае
Код:
> solve({x^2-1=0, x>0}, x);
1
получим одно решение.
При использовании solve, c помощью assume задаются свойства параметров. Сравните:
вызов
>solve(x^2+b=0, x); вернет

,
а вызов
> assume(b>0); solve(x^2+b=0, x); вернет

.