data refinement is used to convert an abstract data model (in terms of sets for example) into implementable data structures (such as arrays). operation refinement converts a specification of an operation on a system into an implementable program (e.g., a procedure). the postcondition can be strengthened and/or the precondition weakened in this process. this reduces any nondeterminism in the specification, typically to a completely deterministic implementation.