PAT:过程分析工具包

一种用于并发和实时系统的增强模拟器、模型检查器和优化检查器

月度档案2011年3月

2011年3月18日:PAT 3.3.0发布!

此版本主要介绍了更多的语言语法建议、最新的Antlr Parser库、GUI改进和错误修复。

语言更改以下为:
1 CSP模块中支持索引布尔表达式。
索引表达式是将OR或AND表达式列表在一系列变量中分组的语法糖。语法如下:
典型示例如下:
var x[3];
P=if(&&i:{0..2}@(x[i]==0)){bingo->Skip};

CSP模块支持2个索引事件。
语法糖索引事件列表可用于字母表的定义。例如:
#定义N2;
P=e.0.0->e.0.1->e.0.2->圈->e.1.0->e.1.1->e.1.2->e.2.0->e.2.1->e.2.2->P;
#字母P{x:{0..N};y: {0..N}@e.x.y};

上述定义将过程P的字母表定义为除过程定义中出现的事件转折之外的所有事件的集合。

语法糖索引事件列表可用于定义具有相同前缀的一组事件。例如,流程dashPhil()的定义可以重写如下。
dashPhil()=Phil((){x:{1..2}@getfork.x,y:{1..2}@putfork.y};

3增加了事件和数据操作不同步的警告。
这是许多用户提出的一个常见问题,对于以下程序,两个进程P()和Q()能否在事件a上同步?如果不是,那么如何使它们在“a”上同步并以原子方式保留语句块({x++})的执行?
var x=0;
P()=a{x++}->b->P();
Q()=a->c->P();
系统()=P()||Q();

答案:
数据操作不同步是避免数据竞争的设计决策。如果两个数据操作可以同步,则相同全局变量的更新可能会导致数据竞争。因此,PAT将发出警告,如果在并行运行的不同进程中有一个数据操作和一个相同的事件。

回到问题上来,一个直观的解决方案是将事件“a”和增量语句放在原子操作中,如下所示:
P()=原子{a->update{x++}->Skip};b->跳过;
Q()=a->c->跳过;
aSystem()=P()||Q();

然后,x将在a接合后立即更新,a将同步。

另一种可能的解决方案是:
P()=a->update{x++}->a1->b->P();
Q()=a->a1->c->P();

4个解析器更新到最新版本的Antlr C#库。

图形用户界面
增加了1个启动屏幕
2模型检查中的多属性选择
3模型检查输出形式中的更多高亮度照明
4 GUI中的错误修复

示例
1 LTS模块中添加了更多示例。
2 CSP模块中Kight Tour示例中添加了模拟图像

错误修复
1外部选项中的错误在所有模块中都已修复

2011年3月13日:增加FSE 2011实验!

论文68:PAT 3:构建多域模型检查器的可扩展体系结构
论文84:老年痴呆症医疗环境智能系统的形式化建模与验证

其他

FM 2011提交的实验

论文16:为概率实时层次系统开发模型检查器
论文23:并发系统的合成部分降阶
论文40:简化建筑模型检查器
论文58:老年痴呆症医疗环境智能系统的形式化建模与验证
论文61:自动验证安全协议的匿名性和隐私属性
论文101:国家空间缩减与全球公平假设相结合