Toronto: University of Toronto, 2024. - 253 p.
The subject of this book sometimes goes by the names “programming methodology”, “science of programming”, “logic of programming”, “theory of programming”, “formal methods of program development”, “programming from specifications”, or “verification”. It concerns those aspects of programming that are amenable to
mathematical proof. A good theory helps us to write
precise specifications, and to design programs whose executions
provably satisfy the specifications. We will be considering
the state of a computation, the time of a computation, the memory space required by a computation, and the interactions with a computation. There are other important aspects of software design and production that are
not touched by this book: the management of people, the user interface, documentation, and testing. The
emphasis throughout this book is on program development
with proof at each step, rather than on proof after development.
Since the first edition of this book,
new material has been added on space bounds, and on probabilistic programming. The
for-loop rule has been generalized. The treatment of concurrency has been
simplified. And for cooperation between concurrent processes, there is now a choice: communication (as in the first edition), and
interactive variables, which are the formally tractable version of shared memory. Explanations have been
improved throughout the book, and
more worked examples have been added.
True PDF