记录学习LTL2BA和SPIN实现LTL satisfiability checking

2023-12-10 19:40

本文主要是介绍记录学习LTL2BA和SPIN实现LTL satisfiability checking,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这里记录一下学习LTL2BA和SPIN实现LTL satisfiability checking

1. LTL satisfiability checking关注这样一类问题:对于一个系统,给定一个由线性时序逻辑(LTL)描述的性质,判断系统是否具有该性质,解决该问题的理论方法之一简单理解是将LTL性质转换为等价的Buchi自动机,再列举系统所有的运行轨迹,检验这些运行轨迹能否使得Buchi自动机最终停留在“接受”的状态。

2. 实现LTL satisfiability checking的方法/工具有很多,读者可以参考下面这篇文章做出的总结:

Rozier, K. Y., & Vardi, M. Y. (2007, July). LTL satisfiability checking. In International SPIN Workshop on Model Checking of Software (pp. 149-167). Springer, Berlin, Heidelberg.

3. 本文主要介绍一下以SPIN为工具的LTL satisfiability checking,

  • 输入:Promela(PROcess MEta LAnguage,一种用于建模并行程序的语言),一个用于LTL satisfiability checking的Promela(.pml)文件包含两部分,分别是对于待验证系统的描述,和对于待验证性质的描述
  • 输出:系统是否满足给定的性质,如果不满足则会连带输出一条系统不满足该性质的运行轨迹
  • 对于性质的定义,SPIN可以接受LTL性质(其会将输入的LTL性质转换为Buchi自动机),也可以直接接受Buchi自动机(以“never claims”的形式进行定义);另外一种输入方法是先使用特定工具将LTL性质转换为Buchi自动机,再将转换结果输入SPIN,这些工具包括LTL2AUT,LTL2BA,LTL2Buchi(JavaPathFinder)等。

本文学习使用的是LTL2BA+SPIN的组合

4. LTL2BA

官网为http://www.lsv.fr/~gastin/ltl2ba/index.php,其提供了一个在线的demo,LTL2BA的理论文章以及LTL2BA的下载。

  • demo的应用示例:输入LTL公式“[] ( s ->  ( X e ) )”(意为系统当前状态如果使得命题s成立,则下一个状态需使得命题e成立),以下是输出的Buchi自动机表达式和图像
never { /* G ( c ->  ( X s ) ) */
accept_init :    /* init */if:: (!c) -> goto accept_init:: (1) -> goto accept_S2fi;
accept_S2 :    /* 1 */if:: (!c && s) -> goto accept_init:: (s) -> goto accept_S2fi;
}

 

  • LTL2BA的下载和安装:官网上有下载连接,下载解压后需要编译c文件,作者运行系统是WIN10,采用的具体方法是下载cygwin→安装过程中勾选gcc-core和make包→将cygwin的bin目录添加至环境变量PATH→命令行在LTL2BA根目录下执行命令make -f Makefile
  • 编译完成后即可命令行使用ltl2ba命令,使用方法可参见根目录下的README文档,一般使用的命令是ltl2ba -f 'formula'和ltl2ba -F xxx.txt,前者直接在命令行中输入LTL公式,后者则是将LTL公式保存在.txt文件中再运行命令
  • 其它运行Makefile文件的方法可参见stackoverflow上的这个帖子How to run a makefile in Windows

这篇关于记录学习LTL2BA和SPIN实现LTL satisfiability checking的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/478155

相关文章

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点: