形式化验证笔记

参考视频:

  • 形式化验证的原理与新应用
  • 【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.rhkb.cn/news/163792.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu20.04运用startup application开机自启动python程序

运用startup application开机自启动python程序。在终端中输入gnome-session-properties,如果显示没有则先进行安装,sudo apt-get update 和sudo apt install StartupApplications(根据显示提示安装)。在显示程序中搜索startup,打开应用程序。 在程序目录…

Paper Reading:《Consistent-Teacher: 减少半监督目标检测中不一致的伪目标》

#pic_center 550x200 目录 简介工作重点方法ASA, adaptive anchor assignmentFAM-3D, 3D feature alignment moduleGMM, Gaussian Mixture Model实施细节 实验与SOTA的比较消融实验 总结 简介 题目:《Consistent-Teacher: Towards Reducing Inconsistent Pseudo-ta…

【每日一题】—— B. Arrays Sum (Grakn Forces 2020)

🌏博客主页:PH_modest的博客主页 🚩当前专栏:每日一题 💌其他专栏: 🔴 每日反刍 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓称…

Unity之ShaderGraph如何实现无贴图水球效果

前言 我们今天来实现一个无贴图水球效果,如下图所示: 主要节点 UVSplit:可以获得UV在RGB三个颜色分别的分量 Remap:重映射节点 基于输入 In 值在输入In Min Max的 x 和 y 分量之间的线性插值,返回输入Out Min Max…

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

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

Ps:选框工具

Ps 的选框工具有四个,它们分别是: 矩形选框工具 Rectangular Marquee Tool 椭圆选框工具 Elliptical Marquee Tool 单行选框工具 Single Row Marquee Tool 单列选框工具 Single Column Marquee Tool 快捷键:M 单行和单列选框工具属于特殊…

竞赛 深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 DeepSORT车辆跟踪3.1 Deep SORT多目标跟踪算法3.2 算法流程 4 YOLOV5算法4.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 *…

leetCode 11. 盛最多水的容器 + 双指针

11. 盛最多水的容器 - 力扣(LeetCode)https://leetcode.cn/problems/container-with-most-water/description/?envTypestudy-plan-v2&envIdtop-interview-150 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是…

SSTI模板注入(flask) 学习总结

文章目录 Flask-jinja2 SSTI 一般利用姿势SSTI 中常用的魔术方法内建函数 利用 SSTI 读取文件Python 2Python 3 利用 SSTI 执行命令寻找内建函数 eval 执行命令寻找 os 模块执行命令寻找 popen 函数执行命令寻找 importlib 类执行命令寻找 linecache 函数执行命令寻找 subproce…

03 里氏替换原则

官方定义: 里氏替换原则(Liskov Substitution Principle,LSP)是由麻省理工学院计算机科学系教授芭芭拉利斯科夫于 1987 年在“面向对象技术的高峰会议”(OOPSLA)上发表的一篇论文《数据抽象和层次》&#…

华为数通方向HCIP-DataCom H12-831题库(多选题:1-20)

第01题 如图所示,路由器所有的接口开启OSPF,图中标识的ip地址为设备的Loopback0接口的IP地址,R1、R2,R3的Loopback0通告在区域1,R4的Loopback0通告在区域0、R5的Lopback0通告在区域2,下列哪些IP地址之间可以相互Ping通? A、10.0.3.3和10.0.5.5 B、10.0.4.4和10.0.2.2 …

开源OA协同办公系统,集成Flowable流程引擎 可拖拽创建个性表单

源码下载:https://download.csdn.net/download/m0_66047725/88403340 源码下载2: 关注我留言 开源OA协同办公系统,集成Flowable流程引擎 可拖拽创建个性表单。基于RuoYi-VUE版本开发。 1、使用RuoYi-Vue的基础上开发。 2、集成flowable&a…

卷王问卷考试系统SurveyKing,开源调查问卷和考试系统源码

卷王问卷考试系统/SurveyKing是一个功能最强大的开源调查问卷和考试系统,可以快速部署,并适用于各行业。该系统提供了在线表单设计、数据收集、统计和分析等功能,支持20多种题型,多种创建问卷方式和多种问卷设置。 无论您是需要进…

Android高版本读取沙盒目录apk解析安装失败解决方案

bug场景: 应用内升级下载apk完成后安装,vivo(Android13)手机会报解析包错误,7.0及以上的手机是没问题的。开始以为是v1,v2签名问题导致的,但是我用浏览器下载下来的安装包是能够正确安装的。排除v1,v2签名的…

c++_learning-模板与泛型编程

模板与泛型编程 模板概念、函数模板定义、调用:各种函数:替换失败不是一个错误SFINAE(substitution failure is not an error):由来:特性: *c11引入的类模板enable_if,体现了SFINAE的…

error: unable to read askpass response from

报错信息 解决方法: 中文:文件-->设置-->版本控制-->Git-->勾选使用凭证帮助程序 英文:File -> Settings -> Version Control -> Git / Check "User credential Helper" 因为我的webstrom是中文版的&#…

layui中页面切分

1.引入Split插件 2.切屏比例设置 pallet与material为标签的id 3.html内部标签上设置切分盒子 4参考网站 : 网站链接

zookeeper(目前只有安装)

安装 流程 学kafka的时候安装 Apache ZooKeeper 安装地址:https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz 解压 tar -zxvf kafka_2.12-3.0.0.tgz -C /export/server/ 改配置 cd config cp zoo_sample.cfg z…

2021-arxiv-Prefix-Tuning- Optimizing Continuous Prompts for Generation

2021-arxiv-Prefix-Tuning- Optimizing Continuous Prompts for Generation Paper:https://arxiv.org/pdf/2101.00190.pdf Code:https://github.com/XiangLi1999/PrefixTuning 前缀调优:优化生成的连续提示 prefix-tunning 的基本思想也是想…

JUC并发编程——线程池学习:基础概念及三大方法、七大参数、四大拒绝策略(基于狂神说的学习笔记)

线程池 池化技术的本质:事先准备好一些资源,线程复用,用完即还,方便管理 默认大小:2 最大并发数max 根据电脑去设置,CPU密集型,IO密集型 线程池的好处: 降低资源的消耗提高响应的…