第一个代码,在Alloy Analyzer 4.2中找不到任何实例,但是第二个代码找不到! 有什么区别?我的期望是,#>当我执行“run show for 1”时,0和#= 1的行为相同。
1:
sig Fruit {}
pred show() { #Fruit > 0}
run show for 1
2:
sig Fruit {}
pred show() { #Fruit = 1}
run show for 1
答案 0 :(得分:0)
运行命令时,您会看到位宽(确定合金的最大Int)为0。
Executing "Run show for 1"
Solver=sat4j Bitwidth=0 MaxSeq=0 SkolemDepth=1 Symmetry=20
0 vars. 0 primary vars. 0 clauses. 2ms.
No instance found. Predicate may be inconsistent. 0ms.
您可以通过明确更改位宽来更改此项:
sig Fruit {}
pred show() { #Fruit>0}
run show for 1 but 2 int
Executing "Run show for 1 but 2 int"
Solver=sat4j Bitwidth=2 MaxSeq=1 SkolemDepth=1 Symmetry=20
1 vars. 1 primary vars. 1 clauses. 3ms.
. found. Predicate is consistent. 3ms.
我认为当你使用'>'时运算符你需要位宽但是当你使用'='时它不是必需的。
在Alloy中使用Int非常强烈<>> 。