我有以下Alloy模块并运行命令:
sig A { x : set A }
run {all a: A| #a.x<3 and #a.x>1} for exactly 2 A, 2 int
使用“禁止溢出:否”合金分析仪4.2(生成日期:2012-09-25)找不到实例。我相信原因是由于常量3
的溢出,运行谓词读取{all a: A| #a.x<-1 and #a.x>1}
。
使用“禁止溢出:是”,Alloy Analyzer会找到一个实例。
---INSTANCE---
integers={-2, -1, 0, 1}
univ={-1, -2, 0, 1, A$0, A$1}
Int={-1, -2, 0, 1}
seq/Int={0}
String={}
none={}
this/A={A$0, A$1}
this/A<:x={A$0->A$0, A$0->A$1, A$1->A$0, A$1->A$1}
Alloy Evaluator告诉我,run命令中使用的谓词{all a: A| #a.x<3 and #a.x>1}
的计算结果为false
。
有人可以解释一下这种行为吗?评估器和分析器中的整数比较的语义是否存在差异?
编辑:我注意到最新实验版本的行为有所不同:Alloy 4.2_2014-03-07。它找不到实例。此行为符合预期。
答案 0 :(得分:2)
您已在问题中提供了所有正确的答案,因此我只能快速重申这些答案