考虑以下合金模型:
open util/ordering[C]
abstract sig A {}
sig B extends A {}
sig C extends A {}
pred show {}
run show for 7
我理解为什么,当 I 时run show for 7
,该模型的所有实例都有 7 个签名 C 原子。(嗯,这不太正确。我知道有序签名将始终具有范围允许的尽可能多的原子,因为 util/ordering 告诉我是这样。但这与为什么不完全相同。)
但是为什么这个模型的实例没有任何签名 B 的原子?这是为 util/ordering 执行的特殊处理的副作用吗?(有意?无意?) util/ordering 是否仅适用于顶级签名?
或者还有其他我想念的事情吗?
在这个模型中,这是抽象的,我真的很想给 B 和 C 的联合起一个像 A 这样的名字,我真的希望 C 是有序的,我真的希望 B 是无序的并且非空。目前,我似乎能够实现其中任何两个目标;有没有办法同时管理这三个?
[附录:我注意到指定run show for 3 but 3 B, 3 C
确实实现了我的三个目标。相比之下,run show for 2 but 3 B
根本不产生任何实例。也许我需要更好地理解范围规范的语义。]