我在 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 链接到。我希望我已经解释得很好。我认为会有一个非常明显的答案,但我想不出它是什么。请问有什么想法吗?