Alloy 中没有字段的抽象签名的目的是什么?

What is the purpose of abstract signatures with no fields in Alloy?

我经常看到建模者在他们的模型中使用没有字段的抽象签名。抽象签名通常有子签名扩展但没有字段。例如,考虑杰克逊关于 Alloy 的书中的以下模型:

abstract sig A {}
sig A1 extends A {}
sig A2 extends A {}

没有字段,声明后A怎么用?将 A 抽象化有什么意义?如果 A 不是抽象的,模型将如何受到不同的约束?

你说得对,抽象签名的最大价值在于它有一个字段。因为 Alloy 有并集,所以你可以写 A1+A2 而不是 A。但即使没有,也有优势:通过将 A 声明为 abstract 信号,我可以使我的模型更容易更改。如果我添加一个新的 sig A3,我将不得不用 A1 + A2 + A3 替换 A1 + A2,但是对于一个抽象的 sig,它仍然是 A。它还为我提供了一个稍后添加字段的位置,并使规格更短。它允许我给它一个范围;如果我只有 A1A2,我将不得不分别设置它们的范围,但是将 A 的范围设置为 5(比方说)允许分析器以任何比例分配原子在 A1A2 之间。在可视化中,我可以明确地将设置应用于 A。