Program Refinement and Verification