1 answer

I have now looked at the underlying code for solve. It turns out that if the first argument of solve is an equation or a list of just one equation the object function sage.symbolic.expression.Expression.solve is used. This explains why the output of

solve([sin(x)==0,sin(x)==0],x

and

solve([sin(x)==0],x)

may differ.
To force to get all solutions in the first case one can use

solve(sin(x)==0,x,to_poly_solve='force')

Another thing I've found out is that in the definition of the underlying maxima function solve is declared as
solve ([eqn_1, …, eqn_n], [x_1, …, x_n]) so the number of equations should match the number of variables.

If one reformulates the problem to

solve(-sin(x)*sin(x)==0,x,to_poly_solve='force')

all solutions will be displayed.

However I liked the behaviour of previous Versions of sage
That is: If solve could't find a solution the original equation was returned. That way it was clear that there may exist solutions sage could not found.