Content deleted Content added
m Data refinement links |
m structuring and spliting relevant parts |
||
Line 5:
In [[formal methods]], '''program refinement''' is the [[formal verification|verifiable]] transformation of an ''abstract'' (high-level) [[formal specification]] into a ''concrete'' (low-level) [[executable program]].{{fact|date=September 2010}} ''[[Stepwise refinement]]'' allows this process to be done in stages. Logically, refinement normally involves [[implication]], but there can be additional complications.
== Data refinement ==
''
For example, ''x'' ∈ {1,2,3} (where ''x'' is the value of the [[Variable (programming)|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 [[Element (mathematics)|member]] from the [[empty set]].
Line 11 ⟶ 12:
The term [[Reification (computer science)|reification]] is also sometimes used (coined by [[Cliff Jones (computer scientist)|Cliff Jones]]). [[Retrenchment (computing)|Retrenchment]] is an alternative technique when formal refinement is not possible. The opposite of refinement is [[Abstraction (computer science)|abstraction]].
== [[Algorithm]] refinement ==
[[Refinement calculus]] is a [[formal system]] (inspired from [[Hoare logic]]) that promotes program refinement. The [[FermaT Transformation System]] is an industrial-strength implementation of refinement. [[B-Method]] is also a [[Formal method]] that extends refinement calculus with a component language: it has been used in industrial developments.
|