 Program refinement

Data transformation/Source transformation Concepts metadata · data mapping
data transformation · model transf.Languages ATL · AWK · MOFM2T · QVT · TXL
XML languagesTechniques and transforms identity · synthesis · refinement Applications data migration · data conversion
ETL · program transformationApplication fields Data warehouse
Software engineering
Software languages: macro, preprocessing, templateThis article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed. (September 2010) In formal methods, program refinement is the verifiable transformation of an abstract (highlevel) formal specification into a concrete (lowlevel) executable program.^{[citation needed]} Stepwise refinement allows this process to be done in stages. Logically, refinement normally involves implication, but there can be additional complications.
Data refinement
Data refinement is used to convert an abstract data model (in terms of sets for example) into implementable data structures (such as arrays).^{[citation needed]} 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.
For example, x ∈ {1,2,3} (where x is the value of the variable x after an operation) could be refined to x ∈ {1,2}, then x ∈ {1}, and implemented as x := 1. Implementations of x := 2 and x := 3 would be equally acceptable in this case, using a different route for the refinement. However, we must be careful not to refine to x ∈ {} (equivalent to false) since this is unimplementable; it is impossible to select a member from the empty set.
The term reification is also sometimes used (coined by Cliff Jones). Retrenchment is an alternative technique when formal refinement is not possible. The opposite of refinement is abstraction.
Algorithm refinement
Refinement calculus is a formal system (inspired from Hoare logic) that promotes program refinement. The FermaT Transformation System is an industrialstrength implementation of refinement. BMethod is also a Formal method that extends refinement calculus with a component language: it has been used in industrial developments.
In type theory, a refinement type^{[1]}^{[2]}^{[3]} is a type endowed with a predicate which is assumed to hold for any element of the refined type. Refinement types can express preconditions when used as function arguments or postconditions when used as return types: for instance, the type of a function which accepts natural numbers and returns natural numbers greater than 5 may be written as . Refinement types are thus related to behavioral subtyping.
References
 ^ Freeman, T.; Pfenning, F. (1991). "Reﬁnement types for ML". Proceedings of the ACM Conference on Programming Language Design and Implementation. pp. 268–277.
 ^ Hayashi, S. (1993). "Logic of reﬁnement types". Proceedings of the Workshop on Types for Proofs and Programs. pp. 157–172.
 ^ Denney, E. (1998). "Reﬁnement types for speciﬁcation". Proceedings of the IFIP International Conference on Programming Concepts and Methods. 125. Chapman & Hall. pp. 148–166.
Categories: Software engineering stubs
 Formal methods terminology
 Computer programming
Wikimedia Foundation. 2010.