How do static analysis algorithms decide variables be abstracted and when should variables be kept concrete? It seems variables should be kept concrete whenever possible.