  Auto2 is a recently introduced prover for the proof assistant Isabelle. It is
designed to be both highly customizable from within Isabelle, and also have a
powerful proof search mechanism. In this paper, we apply auto2 to the
verification of imperative programs. We describe the setup of auto2 for both
stages of the proof process: verification of a functional version of the
program, and refining to the imperative version using separation logic. As
examples, we verify several data structures, including red-black trees,
interval trees, priority queues, and union-find. We also verify several
algorithms making use of these data structures. These examples show that our
framework is able to verify complex algorithms efficiently and in a modular
manner.
