Computer programs are an indispensable part of many of the systems we rely upon in our daily lives, and the proper functioning and safety of these systems is of paramount importance. The development of methods that ensure program correctness is therefore a key challenge for computer scientists. This widely anticipated third edition of **__Verification of Sequential and Concurrent Programs__** provides a systematic exploration of one of the most common approaches to program verification, known as the "assertional" approach. Following the successful formula of previous editions, this approach is applied to deterministic and nondeterministic sequential programs of varying complexity, together with both parallel and distributed concurrent programs. The expanded content of this thorough new edition also includes coverage of the verification of object-oriented programs. For each class of programs, the authors introduce an operational semantics and proof systems for the verification of partial and total correctness, justified formally in corresponding soundness theorems. Case studies supplied throughout the book demonstrate the use of the proof systems to formally verify solutions to classical problems, such as sorting, manipulation of lists, producer/consumer and mutual exclusion. **Topics and Features:** * Includes a thorough introductory section, familiarizing the reader with the basic concepts and notation used in the book, as well as the book’s structure * Explains Hoare’s approach to program verification for **while** programs, providing a correctness proof of a program for partitioning an array **(NEW)** * Concludes each chapter with exercises and bibliographic remarks for further reading * Discusses recursive programs that extend deterministic programs by parameterless procedures and procedures with the call-by-value parameter mechanism, and provides a correctness proof of the quicksort program **(NEW)** * Explores nondeterministic and distributed programs, presenting a verification method of distributed programs based on a transformation into nondeterministic ones * Presents object-oriented programs, with a focus on the main characteristics of objects **(NEW)** * Investigates parallel programs with shared variables and with synchronization * Studies the issue of fairness in the framework of nondeterministic programs, using an approach based on the method of explicit schedulers * Includes a Foreword by Professor Amir Pnueli This modern update of a classic, reader-friendly textbook is perfect for an introductory course on program verification for advanced undergraduate or graduate students, and may also be used as an introduction to operational semantics. Outlines for possible courses are suggested in the Preface to the book. This book is unique in addressing assertional verification of all essential classes of imperative programs: **while** programs, recursive programs, object-oriented programs, nondeterministic programs, parallel programs, and distributed programs. HIS BOOK CONTAINS a most comprehensive text that presents syntax-directed and compositional methods for the formal veri?- T cation of programs. The approach is not language-bounded in the sense that it covers a large variety of programming models and features that appear in most modern programming languages. It covers the classes of - quential and parallel, deterministic and non-deterministic, distributed and object-oriented programs. For each of the classes it presents the various c- teria of correctness that are relevant for these classes, such as interference freedom, deadlock freedom, and appropriate notions of liveness for parallel programs. Also, special proof rules appropriate for each class of programs are presented. In spite of this diversity due to the rich program classes cons- ered, there exist a uniform underlying theory of veri?cation which is synt- oriented and promotes compositional approaches to veri?cation, leading to scalability of the methods. The text strikes the proper balance between mathematical rigor and - dactic introduction of increasingly complex rules in an incremental manner, adequately supported by state-of-the-art examples. As a result it can serve as a textbook for a variety of courses on di?erent levels and varying durations. It can also serve as a reference book for researchers in the theory of veri?- tion, in particular since it contains much material that never before appeared in book form. This is specially true for the treatment of object-oriented p- grams which is entirely novel and is strikingly elegant. Computer programs are becoming more and more part of systems that we use to rely on in our daily lives. The proper functioning and safety of these systems is of paramount importance. A major challenger 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 named because it relies on the use of assertions that are attached to program control points. Sequential programs in the form of deterministic and nondeterministic 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 will be appropriate for either an introductory course on program verification for 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. Front Matter....Pages i-xxiii Front Matter....Pages 3-3 Introduction....Pages 3-17 Preliminaries....Pages 18-52 Front Matter....Pages 53-53 While Programs....Pages 55-126 Recursive Programs....Pages 127-150 Recursive Programs with Parameters....Pages 151-183 Object-Oriented Programs....Pages 185-241 Front Matter....Pages 243-243 Disjoint Parallel Programs....Pages 243-266 Parallel Programs with Shared Variables....Pages 267-305 Parallel Programs with Synchronization....Pages 307-346 Front Matter....Pages 347-347 Nondeterministic Programs....Pages 347-372 Distributed Programs....Pages 373-406 Fairness....Pages 407-455 Back Matter....Pages 457-502