Craig Interpolation in Program Verification
Philipp Rümmer
TL;DR
This chapter surveys Craig interpolation as a core technique in program verification, focusing on how interpolants can be computed modulo theories such as linear real and integer arithmetic and how they drive verification algorithms. It details foundational definitions (SMT, theories, and theory-based interpolation), extended forms (sequence and tree interpolants), and practical interpolation methods (proof-based, graph-based, and reductions). The chapter then integrates these techniques with major verification paradigms: BMC, IMC, CEGAR with existential/predicate abstractions, and CHCs for recursive programs, illustrating how interpolants yield invariants and abstractions. The discussion highlights completeness results, algorithmic trade-offs, and extensions to combine multiple theories, aiming to guide the design of effective interpolation-based verification tools with practical applicability across hardware and software analysis.
Abstract
Craig interpolation is used in program verification for automating key tasks such as the inference of loop invariants and the computation of program abstractions. This chapter covers some of the most important techniques that have been developed in this context over the last years, focusing on two aspects: the derivation of Craig interpolants modulo the theories and data types used in verification and the basic design of verification algorithms applying interpolation.
