Formula-based Abstractions and Symbolic Execution for Model Checking Programs