With the objective of making into a science the art of verifying computer programs (debugging), the author addresses both practical and theoretical aspects of the process. A classic of sequential program verification, this volume has been translated into almost a dozen other languages and is much in demand among graduate and advanced undergraduate computer science students. Subjects include computability (with discussions of finite automata and Turing machines); predicate calculus (basic notions, natural deduction, and the resolution method); verification of programs (both flowchart and algol-like programs); flowchart schemas (basic notions, decision problems, formalization in predicate calculus, and translation programs); and the fixpoint theory of programs (functions and functionals, recursive programs, and verification programs). The treamtent is self-contained, and each chapter concludes with bibliographic remarks, references, and problems.