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.
翻译:在验证真实世界程序的有趣特性方面,细微的核查取得了成功。一个显著的差距是,对浮动点推理的支持有限。这很不幸,因为浮点算术由于四舍五入以及特殊值的无限性和“非数字”的存在而特别不直观。在本文中,我们在爪哇编程语言的推算核查工具中提出了第一个浮点支持。我们在KeY校验器中的支持通过浮动点决定程序处理SMT解答者内部的算术,并通过非同步化处理超常功能。我们评估了这种整合,并表明这种方法足以证明没有浮动点特殊值(通常是进一步推理数字计算的先决条件)以及一些实用基准的功能特性。