形式化验证笔记

news2024/11/18 22:49:40

参考视频:

  • 形式化验证的原理与新应用
  • 【DatenLord达坦科技】形式化验证入门(我强推!!!!!)

形式化验证:在状态机表征的空间里面进行搜索,验证某个模型是否按规范执行且测试覆盖率达到100%
方法:将规范(可选)和代码变为数学公式,再将公式放入定理证明器
在这里插入图片描述
例子
在这里插入图片描述
第一种作用:生成测试用例
在这里插入图片描述
第二种作用:验证程序是否符合规范
第一步:把控制流程图转成表达式
在这里插入图片描述
第二步:将规范加入表达式
但是该做法会导致只能找到正确值而不是违反规范的路径,所以要将规范取非,以匹配违反规范的情况
在这里插入图片描述
进一步,因为一般程序很复杂,所以是用验证器,让计算机进行计算
在这里插入图片描述
上述只能进行当前场景一次的验证,于是为了考虑时间属性,引入了LTL
比如要限制一个计数器永远小于10,下面的程序确实可以限制单次不会增加超过10,但是多次之后cnt就会超过10
所以我们就要引入G、U、F、X这种时态

int cnt = 0;
void add(num){
	if(num>=10)报错;
	else cnt+=num;
}

在这里插入图片描述

模糊测试TODO

在这里插入图片描述
在这里插入图片描述

结合LLM

通过LLM,使用自然语言生成规范
在这里插入图片描述

LTL

LTL主要研究的是trace,每个状态其实就是第一个label的变换
在这里插入图片描述
注意 a b c ∗ abc^* abc的星号表示未知的有限次数, a b c ω abc^\omega abcω的w表示未知的无限次数

LTS的乘积

label transition system
就是两个状态机的乘积
即两边的状态做笛卡尔积
转换关系、原子命题、标签函数取并集

将待检测代码和要检查的属性(注意规范就是定义要满足的属性),两个状态机乘起来
比如把车行灯和人行灯进行乘起来

可以看到2*3=6
在这个状态机里找有没有期待的非法状态出现
然后因为出现了{g,w},即车绿灯时,人穿过马路
在这里插入图片描述

LTP

线性时间属性
形式化方法与数理逻辑不一样的点
即形式化方法引入了时间(离散的)概念
形式化方法因为有无限时间,所以会展开成很大的路径空间
在这里插入图片描述
我们要做的就是找到一条路径,满足我们定义的属性要求(一般就是找非法路径,没有说明程序合理)
在这里插入图片描述

安全性&不变性(safety & invariant)

永远不会发生坏的事情
某些属性应适用于所有可访问状态

所以就是在有限字上找一个坏前缀(有限步骤上会不会有坏状态,如果当前已经坏了,那么后面肯定就不能走了)

活性(liveness)

好事最终会发生(test case不能做到,因为测试时长是有限的)
所以是形式化验证强大的地方

通过一个有环的有限状态自动机表示一个无限序列
所以就是检查环上是否最终会出现这个好事

有几种,比如最终发生一次,会发生多次最终发生一次,每次等待了就一定能发生

LTL

注意LTL定义上只有U和F,但是衍生出了
G的意思是每一跳都要满足
F的意思是最终某一跳会满足
还有O表示下一跳
F( ϕ \phi ϕ) := True U ϕ \phi ϕ
G( ϕ \phi ϕ) := !(F(! ϕ \phi ϕ))
在这里插入图片描述
应用:

  • 安全性:线程P1和P2不会同时进入临界区: G ( ! ( c r i t 1 & c r i t 2 ) ) G(!(crit_1 \& crit_2)) G(!(crit1&crit2))
  • 活性:两个线程最终都能进入临界区,不会饥饿: ( G ( F ( c r i t 1 ) ) & G ( F ( c r i t 2 ) ) ) (G(F(crit_1))\&G(F(crit_2))) (G(F(crit1))&G(F(crit2)))
  • 强活性:只要等待了就最终能进去:
    在这里插入图片描述

例子:下图表示

  • 外面包着G,表示每一跳都保持这个属性
  • 先红灯,然后红灯亮一会,最终变黄灯
  • 黄灯也亮一会,最终变绿灯
    在这里插入图片描述

CTL

computing tree logic
计算树逻辑比LTL多了全称和存在量词,是对全局来看的
LTL就是不能表达存在某条路径,他默认带的是全称量词

将需求规范形式化

在这里插入图片描述

工程实践

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

TLA+

两种代码编写方式:TLA+和PlusCal
用状态机描述代码,有穷尽的状态

demo

在这里插入图片描述
进一步改进
在这里插入图片描述
把or再改下
在这里插入图片描述
TLA真实代码
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

058:mapboxGL监听键盘事件,通过panBy控制前后左右移动

第058个 点击查看专栏目录 本示例是介绍演示如何在vue+mapbox中监听键盘事件,控制前后左右移动。 本例通过panBy方法来移动一定距离的地图,通过.addEventListener的方法来监听键盘的按键动作。注意这里面style中一定要设置好pitch,不能为0,不然就撞墙,不能移动了。 直接复…

OpenCV 笔记(2):图像的属性以及像素相关的操作

Part11. 图像的属性 11.1 Mat 的主要属性 在前文中,我们大致了解了 Mat 的基本结构以及它的创建与赋值。接下来我们通过一个例子,来看看 Mat 所包含的常用属性。 先创建一个 3*4 的四通道的矩阵,并打印出其相关的属性,稍后会详细…

数据库索引种类

文章目录 索引的优缺点优点缺点 聚簇索引特点优点缺点 非聚簇索引特点优点缺点使用场景: 在MyISAM与InnoDB中的使用 索引的优缺点 索引概述 MySQL官方将索引定义为帮助MySQL高效获取数据的数据结构。索引的本质是一种排好序的快速查找数据结构,用于满足…

YOLOv5/v7/v8改进实验(五)之使用timm更换YOLOv5模型主干网络Backbone篇

🚀🚀 前言 🚀🚀 timm 库实现了最新的几乎所有的具有影响力的视觉模型,它不仅提供了模型的权重,还提供了一个很棒的分布式训练和评估的代码框架,方便后人开发。更难能可贵的是它还在不断地更新迭…

(H5轮播)vue一个轮播里显示多个内容/一屏展示两个半内容

效果图 : html: <div class"content"><van-swipeclass"my-swipe com-long-swipe-indicator":autoplay"2500"indicator-color"#00C4FF"><van-swipe-itemclass"flex-row-wrap"v-for"(items, index) in M…

Kubernetes 进阶

Kubernetes 进阶  Service 控制器  Ingress 对象(对外暴露应用)  管理应用程序配置  K8s 数据卷与持久数据卷  再谈有状态应用部署:StatefulSet控制器  K8s 安全访问控制  K8s 部署利器Helm初探 Service 控制器 • Service存在的意义 • Pod与…

更改Kali Linux系统语言以及安装zenmap

目录 更改Kali Linux系统语言 安装 Zenmap 更改Kali Linux系统语言以及安装zenmap 在使用kali的过程中&#xff0c;会遇到许多问题&#xff0c;其中一个就是看不懂英语&#xff0c;下面是如何更换语言的步骤。 更改Kali Linux系统语言 首先&#xff0c;打开kali&#xff0…

学信息系统项目管理师第4版系列32_信息技术发展

1. 大型信息系统 1.1. 大型信息系统是指以信息技术和通信技术为支撑&#xff0c;规模庞大&#xff0c;分布广阔&#xff0c;采用多级 网络结构&#xff0c;跨越多个安全域&#xff1b;处理海量的&#xff0c;复杂且形式多样的数据&#xff0c;提供多种类型应用 的大系统 1.1.…

python安装、输入输出、注释、中文编码、编码规范等基础语法

一、概述 1、简介 Python的创始人为吉多范罗苏姆&#xff08;Guido van Rossum&#xff09;。1989年的圣诞节期间&#xff0c;Guido开始写Python语言的编译器。Python这个名字&#xff0c;来自Guido所挚爱的电视剧Monty Python’s Flying Circus。他希望这个新的叫做Python的…

30 Python的matplotlib模块

概述 在上一节&#xff0c;我们介绍了Python的pandas模块&#xff0c;包括&#xff1a;Series、DataFrame、数据读取和写入等内容。在这一节&#xff0c;我们将介绍Python的matplotlib模块。matplotlib模块是一个Python的2D绘图库&#xff0c;可以实现各种类型的图形绘制&#…

【试题021】C语言算术运算符例题

1.题目&#xff1a;表达式4.8-1/25%3的值是 &#xff1f; 2.代码解析&#xff1a; //表达式4.8-1/25%3的值是?printf("%d\n", (4 - 1 / 2 5 % 3));//分析&#xff1a;多个运算符看优先级高低次序//根据口诀可知&#xff1a; /和%都排第三&#xff0c;和-排第四//所…

AutoSAR入门:应用背景及简介

1、应用背景 在我们现在的汽车行业里面&#xff0c;汽车电子的发展过程中&#xff0c;我们发现有一些新的趋势汽车电子系统的复杂性不断增长。 我们现在可以看到车辆有越来越多的功能&#xff0c;那么这些功能呢&#xff0c;也在往这个控制器上进行集中&#xff0c;比如说我们现…

修炼k8s+flink+hdfs+dlink(六:学习k8s)

一&#xff1a;增&#xff08;创建&#xff09;。 直接进行创建。 kubectl run nginx --imagenginx使用yaml清单方式进行创建。 二&#xff1a;删除。 kubectl delete pods/nginx 三&#xff1a;修改。 kubectl exec -it my-nginx – /bin/bash 四&#xff1a;查看。 …

【Leetcode每日一题 1726】「组合|哈希表」同积元组

2023.10.19 本题重点&#xff1a; 1.题目的理解&#xff0c;如何转化成一种组合问题 2.哈希表的使用 题目介绍&#xff1a; 给你一个由 不同 正整数组成的数组 nums &#xff0c;请你返回满足 a * b c * d 的元组 (a, b, c, d) 的数量。其中 a、b、c 和 d 都是 nums 中的元…

11. 机器学习 - 评价指标2

文章目录 混淆矩阵F-scoreAUC-ROC 更多内容&#xff1a; 茶桁的AI秘籍 Hi, 你好。我是茶桁。 上一节课&#xff0c;咱们讲到了评测指标&#xff0c;并且在文章的最后提到了一个矩阵&#xff0c;我们就从这里开始。 混淆矩阵 在我们实际的工作中&#xff0c;会有一个矩阵&am…

【计算机网络笔记】OSI参考模型基本概念

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

分布式存储 vs. 全闪集中式存储:金融数据仓库场景下的性能对比

作者&#xff1a;深耕行业的 SmartX 金融团队 张德敏 近年来随着金融行业的高速发展&#xff0c;经营决策者及监管机构对信息时效性的要求越来越高&#xff0c;科技部门面临诸多挑战。例如&#xff0c;不少金融机构使用数仓业务系统&#xff0c;为公司高层提供日常经营报表&am…

阿里云服务器x86计算架构ECS规格大全

阿里云企业级服务器基于X86架构的实例规格&#xff0c;每一个vCPU都对应一个处理器核心的超线程&#xff0c;基于ARM架构的实例规格&#xff0c;每一个vCPU都对应一个处理器的物理核心&#xff0c;具有性能稳定且资源独享的特点。阿里云服务器网aliyunfuwuqi.com分享阿里云企业…

InitializeComponent报错(提示不存在)

我是c#新手。为了解决这个问题&#xff0c;需要按照以下步骤进行。、 WPF应用(.NET Framework) 解决问题 首先&#xff0c;确保项目的类型为WPF应用(.NET Framework)&#xff1b; 然后&#xff0c;代码的位置应正确处于项目的MainWindow.xaml.cs&#xff1b; 最后&#xff0c…

Deno 快速入门

目录 1、简介 2、安装Deno MacOS下安装 Windows下安装 Linux 下安装 3、创建并运行TypeScript程序 4、内置Web API和Deno命名空间 5、运行时安全 6、导入JavaScript模块 7、远程模块和Deno标准库 8、使用deno.json配置您的项目 9、Node.js API和npm包 10、配置IDE…