合金谓词无法正常运行

时间:2019-05-23 06:32:04

标签: alloy declarative

系统定义:每当发生特定事件时,我都希望将相应操作的对象的状态更改为_1或_0。

但是,每当我执行谓词时,它总是向我提供有关对象状态的错误信息。不幸的是,我得到了一些链接到_1的对象,但是我没有提供该定义。

我正在使用以下事实执行所有操作:

fact {
     all u:Environment-last {
         some r:Operation | {
              execute [u, u.next, r]
         }
     }
}

在这里,我想做的是:对于所有环境列表和某些操作,我使用“执行”谓词执行操作。并发送下一个事件,用于从操作的结果事件中添加新事件并从事件中删除当前事件(功能类似于保留事件队列。然后从队列中弹出一个事件并将新事件推送到现有事件中队列)。

以下是我的执行谓词的定义:

pred execute [u:UserEnv, u':UserEnv, r:Operation] {
     all e: u.ev, ns, ns':u.obj | {
      e = r.event.name &&
      ns = r.objectA &&
      ns' = r.objectB  
            => {
          u'.ev = u.ev + r.result.name - r.event.name
          ns.state = r.event.state 
          ns'.state = r.result.state  
      }
     }
}

在这里,我想做的是:每当我得到一个事件时,我都会执行相应的操作。我从该操作中获得了相应的两个对象。然后,将结果事件作为下一个事件(如队列)包括在内,并删除已经执行的事件名称。我根据操作事件和结果状态响应性地更改了这两个对象的状态。

有人可以指出我做错了什么地方吗?

0 个答案:

没有答案