This is Boogie 2

Boogie is an intermediate verification language, designed to make the prescription of verification conditions natural and convenient. It serves as a com- mon intermediate representation for static program verifiers of various source languages, and it abstracts over the interfaces to various theorem provers. Boogie can also be used as a shared input and output format for techniques like abstract interpretation and predicate abstraction. As a language, Boogie has both mathe- matical and imperative components. The imperative components of Boogie spec- ify sets of execution traces, the states of which are described and constrained by the mathematical components. The language includes features like paramet- ric polymorphism, partial orders, logical quantifications, nondeterminism, total expressions, partial statements, and flexible control flow. The Boogie language was previously known as BoogiePL. This paper is a reference manual for Boogie version 2.