基本上,我想让Z3给我一个值大于10的任意整数。所以我写下面的语句:
(declare-const x (Int))
(assert (forall ((i Int)) (> i 10)))
(check-sat)
(get-value(x))
如何将此量词应用于我的模型?我知道你可以写(assert (> x 10))
来实现这个目标,但我的意思是我想在我的模型中使用量词,所以每次我声明一个整数常量,其值保证超过10,所以我没有为我声明的每个整数常量插入语句(assert (> x 10))
。如果我必须使用宏来防止重复代码,那么量词的实际用途是什么?
答案 0 :(得分:1)
您需要约束每个单独声明的int。 x > 10
是正确的方法。
您可以使用宏或任何其他codegen技术。在SMT求解器中,所有这些都扩展到常规约束。它没有运行时影响。
forall ((i Int)) (> i 10))
表示“所有的投注都超过10?”这是假的。
量词不会对您声明的所有变量进行量化。它们仅对绑定变量进行量化,这里i
。