为什么 Alloy 中不出现简单整数反例?
Why doesn't simple integer counterexample occur in Alloy?
我正在尝试对数值变量和布尔变量之间的关系建模,其中如果数值变量在特定范围内,则布尔变量将更改值。我是 Alloy 的新手,无法理解如何充分限制我的范围以产生明显的反例。我的代码如下:
open util/boolean
one sig Object {
discrete : one Bool,
integer : one Int
}
fact { all o : Object | o.integer > 0 and o.integer < 10 }
fact { all o : Object | o.integer > 5 iff o.discrete = False }
assert discreteCondition { all o : Object | o.discrete = True }
check discreteCondition for 1000
由于 o.integer
是整数值,范围从 0 到 10,它只能是 10 个不同选择之一。而且我指定每个Object
应该只有一个integer
和一个discrete
。所以对我来说似乎合理的是这里实际上只有 10 个案例要检查:integer
的每个值一个案例。然而,即使有 1000 个案例,我也得到
No counterexample found.
如果我删除 integer
变量和相关事实,那么它几乎可以立即找到反例。我也尝试过使用其他求解器并在选项中增加各种深度和内存值,但这没有帮助,很明显我的代码有问题。
如何限制我的范围以使 Alloy 找到反例(通过遍历 integer
的可能值)?谢谢!
默认情况下,用于表示整数的位宽为 4,因此在实例生成期间仅考虑 [-8,7] 范围内的整数,因此,由于整数溢出,您的第一个事实是无效的(如10 超出此范围)。
要解决此问题,请将使用的位宽至少增加到 5:
check discreteCondition for 10 but 5 Int.
请注意,1000 的范围并不意味着您在分析中考虑了 1000 个案例。范围是生成实例中存在的最大原子数,在给定签名后输入。在您的情况下,您只有一个多重签名。所以用 1 或 10000 的范围分析你的模型不会改变任何东西。在生成的实例中仍然只有一个对象原子。
您可能想查看此 Q/A 以了解有关范围的更多信息
我正在尝试对数值变量和布尔变量之间的关系建模,其中如果数值变量在特定范围内,则布尔变量将更改值。我是 Alloy 的新手,无法理解如何充分限制我的范围以产生明显的反例。我的代码如下:
open util/boolean
one sig Object {
discrete : one Bool,
integer : one Int
}
fact { all o : Object | o.integer > 0 and o.integer < 10 }
fact { all o : Object | o.integer > 5 iff o.discrete = False }
assert discreteCondition { all o : Object | o.discrete = True }
check discreteCondition for 1000
由于 o.integer
是整数值,范围从 0 到 10,它只能是 10 个不同选择之一。而且我指定每个Object
应该只有一个integer
和一个discrete
。所以对我来说似乎合理的是这里实际上只有 10 个案例要检查:integer
的每个值一个案例。然而,即使有 1000 个案例,我也得到
No counterexample found.
如果我删除 integer
变量和相关事实,那么它几乎可以立即找到反例。我也尝试过使用其他求解器并在选项中增加各种深度和内存值,但这没有帮助,很明显我的代码有问题。
如何限制我的范围以使 Alloy 找到反例(通过遍历 integer
的可能值)?谢谢!
默认情况下,用于表示整数的位宽为 4,因此在实例生成期间仅考虑 [-8,7] 范围内的整数,因此,由于整数溢出,您的第一个事实是无效的(如10 超出此范围)。
要解决此问题,请将使用的位宽至少增加到 5:
check discreteCondition for 10 but 5 Int.
请注意,1000 的范围并不意味着您在分析中考虑了 1000 个案例。范围是生成实例中存在的最大原子数,在给定签名后输入。在您的情况下,您只有一个多重签名。所以用 1 或 10000 的范围分析你的模型不会改变任何东西。在生成的实例中仍然只有一个对象原子。
您可能想查看此 Q/A 以了解有关范围的更多信息