Formal Development of Programs and Proofs - Dijkstra, Edsger W (Addison-Wesley, 1990)