Z3不解量词表达式,表达式为sat
Z3 does not solve quantifier expression, expression is sat
使用 z3 v 4.8.1 - - 64 位 - 构建哈希码 016872a5e0f6 下面的脚本计算结果为 unsat
,但预期结果为 sat
。
- z3支持这样求解表达式吗?
不同的 smt-solver 可以解决像这样的表达式吗?
(set-option :print-success false)
(set-logic ALL)
(push 1)
(declare-const ss1 Int)
(declare-const ss3 Int)
(assert (forall ((t_ss3 Int)(t_ss1 Int))
(=>
(< t_ss1 t_ss3)
(and (and
(< ss1 ss3)
(= t_ss1 ss1))
(= t_ss3 ss3))
)))
(echo "Check if the P -> Q is satisfiable")
(check-sat)
(pop 1)
Z3在这里是正确的;您提出的脚本确实是 unsat
。这是你所说的:
- 设两个常量
ss1
和ss3
对于所有整数 t_ss3
和 t_ss1
,只要 t_ss1 < t_ss3
成立,就必须是这样的:
ss1 < ss3
- AND,
t_ss1
等于 ss1
- AND,
t_ss3
等于 ss3
这显然不适用于所有 t_ss1
和 t_ss3
。没有 ss1
和 ss3
可以满足 ALL t_ss1
和 t_ss2
。您只需要查看最后一个子句:您不能期望所有 t_ss3
等于任意 ss3
.
我怀疑你想表达一些其他的属性;但你没有正确编码。也许你想说如果 t_ss1
等于 ss1
并且 t_ss3
等于 ss3
和 t_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 中对其进行建模时获得更好的帮助。
使用 z3 v 4.8.1 - - 64 位 - 构建哈希码 016872a5e0f6 下面的脚本计算结果为 unsat
,但预期结果为 sat
。
- z3支持这样求解表达式吗?
不同的 smt-solver 可以解决像这样的表达式吗?
(set-option :print-success false) (set-logic ALL) (push 1) (declare-const ss1 Int) (declare-const ss3 Int) (assert (forall ((t_ss3 Int)(t_ss1 Int)) (=> (< t_ss1 t_ss3) (and (and (< ss1 ss3) (= t_ss1 ss1)) (= t_ss3 ss3)) ))) (echo "Check if the P -> Q is satisfiable") (check-sat) (pop 1)
Z3在这里是正确的;您提出的脚本确实是 unsat
。这是你所说的:
- 设两个常量
ss1
和ss3
对于所有整数
t_ss3
和t_ss1
,只要t_ss1 < t_ss3
成立,就必须是这样的:ss1 < ss3
- AND,
t_ss1
等于ss1
- AND,
t_ss3
等于ss3
这显然不适用于所有 t_ss1
和 t_ss3
。没有 ss1
和 ss3
可以满足 ALL t_ss1
和 t_ss2
。您只需要查看最后一个子句:您不能期望所有 t_ss3
等于任意 ss3
.
我怀疑你想表达一些其他的属性;但你没有正确编码。也许你想说如果 t_ss1
等于 ss1
并且 t_ss3
等于 ss3
和 t_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 中对其进行建模时获得更好的帮助。