Refinement is a generic term of computer science that encompasses various approaches for producing
correct computer programs and simplifying existing programs to enable their formal verification.
Program refinement
In
formal methods
In computer science, formal methods are mathematically rigorous techniques for the specification, development, and verification of software and hardware systems. The use of formal methods for software and hardware design is motivated by the exp ...
, program refinement is the
verifiable transformation of an ''abstract'' (high-level)
formal specification
In computer science, formal specifications are mathematically based techniques whose purpose are to help with the implementation of systems and software. They are used to describe a system, to analyze its behavior, and to aid in its design by veri ...
into a ''concrete'' (low-level)
executable program
In computing, executable code, an executable file, or an executable program, sometimes simply referred to as an executable or binary, causes a computer "to perform indicated tasks according to encoded instruction (computer science), instructi ...
. ''
Stepwise refinement'' allows this process to be done in stages. Logically, refinement normally involves
implication, but there can be additional complications.
The progressive just-in-time preparation of the product backlog (requirements list) in
agile software development
In software development, agile (sometimes written Agile) practices include requirements discovery and solutions improvement through the collaborative effort of self-organizing and cross-functional teams with their customer(s)/ end user(s), ...
approaches, such as
Scrum
Scrum may refer to:
Sport
* Scrum (rugby), a method of restarting play in rugby union and rugby league
** Scrum (rugby union), scrum in rugby union
* Scrum, an offensive melee formation in Japanese game Bo-taoshi
Media and popular culture
* ...
, is also commonly described as refinement.
Data refinement
Data refinement is used to convert an abstract data model (in terms of
sets for example) into implementable
data structures
In computer science, a data structure is a data organization, management, and storage format that is usually chosen for efficient access to data. More precisely, a data structure is a collection of data values, the relationships among them, a ...
(such as
arrays
An array is a systematic arrangement of similar objects, usually in rows and columns.
Things called an array include:
{{TOC right
Music
* In twelve-tone and serial composition, the presentation of simultaneous twelve-tone sets such that the ...
). Operation refinement converts a
specification
A specification often refers to a set of documented requirements to be satisfied by a material, design, product, or service. A specification is often a type of technical standard.
There are different types of technical or engineering specificat ...
of an operation on a system into an implementable
program (e.g., a
procedure
Procedure may refer to:
* Medical procedure
* Instructions or recipes, a set of commands that show how to achieve some result, such as to prepare or make something
* Procedure (business), specifying parts of a business process
* Standard operat ...
). The
postcondition In computer programming, a postcondition is a condition or predicate that must always be true just after the execution of some section of code or after an operation in a formal specification. Postconditions are sometimes tested using assertions wit ...
can be strengthened and/or the
precondition
In computer programming, a precondition is a condition or predicate that must always be true just prior to the execution of some section of code or before an operation in a formal specification.
If a precondition is violated, the effect of th ...
weakened in this process. This reduces any
nondeterminism in the specification, typically to a completely
deterministic
Determinism is a philosophical view, where all events are determined completely by previously existing causes. Deterministic theories throughout the history of philosophy have developed from diverse and sometimes overlapping motives and consi ...
implementation.
For example, ''x'' ∈ (where ''x'' is the value of the
variable ''x'' after an operation) could be refined to ''x'' ∈ , then ''x'' ∈ , 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
Member may refer to:
* Military jury, referred to as "Members" in military jargon
* Element (mathematics), an object that belongs to a mathematical set
* In object-oriented programming, a member of a class
** Field (computer science), entries in ...
from the
empty set
In mathematics, the empty set is the unique set having no elements; its size or cardinality (count of elements in a set) is zero. Some axiomatic set theories ensure that the empty set exists by including an axiom of empty set, while in oth ...
.
The term
reification
Reification may refer to:
Science and technology
* Reification (computer science), the creation of a data model
* Reification (knowledge representation), the representation of facts and/or assertions
* Reification (statistics), the use of an id ...
is also sometimes used (coined by
Cliff Jones).
Retrenchment
Retrenchment (french: retrenchment, an old form of ''retranchement'', from ''retrancher'', to cut down, cut short) is an act of cutting down or reduction, particularly of public expenditure.
Political usage
The word is familiar in its most general ...
is an alternative technique when formal refinement is not possible. The opposite of refinement is
abstraction
Abstraction in its main sense is a conceptual process wherein general rules and concepts are derived from the usage and classification of specific examples, literal ("real" or " concrete") signifiers, first principles, or other methods.
"An a ...
.
Refinement calculus
Refinement calculus is a
formal system
A formal system is an abstract structure used for inferring theorems from axioms according to a set of rules. These rules, which are used for carrying out the inference of theorems from axioms, are the logical calculus of the formal system.
A for ...
(inspired from
Hoare logic
Hoare logic (also known as Floyd–Hoare logic or Hoare rules) is a formal system with a set of logical rules for reasoning rigorously about the correctness of computer programs. It was proposed in 1969 by the British computer scientist and lo ...
) that promotes program refinement. The
FermaT Transformation System
Pierre de Fermat (; between 31 October and 6 December 1607 – 12 January 1665) was a French mathematician who is given credit for early developments that led to infinitesimal calculus, including his technique of adequality. In particular, he is ...
is an industrial-strength implementation of refinement. The
B-Method The B method is a method of software development based on B, a tool-supported formal method based on an abstract machine notation, used in the development of computer software.
Overview
B was originally developed in the 1980s by Jean-Raymond Abrial ...
is also a
formal method
In computer science, formal methods are mathematically rigorous techniques for the specification, development, and verification of software and hardware systems. The use of formal methods for software and hardware design is motivated by the expect ...
that extends refinement calculus with a component language: it has been used in industrial developments.
Refinement types
In
type theory
In mathematics, logic, and computer science, a type theory is the formal system, formal presentation of a specific type system, and in general type theory is the academic study of type systems. Some type theories serve as alternatives to set theor ...
, a refinement type
is a type endowed with a predicate which is assumed to hold for any element of the refined type. Refinement types can express
precondition
In computer programming, a precondition is a condition or predicate that must always be true just prior to the execution of some section of code or before an operation in a formal specification.
If a precondition is violated, the effect of th ...
s when used as
function argument
In computer programming, a parameter or a formal argument is a special kind of variable used in a subroutine to refer to one of the pieces of data provided as input to the subroutine. These pieces of data are the values of the arguments (often c ...
s or
postcondition In computer programming, a postcondition is a condition or predicate that must always be true just after the execution of some section of code or after an operation in a formal specification. Postconditions are sometimes tested using assertions wit ...
s when used as
return type
In computer programming, the return type (or result type) defines and constrains the data type of the value returned from a subroutine or method. In many programming languages (especially statically-typed programming languages such as C, C++ ...
s: 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 In object-oriented programming, behavioral subtyping is the principle that subclasses should satisfy the expectations of clients accessing subclass objects through references of superclass type, not just as regards syntactic safety (such as the abse ...
.
See also
*
Reification (computer science)
Reification is the process by which an abstract idea about a computer program is turned into an explicit data model or other object created in a programming language. A computable/addressable object—a resource—is created in a system as a prox ...
References
Formal methods terminology
Computer programming
{{soft-eng-stub