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

news2025/7/14 2:31:10

在《同步反应式系统》的第一课中,介绍了同步数据流语言 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);
let
  level = initial -> if set then true
                     else if reset then false
                     else pre(level);
tel

以及

-- in F.lus 
node SWITCH (set, reset, initial: bool) returns (level: bool);
let
  level = initial -> if set and not pre(level) then true
                     else if reset then false
                     else 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;
let
  level = 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=level1

TRUE PROPERTY

注意到验证通过 TRUE PROPERTY

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

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

相关文章

VRRP与防火墙双机热备实验

目录 实验一:VRRP负载均衡与故障切换 实验拓扑​编辑一、实验配置步骤 1. 基础网络配置 2. VRRP双组配置 二、关键验证命令 1. 查看VRRP状态 2. 路由表验证 三、流量分析 正常负载均衡场景: 故障切换验证: 实验二:防火…

win11什么都不动之后一段时间黑屏桌面无法显示,但鼠标仍可移动,得要熄屏之后才能进入的四种解决方法

现象: 1. 当时新建运行的资源管理器的任务卡了或者原本资源管理器卡了 比如:当时在文本框中输入explorer 注:explorer.exe是Windows的文件资源管理器,它用于管理Windows的图形外壳,包括桌面和文件管理 按住CtrlAltEs…

基于LAB颜色空间的增强型颜色迁移算法

本文算法使用Grok完成所有内容,包含算法改进和代码编写,可大大提升代码编写速度,算法改进速度,提供相关idea,提升效率; 概述 本文档描述了一种基于LAB颜色空间的颜色迁移算法,用于将缩略图D的…

基于SIMMECHANICS的单自由度磁悬浮隔振器PID控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 单自由度磁悬浮减振器工作原理简介 4.2 SIMMECHANICS工具箱 5.完整工程文件 1.课题概述 基于SIMMECHANICS的单自由度磁悬浮隔振器PID控制系统simulink建模与仿真。其中,SIMMECHANICS是M…

C++初登门槛

多态 一、概念 多态是指不同对象对同一消息产生不同响应的行为。例如,蓝牙、4G、Wi-Fi 对“发送数据”指令有不同的具体实现。 二、核心理解 本质:通过基类指针或引用操作子类对象,实现运行时动态绑定。 表现形式: 接口统一&a…

红队系列-网络安全知识锦囊-CTF(持续更新)

CTF CTF系列-AWD专题篇CTF-比赛培训基础1 CTF 介绍HTTP协议分析进阶001.CTF简介_宽字节注入高级 2018CTF——黑客大赛特训CTF-PWNPWNCTF竞赛中的主要题型之一了解CTF Capture The Flag 夺旗描述:# gets从标准输入设备读字符串函数#下面是对main函数中的汇编代码的解释:modifi…

Windows环境下常用网络命令使用

ipconfig命令使用: ipconfig可用于显示当前的TCP/IP配置的设置值,通常是用来检验人工配置的TCP/IP设置是否正确。在网络连接出现问题时,可以使用ipconfig /release和ipconfig /renew命令来刷新IP地址,这通常能解决因IP地址冲突或…

双系统下 ubuntu 20.04 突然 开机黑屏报错 hdaudioC0D2: unable to configure disabling

双系统下 ubuntu 20.04 突然 开机黑屏报错 hdaudioC0D2: unable to configure disabling 简介:今天在开实验室开双系统台式机时,ubuntu 20.04 系统下,突然在某次关机后再开机时,本来启动好好的,但是在进行图形化启动时,本来应该是显示输入账号和密码时,直接黑屏报错了,…

软考中级-软件设计师 知识点速过1(手写笔记)

第一章:数值及其转换 没什么可说的,包括二进制转八进制和十六进制 第二章:计算机内部数据表示 真值和机器数: 原码(后面都拿x -19举例) : 反码: 补码: 移码: 定点数…

Linux——线程(1)线程概念与控制

线程?这个名字我们似乎有些眼熟?没错,我们之前提到过的进程和这个有点像。但进程和线程有什么关系呢?本系列我们讲从线程的概念出发,了解一下Linux中的线程以及线程和进程的关系等内容。 一、线程的概念 线程是一个执…

备忘录模式:实现对象状态撤销与恢复的设计模式

备忘录模式:实现对象状态撤销与恢复的设计模式 一、模式核心:在不破坏封装性的前提下保存和恢复对象状态 在软件开发中,经常需要实现 “撤销” 功能(如文本编辑器的撤销修改、游戏存档读取)。直接暴露对象内部状态会…

freecad参数化三维模型装配体解析至web端,切换参数组或修改参数

用免费开源的freecad制作全参数化的三维模型,并且装配,上传至服务器,解析至web端,用户可以切换参数或修改参数,驱动模型改变。 freecad全参数化装配体模型解析至web端进行参数切换、修改完整展示_哔哩哔哩_bilibili …

浅析锁的应用与场景

锁的应用与场景:从单机到分布式 摘要:在多线程和分布式系统中,“锁”是避免资源竞争、保障数据一致性的核心机制。但你真的了解锁吗?什么时候该用锁?用哪种锁?本文通过通俗的比喻和代码示例,带…

语音合成之五语音合成中的“一对多”问题主流模型解决方案分析

语音合成中的“一对多”问题主流模型解决方案分析 引言“一对多”指的是什么?优秀开源模型的方法CosyvoiceSparkTTSLlaSA TTSVITS 引言 TTS系统旨在模仿人类的自然语音,但其核心面临着一个固有的挑战,即“一对多”问题 。这意味着对于给定的…

ElementUi的Dropdown下拉菜单的详细介绍及使用

Dropdown是 ElementUI 中用于创建下拉菜单项的一个组件,通常el-dropdown-item 包裹在 el-dropdown 组件中使用。以下从功能特性(一些属性及方法)、使用和高级功能(高亮显示,滚动,额外传参数)三个方面进行详细介绍。 一、功能特性 1.触发方式…

Linux麒麟 V10 系统找回 root 密码的步骤

Linux麒麟 V10 系统找回 root 密码的步骤 1 环境介绍2 操作步骤2.1重启系统并进入 GRUB 菜单2.2 输入 GRUB 账户密码2.3 修改启动参数2.4 启动系统2.5 修改root 密码2.6 重启系统 3 Linux命令全方位指南实战教程Linux命令学习使用列表 1 环境介绍 有时候root 密码忘记&#xf…

stone 3d v3.3.0版本发布,含时间线和连接器等新功能

1.新加了时间线(timeline)编辑器,可以类似blender一样给对象制作动画 2.新加了度量(metrics)系统,通过scene对象检测器中的useMetrics属性来启用或禁用,启用时所选物体将显示三维度量数据 新加了…

.whl文件

本文主要介绍了.whl文件的定义,怎么安装.whl文件(离线,在线)。 怎么查看cuda的版本,以及如何安装相应版本的cuda(本地电脑,超算上) 以及如何创建.whl文件 .whl文件的定义 Document…

Git命令行中vim的操作

Git命令行用vim打开文件,或者用其他git命令打开了文件,需要编辑和保存文件等,有些命令表情奇怪,往往容易忘记这些命令。记录下。 下面这篇比较实用和简练: gitvim编辑文件命令 • Worktile社区https://worktile.com/…

C#初级知识总结

一、什么是CIL 1.CIL(Common Intermidate Language)是指.Net的公共中间语言,它是一种编程语言。 .Net框架的各种语言在编译时都会编译成同一种中间语言(CIL),之后程序运行的时候CIL会被JIT(Just In Time)转换为二进制语言&#xf…