首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >util/序模和有序子签名

util/序模和有序子签名
EN

Stack Overflow用户
提问于 2013-06-25 22:39:39
回答 2查看 1.1K关注 0票数 1

考虑以下合金模型:

代码语言:javascript
复制
open util/ordering[C]

abstract sig A {}
sig B extends A {}
sig C extends A {}

pred show {}
run show for 7

我理解为什么当我run show for 7时,这个模型的所有实例都有7个签名C原子(嗯,这不是完全正确的)。我知道有序签名总是有尽可能多的原子,因为util/ ordered告诉我是这样的。但这与原因并不完全相同。)

但是为什么这个模型的实例中没有任何特征B的原子呢?这是为util/ordering执行的特殊处理的副作用吗?(意欲?意料之外?)使用/排序是否只适用于顶级签名?

还是我错过了别的什么事?

在这个模型中,这是抽象的,我真的很想有一个名字,比如A来表示B和C的结合,我非常希望C是有序的,我真的希望B是无序的和非空的。目前,我似乎能够实现其中的任何两个目标;是否有办法同时管理这三个目标?

增编:我注意到指定run show for 3 but 3 B, 3 C确实实现了我的三个目标。相反,run show for 2 but 3 B根本不产生任何实例。也许我需要更好地理解范围规范的语义。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-26 00:09:55

简短的回答:报告的现象是默认和隐式范围规则的结果;这些规则将在语言参考的B.7.6节中讨论。

较长的答覆:

最终的怀疑是,我应该更仔细地研究范围规范的语义,这是有道理的。在这里所示的示例中,规则的工作原理与文档完全相同:

  • 对于run show for 7,签名A的默认范围为7;B和C也是如此。使用util/ordering模块强制C原子数为7;这也耗尽了签名A的配额,从而使签名B的隐式范围为0。
  • 对于run show for 2 but 3 B,签名A的默认范围为2,而B的显式范围为3。这使得签名C的隐式签名为2减3,或负1。这似乎是不一致的;范围界应该是自然数。
  • 对于run show for 2 but 3 B, 3 C,signature的隐界为6(子签名界之和)。

为了更好地理解范围规则,执行以下所有命令对此用户非常有用:

代码语言:javascript
复制
run show for 3
run show for 3 but 2 C
run show for 3 but 2 B
run show for 3 but 2 B,  2 C
run show for 3 but 2 A
run show for 3 but 2 A, 2 C
run show for 3 but 2 A, 2 B
run show for 3 but 2 A, 2 B, 2 C

我将把这个问题留待其他人回答,并希望它能帮助其他用户。

票数 2
EN

Stack Overflow用户

发布于 2013-06-26 16:51:50

我知道有序签名总是有尽可能多的原子,因为util/ ordered告诉我是这样的。但这和原因不完全一样。

其原因是,当强制一个有序的sig包含尽可能多的原子时,翻译器就有可能生成一个高效的对称破缺谓词,在大多数有有序sig的例子中,这会带来更好的求解时间。因此,这是一个简单的权衡,而设计决定是执行这个额外的约束,以获得性能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17308778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档