使用Alloy可视化投影

时间:2014-03-16 15:12:18

标签: alloy

我有一个看起来像这样的Alloy模型:

open util/ordering[Time] as timeOrder

sig Time {
    database: one Database
}

sig Database {}
{
    #Database>1
    some database.this
}

pred show {}

run show

我想使用Alloy Analyzer来查看每次系统的状态。我假设如果我预测“时间”,那么我就能看到这个。但是,如果我按时间投影,当我查看Time0时,它会显示与其他时间相关联的数据库。

具体来说,我有一个如下所示的痕迹:

trace

如果我按时间投影,我会假设Time0只显示Database1,而Time1只显示Database0。但是,当我按时间投影并查看Time0时,它会向我显示Database0和Database1。它用(数据库)注释Database1,但我真正想要的是它只在这个视图中显示Database1。

projected

显然,投射不是我所期望的。为什么不?有什么方法可以查看与我投射的元素相关的元素吗?

1 个答案:

答案 0 :(得分:2)

对签名的投影会降低绘制关系的范围,但不会隐藏断开的原子。

然而,这可以通过自定义可视化工具主题来实现:

  • 取消选中该物业" Show" sig Database
  • 检查物业"显示"集合database(二元关系database成为投影下的集合)

此外,如果您愿意,也可以取消选中该属性"显示为标签"避免节点上的标记(database)