高完整性系统工程(九):Invariants

news2024/7/30 17:42:48

目录

1. INVARIANTS

1.1 例子

1.2 正式的证明


1. INVARIANTS

一个不变式需要满足以下三个属性:

  1. 当循环开始时,不变式是正确的
  2. 在每一次循环迭代之后,不变式仍然是正确的
  3. 当循环条件为假时,不变式能推出循环结束后的条件(即后置条件)

其中循环结构的一般形式表示为:({P ∧B} S {P} P ∧ ¬B => Q) / ({P} while B do S done {Q}),其中P为不变式,B为循环条件,S为循环体中的语句,Q为循环结束后的条件。

1.1 例子

a = A;
result = 0;
while a > 0 do 
  result = result + B; 
  a = a - 1;
done

这个程序计算的是result = A * B

consequence rules:

sequence rules:

{true}
{?P}
a = A;
{?P1}
result = 0;
{?I}
while a > 0 do 
result = result + B; 
a = a - 1;
done
{result = A * B}

iteration/while loop rule:

{?I}
while a > 0 do
{?I ∧ a > 0} 
result = result + B;
a = a - 1;
{?I}
done
{?I ∧ a ≤ 0}
{result = A * B}

在用不变式对这个循环结构进行分析时,我们需要找到一个适合的不变式。根据前面说的不变式的性质,我们可以知道,这个不变式通常需要涉及到循环中改变的变量和后置条件中的内容。

在这个例子中,循环中改变的变量有resulta,后置条件中涉及到的变量有AB。根据这些变量,我们可以得到一个可能的不变式:result + (a * B) = A * B

我们观察到每次迭代,result 增加 B,而 a 减1。所以我们可以选择 result + a * B = A * B 作为我们的循环不变量。

接下来,我们可以验证这个不变式是否满足不变式的性质:

  1. 当循环开始时,a的值是Aresult的值是0,所以result + (a * B) = 0 + (A * B) = A * B,满足不变式。
  2. 在每一次循环迭代之后,result增加Ba减1,所以result + (a * B)的值没有变化,仍然等于A * B,满足不变式。
  3. a变为0时,result的值变为A * B,所以result + (a * B) = result + 0 = A * B,满足后置条件。

因此,我们可以确认这个不变式是正确的。这个不变式也帮助我们理解了这个程序的功能:它实现的是一个乘法运算,其中的循环就是不断地做加法运算来实现乘法。

1.2 正式的证明

这里有两个关键目标:

  1. 在循环开始时和每一次循环之后,我们需要证明不变式(Invariant)result + (a * B) = A * B是正确的。

  1. 在循环结束时(即a不大于0时),我们需要证明result = A * B

目标1在早前的幻灯片中已经完成。对于目标1,我们可以发现,如果我们只使用result + (a * B) = A * B这个不变式,并不能推导出result = A * B。因为当a小于等于0时,它可能是负数,而在这个程序中,a应当是非负的。

因此,我们需要将不变式加强,包括条件a ≥ 0。所以,新的不变式变为result + (a * B) = A * B ∧ a ≥ 0

接下来,我们进行两个目标的证明:

目标1(循环结束时):我们需要证明result + (a * B) = A * B ∧ a = 0能够推导出result = A * B。这个显然是正确的,当a = 0时,result = A * B

目标2(循环中):我们需要证明,给定result + (a * B) = A * B ∧ a > 0,执行一次循环后(result = result + B; a = a - 1;),仍能保持不变式result + (a * B) = A * B ∧ a ≥ 0

将待证明的整个过程分成两个小步骤,每一步都有一个中间条件?R1?R

使用霍尔逻辑的赋值规则(Assignment Rule)来找出?R。赋值规则说,如果你有一个赋值x := E和一个后置条件P,那么前置条件是P[E/x]。这里,我们将a - 1替换a

在前置条件中完成替换。

同样,使用赋值规则来找出?R1。这次,我们将result + B替换result

在前置条件中完成替换。 

Holds If:这一部分是在检查步骤5得到的前置条件是否能够由原前置条件推导出。在这里,显然是可以的。

Rest of the Program

同理,这些步骤都在找出每一步的前置条件。唯一不同的是,这里的目标是找出整个程序的前置条件,而不仅仅是循环部分。 

这一步是在处理赋值a = A。同样,我们使用赋值规则,将A替换a

在前置条件中完成替换。

Holds If:这一部分是在检查步骤11得到的前置条件是否能够由原前置条件推导出。在这里,我们发现,如果A小于0,那么前置条件并不能得到满足,所以我们得出结论:这个推导不成立。

Strengthen Precondition

 因为上一步的结果,我们需要加强前置条件,保证A ≥ 0

在前置条件中添加了新的条件。

这是一个完整的霍尔逻辑证明,包括前置条件、后置条件、以及循环的不变式。在这一步,我们得出了最终的结论:在前置条件A ≥ 0下,这个程序能够正确计算result = A * B

这部分的证明包含了一些较复杂的代换和推导,核心的证明步骤是:首先按照程序的执行,将resulta的值进行更新;然后,证明更新后的表达式仍满足不变式。这里的关键是,不变式中的result增加了B,而a减小了1,所以result + (a * B)的值并没有改变。

然后,我们检查这个循环程序的前置条件。我们发现,当A小于0时,前置条件并不满足。因此,我们需要加强前置条件,确保A ≥ 0

最后,我们得到了完整的循环程序和它的霍尔逻辑表示:

{A ≥ 0}
a = A;
result = 0;
while a > 0 do 
  result = result + B; 
  a = a - 1;
done
{result = A * B}

其中,不变式(Invariant)是result + (a * B) = A * B ∧ a ≥ 0。通过这个不变式,我们可以保证在循环开始、循环中、循环结束时,程序的状态都满足我们的期望,从而证明了这个循环程序的正确性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/604305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

刘知远团队提出:如何通过扩大高质量指导性对话数据集,来提高模型的性能和效率...

深度学习自然语言处理 原创作者 | 刘嘉玲 随着开源语言大模型(LLM)的百花齐放,模型的性能和效率关乎到产品的成本和服务体验的均衡。那么,有没有办法让语言大模型变得更高效、更优秀呢? 为了进一步提高开源模型的上限,清华大学的研…

数据库新闻速递 明白3中主流的数据迁移方法 (译)

头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共8…

Webstorm 支持微信小程序开发插件 Wechat mini program support

支持微信小程序插件安装: Wechat mini program support, 微信小程序语法支持,rpx 单位报错解决。 插件官方文档 Wiki - Gitee.com 安装方法: File-> Settings->Plugins 选择Marketplace: 输入Wechat ,搜索,然…

岭回归有看点:正则化参数解密,显著性不再成问题!

一、概述 「L2正则化(也称为岭回归)」 是一种用于线性回归模型的正则化方法,它通过在模型的损失函数中添加一个惩罚项来防止过拟合。L2正则化的惩罚项是模型参数的平方和,乘以一个正则化参数λ,即: L2正则化…

初阶二叉树的相关题目

前言: 前面我们介绍了初阶二叉树的相关知识,二叉树常考的还是链式二叉树,而且二叉树也会考很多选择题,本文重点是在给出一些常考的二叉树的性质定理推导和经典练习题目配合强化巩固知识。 目录 一、二叉树的常见性质定理 二、常…

你的业务被AI所取替的风险度有多高?AI社交、克隆人、角色扮演、代理人

hi,大家好,最近我们陆续会推出各种实验性项目,把我们在AIGC和数字体验上的思考进行验证,欢迎持续关注我们的进展。(文末领取PDF) 目前,已经有不少的例子证明了ChatGPT有多好用了。 亚马逊员工在…

定制比例阀控制放大器

定制比例阀控制放大器是为特定应用场景设计的定制化控制系统。它可以根据客户的需求和应用要求,配置输入输出及颤振频率等参数,对现有的控制器进行修改和优化,以满足特定的性能指标和功能要求。随着工业自动化技术的不断发展,定制…

关于安卓viewpager实现堆叠卡片交互

背景 长江后浪推前浪,无聊的需求一浪接一浪。 最近做到一个关于卡片堆叠的需求,觉得挺有意思,所以特此记录一下。 文末将附上源码链接 首先看设计图: 可以看到,是一个卡片堆叠的效果,关于这种UI的实现&…

Android系统安全技术---FBE密钥框架和技术详解

一、前言 用户数据加密是移动设备的重要功能,是使用对称加密算法对Android设备上的所有用户数据进行编码的过程,防止用户数据被未经授权的用户或应用程序访问。 本文是Android系统安全技术系列第二篇,主要介绍基于文件的加密技术。首先介绍An…

到底什么是“云手机”?

今天这篇文章,我们来聊一个很有趣的东东——云手机。 说到云手机,有些童鞋可能并不会觉得陌生。是的,它确实并不是一个新名词。早在2011年左右,国内就有厂商推出了云手机的概念。掐指一算,至今已经有12个年头了。 大家…

APP在应用市场内该如何做推广

苹果应用商城的自然流量都是通过精品推荐,畅销排行榜和搜索来获取的,此外,应用名称、副标题、应用截图视频、应用描述、用户评论、下载量、用户留存率还有曝光量,这些都是影响ASO优化的关键因素。 为了防止一些应用堆砌热词&…

传统设备充电接口如何升级成USB-C PD快充接口?

早在 2009 年开始,欧盟就致力于推动消费电子产品充电接口的统一进程,减少资源浪费推动绿色环保进程,同时充电配件通用化也为消费者带来更好的充电体验。2022 年 10 月 4 日,欧洲议会全体会议上表决通过,在 2024 年底之…

C++服务器框架开发8——日志系统LogFormatter_3/override/宏定义优化switchcase结构

该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。 其教学视频见:[C高级教程]从零开始开发服务器框架(sylar) 上一篇:C服务器框架开发7——日志系统LogFormatter_2 C服务器框架开发8——日志系统LogFormatter_3/override/宏定义优化switchcase…

代码随想录算法训练营day60 | 84.柱状图中最大的矩形

代码随想录算法训练营day60 | 84.柱状图中最大的矩形 84.柱状图中最大的矩形解法一:单调栈解法二:暴力双指针(会超时)解法三:优化双指针 总结 最后一天打卡留念! 84.柱状图中最大的矩形 教程视频:https://www.bilibili.com/video/BV1Ns4y1o7…

国产化麒麟linux系统QtCreator和QtCreator编译的程序无法输入中文libfcitx最新版本编译1.2.7

1.问题描述 麒麟linux系统QtCreator和QtCreator编译的程序无法输入中文,网上找了很多的libfcitxplatforminputcontextplugin.so库都无法使用正常输入; Qt版本:5.9.6 麒麟系统版本:海光麒麟桌面版kylin V10 SP1 小版本号2203 X…

一个多功能(聚合)查询接口,实现模糊、分页、主键、排序以及多条件查询

一个多功能(聚合)查询接口,实现模糊、分页、主键、排序以及多条件查询 前言 写的啰嗦了点,看效果请直接忽略中间,直接看后半部分。 引个流,公众号:小简聊开发 概念 瞎编的名字,哈哈哈,我就勉强…

一道北大强基题背后的故事(二)——出题者怎么想的?

早点关注我,精彩不错过! 上篇文章中,我们给出一道北大强基考试中的试题,计算[((1 sqrt(5)) / 2) ^ 12],给出了一条没有任何数学直觉,纯硬算的弯路以及题目的参考答案,相关内容请戳:…

IronPDF 2023.6.10 FOR NET CRACK

适用于.NET的IronPDF 2023.6.10 添加新的注释API并改进图像压缩逻辑。 2023年6月2日-14:42新版 特点 添加了新的连续进给选项。例如用于生成收据文档。 添加了新的注释API,包括注释删除。 添加了删除书签的功能。 将内存使用率和性能提高了10%。 改进了图像…

全球加速AEB「强标」,15万元以下车型或将「释放」巨量需求

目前,智能驾驶技术升级,主要是在帮助中高端车型提升产品竞争力,同时为车企构建未来软件付费盈利模式的转型。 但另一方面,基础辅助驾驶,尤其主动安全,比如,AEB(自动紧急制动&#xf…

【企业化架构部署】基于Apache搭建LAMP架构

文章目录 前言一、LMAP架构介绍1.概念2.LAMP构建顺序3.LAMP编译安装4.各组件介绍4.1 Linux4.2 Apache4.3 MySQL4.4 PHP/Perl/Python 二、服务器部署1.Apache部署2.MySQL部署3.PHP部署4.安装论坛 前言 LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整…