Combining rule- and SMT-based reasoning for verifying floating-point Java programs in KeY
Journal article, 2023

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 article, we present the first floating-point support in a deductive verification tool for the Java programming language. Our support in the KeY verifier handles floating-point arithmetics, transcendental functions, and potentially rounding-type casts. We achieve this with a combination of delegation to external SMT solvers on the one hand, and KeY-internal, rule-based reasoning on the other hand, exploiting the complementary strengths of both worlds. 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 correct programs—as well as functional properties, for realistic benchmarks.

Deductive verification

Floating-point arithmetic

Transcendental functions

Author

Rosa Abbasi

Max Planck Society

Jonas Schiffl

Karlsruhe Institute of Technology (KIT)

Eva Darulova

Uppsala University

Max Planck Society

M. Ulbrich

Karlsruhe Institute of Technology (KIT)

Wolfgang Ahrendt

Chalmers, Computer Science and Engineering (Chalmers), Formal methods

International Journal on Software Tools for Technology Transfer

1433-2779 (ISSN) 1433-2787 (eISSN)

Vol. 25 2 185-204

Subject Categories

Language Technology (Computational Linguistics)

Computer Systems

Mathematical Analysis

DOI

10.1007/s10009-022-00691-x

Related datasets

Benchmark Repository for Floating-Point Support in KeY [dataset]

DOI: 10.5281/zenodo.6572940

More information

Latest update

3/7/2024 9