私は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 にもなる可能性があります)。
手書きで書く方法はたくさんあります。以下に 1 つ含めました。これを含めると、最終的な Proc (つまり、ドメインにないもの) が常に Begin になります。
fact {
all p : Proc | p not in dom[prv] implies p in Begin
}
ただし、(Proc - Remove) の行に沿って省略形を使用するのが好きです。たとえば、読みやすくするためです。つまり、Remove を別の Proc からリンクすることはできません。うまく説明できたと思います。本当に明白な答えがあると思いますが、それが何であるかはわかりません。アイデアはありますか?