in formal methods, program refinement is the verifiable transformation of an "abstract" (high-level) formal specification into a "concrete" (low-level) executable program. "stepwise refinement" allows this process to be done in stages. logically, refinement normally involves implication, but there can be additional complications.