  We present a framework in Isabelle for verifying asymptotic time complexity
of imperative programs. We build upon an extension of Imperative HOL and its
separation logic to include running time. In addition to the basic arguments,
our framework is able to handle advanced techniques for time complexity
analysis, such as the use of the Akra-Bazzi theorem and amortized analysis.
Various automation is built and incorporated into the auto2 prover to reason
about separation logic with time credits, and to derive asymptotic behavior of
functions. As case studies, we verify the asymptotic time complexity (in
addition to functional correctness) of imperative algorithms and data
structures such as median of medians selection, Karatsuba's algorithm, and
splay trees.
