<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Refinement_%28computing%29</id>
	<title>Refinement (computing) - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Refinement_%28computing%29"/>
	<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Refinement_(computing)&amp;action=history"/>
	<updated>2026-10-26T21:19:46Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Refinement_(computing)&amp;diff=1227175&amp;oldid=prev</id>
		<title>imported&gt;Jlwoodwa: WP:STUBSPACING</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Refinement_(computing)&amp;diff=1227175&amp;oldid=prev"/>
		<updated>2024-03-26T20:07:01Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/wiki143/index.php?title=WP:STUBSPACING&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:STUBSPACING (page does not exist)&quot;&gt;WP:STUBSPACING&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{refimprove|date=September 2010}}&lt;br /&gt;
{{Data transformation}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Refinement&amp;#039;&amp;#039;&amp;#039; is a generic term of computer science that encompasses various approaches for producing [[correctness (computer science)|correct]] computer programs and simplifying existing programs to enable their formal verification.&lt;br /&gt;
&lt;br /&gt;
==Program refinement==&lt;br /&gt;
In [[formal methods]], &amp;#039;&amp;#039;&amp;#039;program refinement&amp;#039;&amp;#039;&amp;#039; is the [[formal verification|verifiable]] transformation of an &amp;#039;&amp;#039;abstract&amp;#039;&amp;#039; (high-level) [[formal specification]] into a &amp;#039;&amp;#039;concrete&amp;#039;&amp;#039; (low-level) [[executable program]].{{citation needed|date=September 2010}} &amp;#039;&amp;#039;[[Stepwise refinement]]&amp;#039;&amp;#039; allows this process to be done in stages. Logically, refinement normally involves [[logical consequence|implication]], but there can be additional complications.&lt;br /&gt;
&lt;br /&gt;
The progressive just-in-time preparation of the product backlog (requirements list) in [[agile software development]] approaches, such as [[Scrum (software development)|Scrum]], is also commonly described as refinement.&amp;lt;ref&amp;gt;{{cite book|last=Cho|first=L|title=2009 Agile Conference|chapter=Adopting an Agile Culture a User Experience Team&amp;#039;s Journey|year=2009|doi=10.1109/AGILE.2009.76|isbn=978-0-7695-3768-9|pages=416–421|s2cid=38580329}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data refinement==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data refinement&amp;#039;&amp;#039;&amp;#039;&amp;lt;!-- REDIRECTs HERE--&amp;gt; is used to convert an abstract data model (in terms of [[set (mathematics)|set]]s for example) into implementable [[data structures]] (such as [[Array data structure|arrays]]).{{citation needed|date=September 2010}} Operation refinement converts a [[specification]] of an operation on a system into an implementable [[computer program|program]] (e.g., a [[Procedure (computer science)|procedure]]). The [[postcondition]] can be strengthened and/or the [[precondition]] weakened in this process. This reduces any [[Nondeterministic algorithm|nondeterminism]] in the specification, typically to a completely [[deterministic]] implementation.&lt;br /&gt;
&lt;br /&gt;
For example, &amp;#039;&amp;#039;x&amp;#039;&amp;#039; ∈ {1,2,3} (where &amp;#039;&amp;#039;x&amp;#039;&amp;#039; is the value of the [[Variable (programming)|variable]] &amp;#039;&amp;#039;x&amp;#039;&amp;#039; after an operation) could be refined to &amp;#039;&amp;#039;x&amp;#039;&amp;#039; ∈ {1,2}, then &amp;#039;&amp;#039;x&amp;#039;&amp;#039; ∈ {1}, and implemented as &amp;#039;&amp;#039;x&amp;#039;&amp;#039; := 1. Implementations of &amp;#039;&amp;#039;x&amp;#039;&amp;#039; := 2 and &amp;#039;&amp;#039;x&amp;#039;&amp;#039; := 3 would be equally acceptable in this case, using a different route for the refinement. However, we must be careful not to refine to &amp;#039;&amp;#039;x&amp;#039;&amp;#039; ∈ {} (equivalent to &amp;#039;&amp;#039;false&amp;#039;&amp;#039;) since this is unimplementable; it is impossible to select a [[Element (mathematics)|member]] from the [[empty set]].&lt;br /&gt;
&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
==Refinement calculus==&lt;br /&gt;
[[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. The [[B-Method]] is also a [[formal method]] that extends refinement calculus with a component language: it has been used in industrial developments.&lt;br /&gt;
&lt;br /&gt;
==Refinement types==&lt;br /&gt;
{{Main|Refinement type}}&lt;br /&gt;
&lt;br /&gt;
In [[type theory]], a &amp;#039;&amp;#039;&amp;#039;refinement type&amp;#039;&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;{{cite conference|first1=T.|last1=Freeman|first2=F.|last2=Pfenning|url=https://www.cs.cmu.edu/~fp/papers/pldi91.pdf|doi=10.1145/113445.113468 |title=Refinement types for ML|book-title=Proceedings of the ACM Conference on Programming Language Design and Implementation|pages=268–277|year=1991}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite conference|first=S.|last=Hayashi|title=Logic of refinement types|citeseerx = 10.1.1.38.6346|doi=10.1007/3-540-58085-9_74|book-title=Proceedings of the Workshop on Types for Proofs and Programs|pages=157–172|year=1993}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite conference|first=E.|last=Denney|citeseerx = 10.1.1.22.4988|title=Refinement types for specification|book-title=Proceedings of the IFIP International Conference on Programming Concepts and Methods|volume=125|pages=148–166|publisher=Chapman &amp;amp; Hall|year=1998}}&amp;lt;/ref&amp;gt; is a type endowed with a predicate which is assumed to hold for any element of the refined type.  Refinement types can express [[precondition]]s when used as [[function argument]]s or [[postcondition]]s when used as [[return type]]s:  for instance, the type of a function which accepts natural numbers and returns natural numbers greater than 5 may be written as &amp;lt;math&amp;gt;f: \mathbb{N} \rarr \{n: \mathbb{N} \, | \, n &amp;gt; 5\}&amp;lt;/math&amp;gt;.  Refinement types are thus related to [[behavioral subtyping]].&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Reification (computer science)]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Formal methods terminology]]&lt;br /&gt;
[[Category:Computer programming]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{soft-eng-stub}}&lt;/div&gt;</summary>
		<author><name>imported&gt;Jlwoodwa</name></author>
	</entry>
</feed>