Deductive Verification of Floating-Point Java Programs in KeY

Reviewed Paper In Proceedings

Author(s):Rosa Abbasi, Jonas Schiffl, Eva Darulova, Mattias Ulbrich, and Wolfgang Ahrendt
In:27th International Conference on Tools and Algorithms for the Construction and Analysis of Systems (TACAS 2021), held as part of ETAPS 2021: European Joint Conferences on Theory and Practice of Software
Publisher:Springer
Series:Lecture Notes in Computer Science
Volume:12652
Part:II
Year:2021
Pages:242-261
DOI:10.1007/978-3-030-72013-1_13
Links:

Abstract

Deductive verification has been successful in verifying interesting properties of real-world programs. One notable gap is the limited support for floating-point reasoning. This is unfortunate, as floating-point arithmetic is particularly unintuitive to reason about due to rounding as well as the presence of the special values infinity and `Not a Number' (NaN). In this paper, we present the first floating-point support in a deductive verification tool for the Java programming language. Our support in the KeY verifier handles arithmetic via floating-point decision procedures inside SMT solvers and transcendental functions via axiomatization. We evaluate this integration on new benchmarks, and show that this approach is powerful enough to prove the absence of floating-point special values—often a prerequisite for further reasoning about numerical computations—as well as certain functional properties for realistic benchmarks.

BibTeX

@inproceedings{AbbasiSchifflEtAl2021,
  author    = {Rosa Abbasi and
               Jonas Schiffl and
               Eva Darulova and
               Mattias Ulbrich and
               Wolfgang Ahrendt},
  editor    = {{Jan Friso} Groote and
               {Kim Guldstrand} Larsen},
  title     = {Deductive Verification of Floating-Point Java Programs in KeY},
  booktitle = {27th International Conference on Tools and Algorithms for the
               Construction and Analysis of Systems ({TACAS} 2021), held as part
               of {ETAPS} 2021: European Joint Conferences on Theory and Practice
               of Software},
  series    = {Lecture Notes in Computer Science},
  volume    = {12652},
  part      = {{II}},
  pages     = {242--261},
  publisher = {Springer},
  doi       = {10.1007/978-3-030-72013-1\_13},
  month     = mar,
  year      = {2021}
}