【发布时间】:2014-11-20 18:23:26
【问题描述】:
我很好奇什么时候开始计算,显然某些运算符被转换为子句而不是被计算:
abstract sig Element {}
one sig A,B,C extend Element {}
one sig Test {
test: set Element
}
pred Test1 { Test.test = A+B }
pred Test2 { Test.test = Element-C }
分别为Test1 和Test2 运行它会给出不同数量的变量/子句,具体来说:
Test1: 0 vars, 0 primary vars, 0 clauses
Test2: 5 vars, 3 primary vars, 4 clauses
因此,尽管 Element 是 abstract 并且它的所有成员及其基数都是已知的,但似乎没有提前计算差异,而总和是。我不想做任何假设,所以我对为什么会这样感兴趣。 + 操作符是特殊的吗?
为了提供一些上下文,我尝试限制关系的域并发现仅使用 + 似乎更有效,即使事先完全知道集合。
【问题讨论】:
标签: alloy