|
1 Introduction and Basic Concepts
1.1 Two Approaches to Formal Reasoning
1.2 Basic Definitions
1.3 Normal Forms and Some of Their Properties
1.4 The Theoretical Point of View
1.5 Expressiveness vs. Decidability
1.6 Boolean Structure in Decision Problems
1.7 Problems
1.8 Glossary
2 Decision Procedures for Propositional Logic
2.1 Propositional Logic
2.2 SAT Solvers
2.3 Binary Decision Diagrams
2.4 Problems
2.5 Bibliographic Notes
2.6 Glossary
3 Equalities and Uninterpreted Functions
3.1 Introduction
3.2 Uninterpreted Functions
3.3 From Uninterpreted Functions to Equality Logic
3.4 Functional Consistency Is Not Enough
3.5 Two Examples of the Use of Uninterpreted Functions
3.6 Problems
3.7 Glossary
4 Decision Procedures for Equality Logic and Uninterpreted Functions
4.1 Congruence Closure
4.2 Basic Concepts
4.3 Simplifications of the Formula
4.4 A Graph-Based Reduction to Propositional Logic
4.5 Equalities and Small-Domain Instantiations
4.6 Ackermann's vs. Bryant's Reduction: Where Does It Matter?
4.7 Problems
4.8 Bibliographic Notes
4.9 Glossary
|
5 Linear Arithmetic
5.1 Introduction
5.2 The Simplex Algorithm
5.3 The Branch and Bound Method
5.4 Fourier-Motzkin Variable Elimination
5.5 The Omega Test
5.6 Preprocessing
5.7 Difference Logic
5.8 Problems
5.9 Bibliographic Notes
5.10 Glossary
6 Bit Vectors
6.1 Bit-Vector Arithmetic
6.2 Deciding Bit-Vector Arithmetic with Flattening
6.3 Incremental Bit Flattening
6.4 Using Solvers for Linear Arithmetic
6.5 Fixed-Point Arithmetic
6.6 Problems
6.7 Bibliographic Notes
6.8 Glossary
|  |
7 Arrays
7.1 Introduction
7.2 Arrays as Uninterpreted Functions
7.3 A Reduction Algorithm for Array Logic
7.4 Problems
7.5 Bibliographic Notes
7.6 Glossary
8 Pointer Logic
8.1 Introduction
8.2 A Simple Pointer Logic
8.3 Modeling Heap-Allocated Data Structures
8.4 A Decision Procedure
8.5 Rule-Based Decision Procedures
8.6 Problems
8.7 Bibliographic Notes
8.8 Glossary
9 Quantified Formulas
9.1 Introduction
9.2 Quantifier Elimination
9.3 Search-Based Algorithms for QBF
9.4 Problems
9.5 Bibliographic Notes
9.6 Glossary
10 Deciding a Combination of Theories
10.1 Introduction
10.2 Preliminaries
10.3 The Nelson-Oppen Combination Procedure
10.4 Problems
10.5 Bibliographic Notes
10.6 Glossary
11 Propositional Encodings
11.1 Overview
11.2 Lazy Encodings
11.3 Propositional Encodings with Proofs (Advanced)
11.4 Problems
11.5 Bibliographic Notes
11.6 Glossary
A The SMT-LIB Initiative
B A C++ Library for Developing Decision Procedures
B.1 Introduction
B.2 Graphs and Trees
B.3 Parsing
B.4 CNF and SAT
B.5 A Template for a Lazy Decision Procedure
|