A single complete rule for data refinement
P. H. B. Gardiner, Carroll C. Morgan · Formal Aspects of Computing · 1993
Abstract One module is said to be refined by a second if no program using the second module can detect that it is not using the first; in that case the second module can replace the first in any program. Data refinement transforms the interior pieces of a module — its state and consequentially its operations — in order to refine the module overall. A method for data refinement is sound if applying it actually does refine the module; a method is complete if any refinement of modules can be realised by its application. It has been known for some time that there are two methods of data refinement which are jointly complete for boundedly-nondeterministic programs: any refinement can be realised by applying one method then the other. Those two methods are formulated in terms of relations between states. Here it is shown that using predicate transformers, instead, allows a single complete method.