better solver, handles stuff like x = (y<z) ; if (x) etc.