Book Description
A major challenge for computer science is to develop methods that ensure program correctness. This textbook provides a structured introduction to program verification using an assertional approach - so called because it relies on the use of assertions that are attached to program control points. Sequential programs in the form of deterministic and non-deterministic programs, and concurrent programs in the form of parallel and distributed programs are considered within the context of their partial and total correctness. The use of these proof systems is demonstrated with the help of case studies. In particular, solutions to classical problems such as mutual exclusion are formally verified. Each chapter concludes with exercises and bibliographic remarks for further reading. As a result, this text is suitable as either an introductory course on program verification for the upper division of undergraduate studies or for graduate studies. It can also be used as an introduction to operational semantics. Outlines of possible courses are presented in the preface of the book.