Z3中的量词

时间:2015-08-24 12:05:36

标签: z3 quantifiers

基本上,我想让Z3给我一个值大于10的任意整数。所以我写下面的语句:

(declare-const x (Int))
(assert (forall ((i Int)) (> i 10)))
(check-sat)
(get-value(x))

如何将此量词应用于我的模型?我知道你可以写(assert (> x 10))来实现这个目标,但我的意思是我想在我的模型中使用量词,所以每次我声明一个整数常量,其值保证超过10,所以我没有为我声明的每个整数常量插入语句(assert (> x 10))。如果我必须使用宏来防止重复代码,那么量词的实际用途是什么?

1 个答案:

答案 0 :(得分:1)

您需要约束每个单独声明的int。 x > 10是正确的方法。

您可以使用宏或任何其他codegen技术。在SMT求解器中,所有这些都扩展到常规约束。它没有运行时影响。

forall ((i Int)) (> i 10))表示“所有的投注都超过10?”这是假的。

量词不会对您声明的所有变量进行量化。它们仅对绑定变量进行量化,这里i