<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sarg.dev/index.php?action=history&amp;feed=atom&amp;title=Program_derivation</id>
	<title>Program derivation - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sarg.dev/index.php?action=history&amp;feed=atom&amp;title=Program_derivation"/>
	<link rel="alternate" type="text/html" href="https://wiki.sarg.dev/index.php?title=Program_derivation&amp;action=history"/>
	<updated>2026-04-20T16:47:27Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.sarg.dev/index.php?title=Program_derivation&amp;diff=293098&amp;oldid=prev</id>
		<title>imported&gt;Bkell: decap &quot;distributed&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.sarg.dev/index.php?title=Program_derivation&amp;diff=293098&amp;oldid=prev"/>
		<updated>2025-09-30T21:55:07Z</updated>

		<summary type="html">&lt;p&gt;decap &amp;quot;distributed&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;In [[computer science]], &amp;#039;&amp;#039;&amp;#039;program derivation&amp;#039;&amp;#039;&amp;#039; is the derivation of a program from its specification, by mathematical means.&lt;br /&gt;
&lt;br /&gt;
To &amp;#039;&amp;#039;derive&amp;#039;&amp;#039; a program means to write a [[formal specification]], which is usually non-executable, and then apply mathematically correct rules in order to obtain an [[executable]] program satisfying that specification. The program thus obtained is then correct by construction.  Program and [[correctness (computer science)|correctness]] proof are constructed together.&lt;br /&gt;
&lt;br /&gt;
The approach usually taken in [[formal verification]] is to first write a program, and then provide a [[mathematical proof|proof]] that it conforms to a given [[program specification|specification]].  The main problems with this are that:&lt;br /&gt;
* the resulting proof is often long and cumbersome;&lt;br /&gt;
* no insight is given as to how the program was developed; it appears &amp;quot;like a rabbit out of a hat&amp;quot;;&lt;br /&gt;
* should the program happen to be incorrect in some subtle way, the attempt to verify it is likely to be long and certain to be fruitless.&lt;br /&gt;
&lt;br /&gt;
Program derivation tries to remedy these shortcomings by:&lt;br /&gt;
* keeping proofs shorter, by development of appropriate mathematical notations;&lt;br /&gt;
* making design decisions through formal manipulation of the specification.&lt;br /&gt;
&lt;br /&gt;
Terms that are roughly synonymous with program derivation are: transformational programming, algorithmics, deductive programming.&lt;br /&gt;
&lt;br /&gt;
The [[Bird-Meertens Formalism]] is an approach to program derivation.&lt;br /&gt;
&lt;br /&gt;
Approaches to achieving correctness in [[distributed computing]] include research languages such as the [[P (programming language)|P programming language]].&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Automatic programming]]&lt;br /&gt;
* [[Hoare logic]]&lt;br /&gt;
* [[Program refinement]]&lt;br /&gt;
* [[Design by contract]]&lt;br /&gt;
* [[Program synthesis]]&lt;br /&gt;
* [[Proof-carrying code]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*  [[Edsger W. Dijkstra]], Wim H. J. Feijen, &amp;#039;&amp;#039;A Method of Programming&amp;#039;&amp;#039;, Addison-Wesley, 1988, 188 pages&lt;br /&gt;
* Edward Cohen, &amp;#039;&amp;#039;Programming in the 1990s&amp;#039;&amp;#039;, Springer-Verlag, 1990&lt;br /&gt;
* Anne Kaldewaij, &amp;#039;&amp;#039;Programming: The Derivation of Algorithms&amp;#039;&amp;#039;, Prentice-Hall, 1990, 216 pages&lt;br /&gt;
*  David Gries, &amp;#039;&amp;#039;The Science of Programming&amp;#039;&amp;#039;, Springer-Verlag, 1981, 350 pages&lt;br /&gt;
* [[Carroll Morgan (computer scientist)]], [http://www.cs.ox.ac.uk/publications/books/PfS/ &amp;#039;&amp;#039;Programming from Specifications&amp;#039;&amp;#039;],  International Series in Computer Science (2nd ed.), Prentice-Hall, 1998.&lt;br /&gt;
* [[Eric Hehner|Eric C.R. Hehner]], [http://www.cs.toronto.edu/~hehner/aPToP/ &amp;#039;&amp;#039;a Practical Theory of Programming&amp;#039;&amp;#039;], 2008, 235 pages&lt;br /&gt;
* A.J.M. van Gasteren. &amp;#039;&amp;#039;On the Shape of Mathematical Arguments&amp;#039;&amp;#039;. Lecture Notes in Computer Science #445, Springer-Verlag, 1990. Teaches how to write proofs with clarity and precision.&lt;br /&gt;
* Martin Rem. &amp;quot;Small Programming Exercises&amp;quot;, appeared in &amp;#039;&amp;#039;Science of Computer Programming&amp;#039;&amp;#039;, Vol.3 (1983) through Vol.14 (1990).&lt;br /&gt;
* Roland Backhouse. &amp;#039;&amp;#039;Program Construction: Calculating Implementations from Specifications&amp;#039;&amp;#039;. Wiley, 2003.  {{ISBN|978-0-470-84882-1}}.&lt;br /&gt;
* Derrick G. Kourie, Bruce W. Watson. &amp;#039;&amp;#039;The Correctness-by-Construction Approach to Programming&amp;#039;&amp;#039;. Springer-Verlag, 2012. {{ISBN|978-3-642-27919-5}}. Provides a step-by-step explanation of how to derive mathematically correct algorithms using small and tractable refinements.&lt;br /&gt;
&lt;br /&gt;
[[Category:Program derivation| ]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Bkell</name></author>
	</entry>
</feed>