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

Lustre/Scade 语言时序算子与形式化验证的联系

在巴黎高师同步反应式系统的第一课中,描述时序算子特性的过程中,讨论到了 Lustre/Scade 语言时序算子与形式化验证方法之间的联系。

在 Lustre/Scade 中,程序的时序逻辑性质(temporal property)可以由Lustre 程序本身描述,而不需要引入新的时序逻辑去表达。在 Lustre/Scade 语言中,有同步观察(Synchronous Observer)的概念。其逻辑如下

node check(x: t) returns (ok: bool);
letassert H(x,y);y = F(x);ok = P(x,y);
tel;

assert H(x,y) 描述对程序环境的假设,如果 y = F(x)的话,则xy的之间的性质 P(x,y)成立。该程序的描述的逻辑的意义为,只要假设H(x,y) 成立,则性质P(x,y)总成立。

在Lustre程序中,通过Lustre描述的时序性质,可使用模型检查检查工具 lesar, kind 2 等进行验证。

一些时序性质例子

连续两个true的情况始终不能发生

该时序性质可以用如下 Lustre 程序表达

node never_twice(A: bool) returns (OK: bool);
letOK = true -> (A and pre A);
tel;

在首周期,不可能出现连续两次true,因此性质为true。在往后周期中,当前周期值,与上一周期值不能同时为 true。如此,通过Lustre时序算子->,构造了该时序性质。

任何事件A的发生,都需要跟随着B发生,B发生在C之前

如下的时序逻辑能描述该性质

-- 在`implies` 中,只要A不发生,不论B是否发生,结果都为`true`。如果A发生了,则B必须发生,才能使`implies`为true。
node implies(A, B: bool) returns (OK: bool);
letOK = not(A) and B;
tel;-- 在 `once` 中,只要出现过一次A 发生(ture),则`once`始终为 true。
node once(A: bool) returns (OK: bool);
letOK = A -> A or pre OK;
tel;node followed_by(A, B: bool) returns (OK: bool);
letOK = implies(B, once(A));
tel;

followed_by(A, B) and followed_by(B, C) 可描述该时序性质。

Scade One 中的新特性 assert

在2024年首发的新一代Scade工具Scade One中,相比Scade 6新引入了assert 特性。assert 特性引入的目的为描述程序运行过程中的不变性质,与形式化验证工具配合使用。

相关文章:

  • 多元函数微分之传统方法和全微分法
  • 电子监管码预检剔除装置提示盒尺寸过短
  • php 需要学会哪些技术栈,掌握哪些框架
  • 架构风格对比
  • new的使用
  • 泰山派常用命令
  • ICH CTD中ISS的关键内容与作用
  • params query传参差异解析及openinstall跨平台应用
  • 【深度学习】评估模型复杂度:GFLOPs与Params详解
  • 光流法:从传统方法到深度学习方法
  • python上测试neo4j库
  • python练习:求两数相加之和
  • Java并发探索--上篇
  • 智能座舱架构中芯片算力评估
  • 2025系统架构师---管道/过滤器架构风格
  • 【强化学习系列】贝尔曼最优方程
  • SQL常用数据清洗语句
  • Python初学 有差异的知识点总结(一)
  • 如何开展有组织的AI素养教育?
  • kubernetes常用命令 k8s指令大全
  • 五一“拼假”催热超长假期,热门酒店民宿一房难求
  • 外交部亚洲司司长刘劲松向菲方严肃交涉
  • 卸任兰大校长后,严纯华院士重返北大作报告
  • 呼伦贝尔市委常委、组织部长闫轶圣调任内蒙古交通集团党委副书记
  • 湖南华容县通报“大垱湖水质受污染”,爆料者:现场已在灌清水
  • 白酒瓶“神似”北京第一高楼被判侵权,法院一审判赔45万并停售