A decision procedure is an algorithm that, given a decision problem, terminates with a correct yes/no answer. Here, the authors focus on theories that are expressive enough to model real problems, but are still decidable. Specifically, the book concentrates on decision procedures for first-order theories that are commonly used in automated verification and reasoning, theorem-proving, compiler optimization and operations research. The techniques described in the book draw from fields such as graph theory and logic, and are routinely used in industry.
The authors introduce the basic terminology of SAT, Satisfiability Modulo Theories (SMT) and the DPLL(T) framework. Then, in separate chapters, they study decision procedures for propositional logic; equalities and uninterpreted functions; linear arithmetic; bit vectors; arrays; pointer logic; and quantified formulas. They also study the problem of deciding combined theories based on the Nelson-Oppen procedure.
Thefirst edition of this book was adopted as a textbook in courses worldwide. It was published in 2008 and the field now called SMT was then in its infancy, without the standard terminology and canonic algorithms it has now; this second edition reflects these changes. It brings forward the DPLL(T) framework. It also expands the SAT chapter with modern SAT heuristics, and includes a new section about incremental satisfiability, and the related Constraints Satisfaction Problem (CSP). The chapter about quantifiers was expanded with a new section about general quantification using E-matching and a section about Effectively Propositional Reasoning (EPR). The book also includes a new chapter on the application of SMT in industrial software engineering and in computational biology, coauthored by Nikolaj Bjørner and Leonardo de Moura, and Hillel Kugler, respectively.
Each chapter includes a detailed bibliography and exercises. Lecturers' slides and a C++ library for rapid prototyping of decision procedures are available from the authors' website.
The authors introduce the basic terminology of SAT, Satisfiability Modulo Theories (SMT) and the DPLL(T) framework. Then, in separate chapters, they study decision procedures for propositional logic; equalities and uninterpreted functions; linear arithmetic; bit vectors; arrays; pointer logic; and quantified formulas. They also study the problem of deciding combined theories based on the Nelson-Oppen procedure.
Thefirst edition of this book was adopted as a textbook in courses worldwide. It was published in 2008 and the field now called SMT was then in its infancy, without the standard terminology and canonic algorithms it has now; this second edition reflects these changes. It brings forward the DPLL(T) framework. It also expands the SAT chapter with modern SAT heuristics, and includes a new section about incremental satisfiability, and the related Constraints Satisfaction Problem (CSP). The chapter about quantifiers was expanded with a new section about general quantification using E-matching and a section about Effectively Propositional Reasoning (EPR). The book also includes a new chapter on the application of SMT in industrial software engineering and in computational biology, coauthored by Nikolaj Bjørner and Leonardo de Moura, and Hillel Kugler, respectively.
Each chapter includes a detailed bibliography and exercises. Lecturers' slides and a C++ library for rapid prototyping of decision procedures are available from the authors' website.
"This is an excellent book, which I am delighted to have the chance to review. ... The text and the supporting material have been invaluable, stepping the reader through decision procedures and their combinations. ... I highly recommend the book to those interested in understanding and contributing to the world of SAT and SMT solving ... ." (Rosemary Monahan, Formal Aspects of Computing, Vol. 30 (06), November, 2018)
From the reviews:
"This book has two topics as main points: 'decision procedures' and 'algorithms to be applied for these decisions'. ... Such an approach is very useful for graduate students or students in year four or five ... . Each chapter introduces and explains a lot of different concepts and presents good examples, some problems and exercises with algorithm-based solutions, and a glossary at its end, which makes the book very applicable and readable. ... The book is very well written and interesting to read."
(Christian Posthoff, Zentralblatt MATH, Vol. 1149, 2008)
"There are a number of things that I like about the book. Although the material is often complex, the exposition is extremely clear, precise and meticulous. A definition is almost always followed by a clarifying example. As noted above, Kroening and Strichman go to great efforts to explain the notations used. In fact, I'd be hard pressed to think of another text on an advanced subject that does so much to make the material accessible to the reader."
(K. Harrow, ACM Computing Reviews, September 2008)
"This book is a developed version of classroom notes for a course on decision procedures, intended for undergraduate and graduate students ... . The developments are intended for programmers who need to know about the algorithms that solve their particular problems, as well as for students and researchers who need to know how to define such algorithms in the framework of appropriate logics. ... Overall, the book is well structured ... ."
(Siva Anantharaman, Mathematical Reviews, Issue 2009 m)
"This book has two topics as main points: 'decision procedures' and 'algorithms to be applied for these decisions'. ... Such an approach is very useful for graduate students or students in year four or five ... . Each chapter introduces and explains a lot of different concepts and presents good examples, some problems and exercises with algorithm-based solutions, and a glossary at its end, which makes the book very applicable and readable. ... The book is very well written and interesting to read."
(Christian Posthoff, Zentralblatt MATH, Vol. 1149, 2008)
"There are a number of things that I like about the book. Although the material is often complex, the exposition is extremely clear, precise and meticulous. A definition is almost always followed by a clarifying example. As noted above, Kroening and Strichman go to great efforts to explain the notations used. In fact, I'd be hard pressed to think of another text on an advanced subject that does so much to make the material accessible to the reader."
(K. Harrow, ACM Computing Reviews, September 2008)
"This book is a developed version of classroom notes for a course on decision procedures, intended for undergraduate and graduate students ... . The developments are intended for programmers who need to know about the algorithms that solve their particular problems, as well as for students and researchers who need to know how to define such algorithms in the framework of appropriate logics. ... Overall, the book is well structured ... ."
(Siva Anantharaman, Mathematical Reviews, Issue 2009 m)