可验证代码生成与ERTMS案例研究
1. 事件到顺序语句的转换
在为分支和循环定义了 SEB2DFYalg 之后,还需要为(子)调度是单个事件的情况给出定义。调度的最基本组件是事件,Event - B 事件通常有多个保护条件和动作。
在正确的调度中,可以通过一系列保护条件传播和消除规则来消除事件的保护条件。例如,对于调度 while(a){if(b){evt}} ,当控制到达事件 evt 时,在执行 evt 之前, a ∧ b 条件成立。如果 a ∧ b ⇒ grd(evt) 成立,就可以安全地消除 evt 的保护条件。
Event - B 事件的动作在原模型中是同时执行的,没有顺序之分。但将事件转换为代码时,需要对动作进行顺序化。例如,在二分搜索算法模型中的事件 search inc :
Event search inc
refines search
where
grd1: f(k) < v
then
act1: k := (k+j+1)/2
act2: i := k + 1
End
如果直接按事件中的顺序将动作转换为 Dafny 中的顺序赋值语句,程序改变状态的方式会与事件不同,因为 act2 的右侧依赖于 act1 中更新的变量
超级会员免费看
订阅专栏 解锁全文
21

被折叠的 条评论
为什么被折叠?



