系统定义:每当发生特定事件时,我都希望将相应操作的对象的状态更改为_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
}
}
}
在这里,我想做的是:每当我得到一个事件时,我都会执行相应的操作。我从该操作中获得了相应的两个对象。然后,将结果事件作为下一个事件(如队列)包括在内,并删除已经执行的事件名称。我根据操作事件和结果状态响应性地更改了这两个对象的状态。
有人可以指出我做错了什么地方吗?