Formula-based abstractions and symbolic execution for model checking programs