Z3不解量词表达式,表达式为sat

Z3 does not solve quantifier expression, expression is sat

使用 z3 v 4.8.1 - - 64 位 - 构建哈希码 016872a5e0f6 下面的脚本计算结果为 unsat,但预期结果为 sat

Z3在这里是正确的;您提出的脚本确实是 unsat。这是你所说的:

  • 设两个常量ss1ss3
  • 对于所有整数 t_ss3t_ss1,只要 t_ss1 < t_ss3 成立,就必须是这样的:

    • ss1 < ss3
    • AND,t_ss1 等于 ss1
    • AND,t_ss3 等于 ss3

这显然不适用于所有 t_ss1t_ss3。没有 ss1ss3 可以满足 ALL t_ss1t_ss2。您只需要查看最后一个子句:您不能期望所有 t_ss3 等于任意 ss3.

我怀疑你想表达一些其他的属性;但你没有正确编码。也许你想说如果 t_ss1 等于 ss1 并且 t_ss3 等于 ss3t_ss1 < t_ss3,那么 ss1 < ss3?这将被编码如下:

(declare-const ss1 Int)
(declare-const ss3 Int)

(assert (forall ((t_ss3 Int) (t_ss1 Int))
        (=> (and (< t_ss1 t_ss3)
                 (= t_ss1 ss1)
                 (= t_ss3 ss3))
            (< ss1 ss3))))

(check-sat)

并且确实会产生 sat.

如果您能更好地描述您要表达的内容,您可以在不同问题的 SMT-Lib 中对其进行建模时获得更好的帮助。