当前位置: 首页 > news >正文

Lesar: 面向 Lustre/Scade 语言的形式化模型检测工具

在《同步反应式系统》的第一课中,介绍了同步数据流语言 Lustre 生态中的形式化模型检查器 Lesar 的用法。Lesar 可对 lustre v4 语言以及 Scade 语言中部分数据流核心特性进行模型检查。

Lesar 介绍

Lesar 是 Verimag 研发维护的形式化方法模型检查工具。该工具的理论基础基于抽象解释(abstract interpretation)和固定点计算(fixpoint computation),主要用于检查系统是否满足特定的时序逻辑性质,如安全性和活性等。

Lesar 的主要功能包括:

  • 状态空间构建:从 Lustre 程序构建状态空间转移系统(transition system)。
  • 模型检查:自动验证是否满足指定的逻辑公式,通常为安全性属性(如 invariants)。
  • 属性验证:使用布尔逻辑或时序逻辑表达式;可以验证如“某个变量永远不会为某值”或“某个条件一旦成立,之后总保持”等性质。
  • 反例生成:若属性不满足,Lesar 会生成反例(counterexample),帮助调试。

Lesar 的下载与部署

Lesar 可在 Verimag 官方网站下载,对面向 Ubuntu 22.04 平台的部署包,也可通过这里下载 lustre-v4-IV.2024.144-linux64.tgz

在 Linux 环境或 WSL 环境中,解压压缩包

tar zxf lustre-v4-IV.2024.144-linux64.tgz

参考 README, 在 ~/.bashrc 中,添加

export LUSTRE_INSTALL=/[path_to_your_dir]/lustre-v4-IV.2024.144
source $LUSTRE_INSTALL/setenv.sh

通过 source ~/.bashrc 后,lesar 可通过 which lesar 找到。

使用示范

这里将通过示例演示 Lesar 工具的使用。假设有如下两段 Lustre 程序:

-- in F.lus 
node SWITCH1 (set, reset, initial: bool) returns (level: bool);
letlevel = initial -> if set then trueelse if reset then falseelse pre(level);
tel

以及

-- in F.lus 
node SWITCH (set, reset, initial: bool) returns (level: bool);
letlevel = initial -> if set and not pre(level) then trueelse if reset then falseelse pre(level);
tel

SWITCH1 中,输入set 激活将使输出 level 为 true;reset 激活将使输出为 false;其他情况输出level 保持之前周期的值。

SWITCH 中,拓展了 SWITCH1 的适用范围,可通过一个按钮即可控制 level 的变化。与 SWITCh1 的区别为,当set激活,并且之前level 为false 时,才会触发 level 为 true。

通过观察可知,当setreset 不同时为 true 时,SWITCHSWITCH1 行为一致。

如何验证?可通过 Lesar 实现。增加如下 Lustre 程序:

-- in F.lus 
node verif_switch(set, reset, initial: bool) returns (ok: bool);
var level, level1: bool;
letlevel = SWITCH(set, reset, initial);level1 = SWITCH1(set, reset, initial);ok = (level = level1);assert not(set and reset);
tel

我们注意到,模型检查的验证程序,是使用同编程语言相同的Lustre所写,而不用引入新的语言编写性质。这段 lustre v4 程序描述的含义为当 not(set and reset) 总为真时,SWITCHSWITCH1 的结果相同。使用 lesar 进行验证的方法如下

lesar F.lus verif_switch 

回显结果为

--FILE=F.lus MAIN=verif_switch
--Pollux Version 2.53
Var::GlobalName symb=set printag=12 prefix='' return=set
Var::GlobalName symb=reset printag=13 prefix='' return=reset
Var::GlobalName symb=initial printag=14 prefix='' return=initial
Var::GlobalName symb=ok printag=15 prefix='' return=ok
Var::GlobalName symb=level printag=16 prefix='' return=level
Var::GlobalName symb=level1 printag=17 prefix='' return=level1
Var::GlobalName symb=set printag=12 prefix='' return=set
Var::GlobalName symb=reset printag=13 prefix='' return=reset
Var::GlobalName symb=ok printag=15 prefix='' return=ok
Var::GlobalName symb=level printag=16 prefix='' return=level
Var::GlobalName symb=level1 printag=17 prefix='' return=level1
Var::GlobalName symb=level printag=16 prefix='' return=level
Var::GlobalName symb=initial printag=14 prefix='' return=initial
Var::GlobalName symb=set printag=12 prefix='' return=set
Var::GlobalName symb=level printag=16 prefix='' return=level
Var::GlobalName symb=reset printag=13 prefix='' return=reset
Var::GlobalName symb=level printag=16 prefix='' return=level
Var::GlobalName symb=level1 printag=17 prefix='' return=level1
Var::GlobalName symb=initial printag=14 prefix='' return=initial
Var::GlobalName symb=set printag=12 prefix='' return=set
Var::GlobalName symb=reset printag=13 prefix='' return=reset
Var::GlobalName symb=level1 printag=17 prefix='' return=level1TRUE PROPERTY

注意到验证通过 TRUE PROPERTY

http://www.xdnf.cn/news/148393.html

相关文章:

  • @Transactional的一点理解
  • 【C语言】动态经典试题练习
  • 告别并发更新噩梦:MyBatis-Plus @Version 乐观锁实战指南
  • 深入详解人工智能数学基础——概率论中的马尔可夫链蒙特卡洛(MCMC)采样
  • CAPL编程_03
  • vue-lottie的使用和配置
  • 正大模型视角下的市场结构判断逻辑
  • 使用 SSE + WebFlux 推送日志信息到前端
  • 矫平机深度解析:操作实务、行业标准与智能化升级
  • 一款好的私有云产品推荐——优刻得私有云(UCloudStack Pro)产品白皮书
  • 示波器测试差分信号
  • cpu性能统计
  • 网络犯罪全球化,数字时代的跨国诈骗危机
  • Linux——线程(1)线程概念与控制
  • 12.thinkphp验证
  • 粒子群优化算法(Particle Swarm Optimization, PSO)的详细解读
  • PR第二课--混剪
  • 嵌入式通信技术实践与教学创新:从蓝牙协议到虚实融合的实验革命
  • 【Nacos-安全与限流机制健全06 】
  • 第19章:Multi-Agent多智能体系统介绍
  • C/C++时间函数详解及使用场景
  • 找出字符串中第一个匹配项的下标
  • 关于hbaseRegion和hbaseRowKey的一些处理
  • 在 Ubuntu 22.04|20.04|18.04 上安装 PostgreSQL 13
  • 4/24杂想
  • 慧星云荣登杭州AI卧龙图
  • windows安装jax和jaxlib的教程(cuda)成功安装
  • C++进阶----多态
  • 这些项目可以在以后年度结转扣除!
  • 从 0 开始认识 WebSocket:前端实时通信的利器!