This paper presents a personal account of developments leading to Unifying Theories of Programming, and some opinions about the direction the work should take in the future. It also speculates on consequences the work will have for all of computer science.
UTP and meMy introduction to formal methods was the book a Discipline of Programming [2] by Edsger Dijkstra in 1976. I wrote a small contribution in a paper named do considered od [14] in that same year. In that paper I proposed recursive refinement as a way of composing programs, and a different way of generating the sequence of approximations for loop semantics that is more general than the one in Dijkstra's book, applying to all looping constructs, including general recursion.It was standard in semantics work then (and for some people, it remains so today) to use a meaning function (sometimes written as double square brackets) that maps program text to its meaning. In Dijkstra's book, he used the wp function to map a program text and postcondition to a precondition. If S is some program text, and R is a postcondition, then wp(S, R) is the exact precondition for execution of 1 S to terminate and establish postcondition R . In my 1976 paper, I made the The English meaning of "precondition" is "something that is necessary 1 beforehand". Dijkstra was using it to mean "something that is sufficient beforehand". In Dijkstra's use, the "weakest precondition" wp was the weakest sufficient condition, i.e. the necessary and sufficient condition. To avoid misusing the word "precondition", I am saying "exact precondition" to mean the condition that is both necessary and sufficient.