Program Verification using Constraint Handling Rules and Array Constraint Generalizations