Event-B建模(四)——Rodin平台使用及Event-B语言


最近在做一些Event-B建模的事情,而Rodin平台使用的方法的中文说明实在太少,在各个模型建模时候,更想写一些建模的思路与需求文档分析方法,这里就总结一下Rodin平台的使用方法以及Event-B的语法结构

Rodin基本操作

Rodin基于Eclipse开发,所以基本操作和Eclipse差不多

新建工程
新建工程
填写项目名称
在这里插入图片描述
新建Event-B组件
在这里插入图片描述
组件类型有Context(上下文)和Machine(机器),组件名字随便起,不过后面会有精化操作,可以从0开始编号
在这里插入图片描述
Rodin中添加元素一般都是通过右键添加,直接写代码的方式有是有的,不过要装插件

在这里插入图片描述
添加完成后,可以双击元素,修改名称,其他的定义初始化相关操作也都是这样子添加

">"这个后面代表的是注释,双击这个符号的右边就可以添加注释了
在这里插入图片描述
右下角有个符号表,有什么需要输入的符号可以从这里找,把鼠标悬停到这里也可以看到快捷输入方式

例如: ∅ \varnothing 直接输入{}就可以出来, ∈ \in 直接敲:, → \rightarrow 敲–>,等等等等
在这里插入图片描述
在左上方有添加变量的快捷方式
在这里插入图片描述
右上方这里有切换视图的地方,使用插件或者查看验证的时候需要在这里切换视图观看
在这里插入图片描述
Event-B一个重要的特点就是精化,在组件上右键,context有extend操作,而在machine上有refine操作
在这里插入图片描述
左边explorer里面点开Proof Obligations可以看到Rodin自动生成的证明义务,通过的是绿色的,而未证明通过的是红色的,可以双击进去看看未通过原因

另:有时候可能你是对的,但平台没有证出来,这种时候可以双击进去看看原因,如果没啥问题可以右键Retry Auto Provers一下,有时候就直接绿了(微笑(* ̄︶ ̄))
在这里插入图片描述

看到这个not theorem了没有?这点下会变成theorem(定理),代表这一行内容目前并不能确定,需要在本组件内证明,所以不要乱点后面灰色的部分

同样,如果一个事件继承了另一个事件,那么点击not extended ordinary会变成extended,然后出现被继承事件的内容
在这里插入图片描述

Event-B表示法

机器和上下文

Event-B模型里面包含机器(machine)和上下文(context),分别代表着模型中动态变化的部分以及静态不变的部分

在这里插入图片描述
机器和上下文之间的关系

机器和上下文之间存在着各种关系
在这里插入图片描述

  • 一部机器可以“观看(see)”一个上下文
  • 机器可以"精化(refine)"至多一部机器
  • 一个上下文可以"继承(extend)"若干上下文

上下文的结构
在这里插入图片描述

  • 一个上下文要有一个唯一的名字
  • extend列出当前上下文继承的上下文
  • sets定义一些不相交的集合
  • constants列出上下文的各种常量
  • axioms列出常量需要服从的各种谓词,也就是公理
  • theorems列出各种定理,它们必须在这个上下文的范围里证明

一个具体上下文的例子
在这里插入图片描述
机器的结构
在这里插入图片描述

  • 一部机器有一个唯一的名字
  • refines包含被该机器精化的机器
  • sees列出本机器显示观看的上下文
  • variables列出机器的各种变量
  • invariants列出变量必须服从的各种谓词(即不变式)
  • theorems列出各种定理,需要在本机器中证明
  • variant描述变动式
  • events列出本机器的各种事件

一部具体的机器
在这里插入图片描述

事件
在这里插入图片描述

  • refines列出该事件精化的抽象事件
  • any列出事件的参数
  • where包含事件的各种guard
  • with是结合refines一起用的,在抽象事件里面的抽象参数,如果在具体事件里面有了具体的值,那么就在with语句中写出,定义使用a:P(a)的形式
  • then列出事件各种动作

with的使用
在这里插入图片描述
事件的例子
在这里插入图片描述

证明义务

1、不变式证明义务:INV

不变式证明义务规则保证machine里面的每一个不变式,在每个事件执行后仍然得到保持

该PO的命名为"evt / inv / INV"

2、卫加强证明义务:GRD

我们认为,正确的精化时,需要保证具体的卫比抽象的卫更强,什么叫更强?这就意味着具体的卫蕴含着抽象的卫,也可以说不可能出现一种情况,使得具体的卫成立,但抽象的卫不成立。正确精化的证明义务用GRD表示。

该PO的命名为"evt / grd / GRD"

变动式相关的证明义务
当引进了一些新事件时,我们还必须证明另外一些东西,就是说它们不会发散,也就是说,这些新事件不会永无止境地执行。为了证明这一性质,我们必须给出一个自然数值的表达式,称为变动式(variant),而后证明所有的新事件都会减少它的值。这就带来了两个证明义务:第一个是说我们提出的这个变动式是一个自然数,第二个是说每个新事件都会减小该变动式的值

3、数值变动式证明义务:NAT
该证明义务保证,我们提出的变动式是一个自然数

4、变动量证明义务:VAR
该证明义务保证,我们提出的变动式在执行所有的新事件后都会减少它的值

其实提出的这个变动式相当于while循环中的那个条件,我们如何确认while循环会终止呢?假设while循环长成while(n>0)这个样子,我们要确保n每次都会减小就行了,而我们提出的变动式需要在新的事件执行后,这个变动式会确实的减少,从而表明新的事件不会永无止境的运行下去,不然的话,新增的事件有可能导致本来的事件不会执行,这就违反了精化的原则

5、定理证明义务:THM
这一规则保证所提出的上下文或及其定理是可证的

该PO的命名为"thm / THM"

6、良好定义证明义务:WD
这一证明义务保证,每个可能出现病态定义的公理、定义、不变式、卫、动作、变动式,都确实是良好定义的

弄清楚一个问题就可以,什么叫做病态定义?如果我们把一个数定义为a = 1/0,这个就是一个病态定义,因为除法不能除以0,WD证明义务就是保证定义的时候不会出现类似于这样子的病态定义

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值