6、单赋值程序验证形式化:一种适应完备的方法

单赋值程序验证形式化:一种适应完备的方法

1. 引言

近年来,演绎程序验证取得了一定的成熟度,现在有许多工具可供用户证明用 C、Java 或 SPARK 等现实世界语言编写的程序的属性。演绎技术试图根据规范(通常以一阶逻辑表示的一组契约的形式给出)来确定软件系统的正确性,其精度依赖于用户以注释(特别是循环不变式)形式提供的信息。

现代程序验证器的发展呈现出三个趋势:
- 使用 SMT 求解器 :采用可满足性模理论(SMT)求解器来检查一阶公式的有效性。核心组件是验证条件生成器(VCGen),它将程序和规范作为输入,生成一组一阶证明义务并发送给求解器。如果所有条件都有效,则程序正确。
- 基于通用验证语言 :演绎验证工具通常是通用的,基于为验证量身定制的编程语言。特定语言的程序会被翻译成工具的中间语言,并对该语言的相关方面进行背景编码。例如 Boogie 和 Why3 是广泛使用的通用验证器。
- 采用单赋值(SA)表示 :现代工具在内部使用代码的单赋值(SA)表示,其中变量在被读取或写入后不能再被赋值。SA 分支程序不仅在逻辑上更容易编码,还解决了一个基本的效率问题。从标准命令式代码生成的验证条件的大小可能是程序大小的指数级,这使得有效验证合理大小的程序变得困难。而将代码转换为 SA 形式可以生成二次大小的验证条件(后来还提出了一种相对于 SA 程序生成线性大小条件的技术)。此外,SA 表示不会丢失计算的中间值,规范语言可以方便地使用变量在给定程序点的值,连续不变式也会自动传输。

程序验证的理论基础传统上基于两个不同的框架:Dijkstr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值