Figure - available from: Journal of Automated Reasoning
This content is subject to copyright. Terms and conditions apply.
Simple Boogie program encoding an implementation of the function, making extensive use of the structured syntax provided in later versions of Boogie

Simple Boogie program encoding an implementation of the function, making extensive use of the structured syntax provided in later versions of Boogie

Source publication
Article
Full-text available
The quest to develop increasingly sophisticated verification systems continues unabated. Tools such as Dafny, Spec#, ESC/Java, SPARK Ada and Whiley attempt to seamlessly integrate specification and verification into a programming language, in a similar way to type checking. A common integration approach is to generate verification conditions that a...

Citations

... Its Boogie encoding is fairly standard (as mentioned in Sec. 3.2, its heap model is taken from Dafny's) but could be optimized for better performance (e.g., improving triggers [22,39,15]) or for conciseness (e.g., further simplifying type conversions [47]) as needed. ...
Preprint
The breakneck evolution of modern programming languages aggravates the development of deductive verification tools, which struggle to timely and fully support all new language features. To address this challenge, we present ByteBack: a verification technique that works on Java bytecode. Compared to high-level languages, intermediate representations such as bytecode offer a much more limited and stable set of features; hence, they may help decouple the verification process from changes in the source-level language. ByteBack offers a library to specify functional correctness properties at the level of the source code, so that the bytecode is only used as an intermediate representation that the end user does not need to work with. Then, ByteBack reconstructs some of the information about types and expressions that is erased during compilation into bytecode but is necessary to correctly perform verification. Our experiments with an implementation of ByteBack demonstrate that it can successfully verify bytecode compiled from different versions of Java, and including several modern language features that even state-of-the-art Java verifiers (such as KeY and OpenJML) do not directly support\unicode{x2013}thus revealing how ByteBack's approach can help keep up verification technology with language evolution.
... Later, this morphed into the Extended Static Checker for Java (ESC/Java) -a widely acclaimed and influential work [31]. Numerous others have blossomed in this space, including Spec# [4,5,28,56], Dafny [49,[51][52][53][54], Why3 [8,29,30], JML [11, 16-18, 48, 73], VeriFast [41,42], SPARK/Ada [59], AutoProof for Eiffel [77], Frama-C [21,33,45,78], KeY [1], Viper [35,61,76], SPARK/Ada [3,13], and Whiley [14,65,67,68]. Such tools build upon Hoare logic [36] and discharge proof obligations using automated theorem provers such as Z3 [22], CVC4 [6,7], Yices2 [26], Alt-Ergo [19], Vampire [38,46] or Simplify [23]. ...
Chapter
The breakneck evolution of modern programming languages aggravates the development of deductive verification tools, which struggle to timely and fully support all new language features. To address this challenge, we present ByteBack: a verification technique that works on Java bytecode. Compared to high-level languages, intermediate representations such as bytecode offer a much more limited and stable set of features; hence, they may help decouple the verification process from changes in the source-level language. ByteBack offers a library to specify functional correctness properties at the level of the source code, so that the bytecode is only used as an intermediate representation that the end user does not need to work with. Then, ByteBack reconstructs some of the information about types and expressions that is erased during compilation into bytecode but is necessary to correctly perform verification. Our experiments with an implementation of ByteBack demonstrate that it can successfully verify bytecode compiled from different versions of Java, and including several modern language features that even state-of-the-art Java verifiers (such as KeY and OpenJML) do not directly support—thus revealing how ByteBack ’s approach can help keep up verification technology with language evolution.