2、面向普通开发者的浮点程序证明

面向普通开发者的浮点程序证明

1. 浮点计算验证的挑战与目标

在软件开发中,浮点计算一直是一个具有挑战性的领域。虽然有专门针对浮点计算和误差范围的形式验证工具,但它们通常只能验证其设计的特定属性,无法考虑到数据结构、指针操作等其他因素。而一些通用验证工具虽然支持浮点运算,但在该领域的自动化程度较低,验证的属性也大多局限于范围和特殊值的检查。

我们的目标是展示在常见的设置下,即使用通用演绎验证工具结合通用 SMT 求解器作为后端,演绎验证工具也能够处理诸如误差范围等属性的验证。我们选择使用 SPARK 工具对 Ada 语言的一个子集进行形式验证,并以 Alt - Ergo、CVC4 和 Z3 作为 SMT 求解器。

2. SPARK 简介

SPARK 是一个用于验证关键软件开发中 Ada 程序的环境。它的语言子集和静态验证工具集已在机载航空系统、控制系统、密码系统和铁路系统等领域应用多年。SPARK 工具集可以证明程序不存在运行时错误,如算术和缓冲区溢出、除以零以及指针操作错误。

SPARK 的验证是基于子程序级别的模块化验证,每个子程序独立于其调用上下文进行验证。因此,通常需要为子程序添加注释,这通过契约(主要是前置条件和后置条件)来实现。SPARK 工具会检查用户提供的契约的正确性以及运行时错误的不存在性。

所有注释(包括断言、前置条件和后置条件)都使用常规 Ada 布尔表达式的语法和语义,这样它们是可执行的,并且可以在运行时使用编译器开关进行检查。不过,与非可执行逻辑语言相比,注释语言有一定的限制,例如不能对任意数据进行量化,只能对范围、枚举或容器内容进行量化。

在底层,SPARK 将 Ada

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值