【发布时间】:2013-09-14 13:07:47
【问题描述】:
我在 Alloy 上做了一些工作,所以我对它有一些了解。然而,很多速记并没有真正涵盖任何地方。我想知道的是在下面的示例中:
open util/relation
abstract sig Proc { prv : lone (Proc - Remove)
}{
}
fact {acyclic[prv,Proc] // no cycles
}
sig Remove extends Proc{}
sig Begin extends Proc{}{no prv}
sig Action extends Proc{}
pred show() {}
run show for 3
我想确保最终的 Proc 始终是 Begin(目前它也可以是 Action)。
有很多方法可以手写。我在下面包含了一个,当包含它时,可以确保最终的 Proc(即不在域中的)始终是 Begin。
fact {
all p : Proc | p not in dom[prv] implies p in Begin
}
但是,我喜欢使用 (Proc - Remove) 的简写,例如,因为它使事情更容易阅读,这意味着 Remove 不能从另一个 Proc 链接到。我希望我已经解释得很好。我认为会有一个非常明显的答案,但我想不出它是什么。请问有什么想法吗?
【问题讨论】:
-
我真的不明白你想要达到什么目的。你能把你的断言写长一点,然后我们看看它是否可以缩短?
-
抱歉问题措辞不当,我希望现在这有助于理解。
标签: alloy