Software Model Checking with Uninterpreted Functions