使用 SMT求解机 根据变迁关系生成迁移后系统的状态

news2024/11/24 10:02:04

本文的例子来源于2011年发布的论文 IC3: Where Monolithic and Incremental Meet

文章目录

    • Ⅰ、变迁系统的介绍
      • 状态图
      • 变迁公式
    • Ⅱ、SMT求解机
      • 简介
      • 公式的计算
      • 计算另一状态
    • 结果展示
    • 参考文献

Ⅰ、变迁系统的介绍

状态图

论文中给出了一个系统的状态迁移图和它的的变迁公式。现在用三个布尔值的合取来表示某一个状态的值。比如q0状态,aka 初始状态,其值分别为 x1 = false ,x2 = false ,x2 = false 。q0的简单表示就是 000。论文中又写道,q3 is ¬x1 ∧ x2 ∧ x3,即 011。那么将状态 q 就可以理解为三个二进制位依次加 1 的结果。具体状态迁移图如下所示。
在这里插入图片描述

变迁公式

变迁公式由三个组成,其分别为 初始状态,迁移关系 和 安全属性。安全属性在本文的范畴内先不做考虑 因为用不到。其中的 x ’ 就表示经过变迁后的 x 的下一个状态。以上图的 T 函数(变迁关系)为例,其输入为x 和 x ’ ,上图的 X拔 为三个布尔值的合取,可以参考初始状态 I。而当一个状态集合 S(X) 和 变迁公式 T 进行合取时,如果存在一个状态 即 下图的公式可满足(参考可满足性问题)那么 X拔 的赋值(即X的下一个状态就得到了)。
在这里插入图片描述

Ⅱ、SMT求解机

简介

其主要用于检查逻辑表达式的可满足性,可以计算实数,也可以计算布尔逻辑公式。目前使用过的分别是SMTinterpol(其支持插值计算)和 Z3(Microsoft公司发明的)。后者的扩展性较好,前者目前好像只支持Java语言。两者的语法规范都是兼容SMT-LIB 2.6的。本次的求解机我也是使用一份代码,两个求解机都进行了运行。
本次使用到的语法规则有,使用(set-option :print-success false)命令来让求解器不输出对每条指令的处理结果好像在线版会直接省略掉中间步骤;使用(set-option :produce-interpolants true)开启插值计算。 同时,对于不能自动推断SMT-LIB中公式所使用的理论逻辑的求解器,可以使用(set-logic QF_UFLIA)指定对应的理论逻辑。 使用(assert (! A :named name))形式的命令(SMT-LIB代码),可以添加一个名字(named:)为name的公式A。 注意以上命令中的!符号,不是表示取非,而仅仅是一个形式记号。

公式的计算

有了上述的内容,直接展示如下代码。将下述代码输入到在线版的求解机中即可。SMTinterpol和Z3,Z3 的在线版不支持额外选项的启用,即set-option。

(set-option :print-success false)
(set-option :produce-proofs true)
(set-option :proof-level lowlevel)
(set-logic QF_LIA)

(declare-fun x1 () Bool) ; 声明布尔变量 x1
(declare-fun x2 () Bool) ; 声明布尔变量 x2
(declare-fun x3 () Bool) ; 声明布尔变量 x3
(declare-fun x11 () Bool) ; 声明布尔变量 x1'
(declare-fun x22 () Bool) ; 声明布尔变量 x2'
(declare-fun x33 () Bool) ; 声明布尔变量 x3'

; 定义 S(x) 函数 aka 当前的状态
(define-fun S ((x Bool)) Bool
  (and  (not x1)  x2   (not x3))
)
; 定义 T(x, x') 函数
(define-fun T ((x Bool) (xx Bool)) Bool
  (and (or x1 (not x22)) (or (not x1) x22) (or x2 (not x33)) (or (not x2) x33)
  )
)

(assert (and (S (and x1 x2 x3))  (T (and x1 x2 x3) (and x11 x22 x33))  )) ; 断言 S(x)T(x, x')

(check-sat) ; 检查是否存在满足约束的解
(get-model)

最终得到的运行结果显示 x11 false, x22 false, x33 true。表示从010的状态输入,根据变迁关系T 其下一个状态为001。
在这里插入图片描述

计算另一状态

根据状态迁移图我们得知,从一个状态出发,应该有两个后续状态。因此我们对求解的代码进行修改,删除我们已经得到的状态,如果还存在使得SMT求解机返回SAT的情况,就得到了状态迁移的另一个状态。
具体如下代码所示,也就是将上一个代码得到的状态进行合取其的非。表示在排除了这种状态的前提下去寻找满足 S(x) ∧ T(x, x’) 的状态。

(set-option :print-success false)
(set-option :produce-proofs true)
(set-option :proof-level lowlevel)
(set-logic QF_LIA)
(declare-fun x1 () Bool) ; 声明布尔变量 x1
(declare-fun x2 () Bool) ; 声明布尔变量 x2
(declare-fun x3 () Bool) ; 声明布尔变量 x3

(declare-fun x11 () Bool) ; 声明布尔变量 x1'
(declare-fun x22 () Bool) ; 声明布尔变量 x2'
(declare-fun x33 () Bool) ; 声明布尔变量 x3'

; 定义 S(x) 函数
(define-fun S ((x Bool)) Bool
  (and  (not x1)  x2   (not x3))
)

; 定义 T(x, x') 函数
(define-fun T ((x Bool) (xx Bool)) Bool
  (and (or x1 (not x22)) (or (not x1) x22) (or x2 (not x33)) (or (not x2) x33)
  )
)

;定义 排除状态 函数
(define-fun SS ((x Bool)) Bool
    (not(and (not x11) (not x22) x33 ))
)


(assert (and (S (and x1 x2 x3))  (T (and x1 x2 x3) (and x11 x22 x33)) (SS(and x11 x22 x33)) )) ; 断言 S(x)T(x, x')S1(x‘)



(check-sat) ; 检查是否存在满足约束的解
(get-model)

结果展示

根据上述的计算结果,可以绘制出一个新的状态图。最终证明论文中的状态图和状态迁移公式是不匹配的。

输入的状态对应x1 x2 x3的值求解返回的第一次结果第二次结果
q0000000100
q1001000100
q2010001101
q3011001101
q4100010110
q5101010110
q6110011111
q7111011111

在这里插入图片描述

参考文献

  1. 程序验证(12)- 谓词抽象
  2. SMT 维基百科
  3. SMTinterpol Solver
  4. Z3 Solver
  5. IC3算法简析
  6. Somenzi F , Bradley A R .IC3: Where monolithic and incremental meet[J].IEEE, 2011.DOI:10.1016/0035-9203(87)90407-X.

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

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

相关文章

【近场社交项目】数据库系统期末设计——概念设计部分

数据库系统期末设计——概念设计部分😎 前言🙌项目设计(1)各个实体属性ER图(2)各个业务功能的ER图 总结撒花💞 😎博客昵称:博客小梦 😊最喜欢的座右铭&#x…

【Redis】特殊数据类型 Geo (地理位置)

🎯前言 除了五中基本的数据类型外,Redis还支持两种特殊的数据类型,第一种 Geo (地理位置):用于存储地理位置相关的数据,例如经纬度、距离等。第二种 Stream (流):是一个高级的列表类型,支持对列…

Python基于pandas库导出excel文件

将Pandas数据框架导出到Excel文件中 让我们看看如何将Pandas数据框架导出到Excel文件中。 实列代码: import time import pandas as pd from io import BytesIO from flask import make_response,def export_navi():# 所有DataFrame合并集合df_list []# 创建一个数…

理工大学|校企联手创典范,布局存储新未来

某理工大学地质灾害防治与地质环境保护国家重点实验室的前身是1989年由原国家计委、国家教委批准,在某理工大学(原某地质学院)“地质工程”国家重点学科基础上建立的国家专业实验室,该实验室是我国地质灾害防治领域目前唯一的国家…

唯一无副作用禁用Win10/11更新方法,一键暂停1000周

作为一个现代化的系统,Windows 很早便配备了自动更新功能以快速获取新功能、修复安全漏洞。 不过到实际使用中嘛,自动弹出、重启自动进行、新版本大量 Bug … 体验十分糟糕。 种种原因导致,经常就有朋友要禁止 Win10/11 自动更新方法。 我们…

MySQL-存储函数练习

创建表并插入数据 ​ 字段名 数据类型 主键 外键 非空 唯一 自增 ​ id INT 是 否 是 是 否 ​ name VARCHAR(50) 否 否 是 否 否 ​ glass VARCHAR(50) 否 否 是 否 否mysql>…

vue项目启动前端时让本地局域网其他设备访问本项目时的配置

文章目录 编辑package.json优化 编辑package.json "dev": "vite --host [本机ip]" ,案例 优化 这样的话实用性更好,我们访问的话依然可以正常访问服务端的ip "dev": "vite --host 0.0.0.0" ,

Kylin麒麟系统设置开机自动登录roo账户

1.安装麒麟系统后,默认root用户是不开启的,首先得设置root用户密码命令。 sudo passwd root 此时会要求输入密码,输入您当前用户登录密码即可。 2.以root权限修改 /usr/share/lightdm/lightdm.conf.d/60-kylin.conf 文件,如提示输入密码&am…

itheima苍穹外卖项目学习笔记--Day1:项目介绍与开发环境搭建

苍穹外卖 Day1:a. 项目概述b. 开发环境搭建(1). 前端环境搭建(2). 后端环境搭建(3). 前后端联调 c. 完善登录功能d. Swagger Day1: a. 项目概述 b. 开发环境搭建 (1). 前端环境搭建 前端工程基于 nginx 运行启动nginx:双击 nginx.exe 即可启动 nginx 服务&#x…

用C语言进行学生成绩排序(简单选择排序和对堆排序)

一.选择排序 选择排序的基本思想是:每一趟(如第i趟)在后面n-i1 (i1,2…,n-1) 个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做完,待排序元素只剩下1个,就不用再选了。选择排序中的堆排序算法是历年考…

IDEA配置Maven教程

IDEA配置Maven教程 💕1、mavne的下载💕2、maven的安装💞3、配置Maven环境变量💞4、配置 Maven 本地仓库存放路径💖 5、settings.xml配置;💖6、IDEA配置maven;💖7、清理下…

不容小觑:MES系统上线后绝对不能大意的几点

随着工业自动化和信息化的普及,制造执行系统(MES)已经成为现代制造企业的重要组成部分。然而,即使在实施MES系统之后,企业仍然不能掉以轻心。本文将探讨MES系统上线后需要引起注意的几个方面,以帮助企业更好…

SolidWorks如何切换语言选项

一些工程师的电脑上安装的上英文操作系统,这种操作系统如果安SolidWorks的话,即已经安装上中文语言包,但打开SolidWorks后,其界面还是英文界面。如何在英文Windows操作系统中运行中文版的SolidWorks呢? 照成以上问题可…

Maven下载和配置教程:Windows、Mac和Linux系统安装指南

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

JDBC技术概述

1.1 JDBC技术概述 Java Database Connectivity 简称JDBC,是Java数据库连接的技术。是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。 JDBC是Java访问数据库的标准规则,可以为不同的…

数据结构与算法——时间复杂度和空间复杂度(详解版)

在学习具体的数据结构和算法之前,每一位初学者都要掌握一个技能,即善于运用时间复杂度和空间复杂度来衡量一个算法的运行效率。 所谓算法,即解决问题的方法。同一个问题,使用不同的算法,虽然得到的结果相同&#xff0…

记一次 频繁Full GC JVM调优

记一次 频繁Full GC JVM调优 背景 观察服务监控平台的时候发现,几乎 20分钟就会触发一次 Full GC; 问题定位 因为对我们系统JVM参数都很熟悉,所以问题定位很快,通过监控就定位到 每次触发FullGC 的时间 都与MetaSapceSize达到…

Elasticsearch原理剖析

一、 Elasticsearch结构 Elasticsearch集群方案由EsMaster、EsClient和EsNode1、EsNode2、EsNode3、EsNode4、EsNode5、EsNode6、EsNode7、EsNode8、EsNode9进程组成,如下图所示,模块说明如表下所示。 说明如表: 名称说明ClientClient使用H…

统计连续字符-2022年全国青少年信息素养大赛Python国赛第7题

[导读]:超平老师计划推出《全国青少年信息素养大赛Python编程真题解析》50讲,这是超平老师解读Python编程挑战赛真题系列的第9讲。 全国青少年信息素养大赛(原全国青少年电子信息智能创新大赛)是“世界机器人大会青少年机器人设计…

2.1 线性表的逻辑结构与存储结构

在之前的数据结构知识铺垫2:物理结构与逻辑结构一文中, 我们介绍了物理结构与逻辑结构, 物理结构即存储结构. 本篇文章我们着重探讨一下线性表的逻辑结构与存储结构. 1. 线性表的逻辑结构 图1. 线性表的逻辑结构 线性表是具有相同特性的数据元素的有限序列, 每个元…