Z3 表明如果 a^3=x*y*z 那么 3a <= x+y+z

Z3 to show that if a^3=x*y*z then 3a <= x+y+z

我是 Z3 的新手(今天开始)。到目前为止非常喜欢它。很棒的工具。不幸的是,语法让我有点困惑。

我想证明如果:

a^3 = xyz = m ( with a, x, y, z, m (0..1) )

然后:

3a <= (x+y+z)

我通过尝试找到满足以下条件的模型来做到这一点:

3a > (x+y+z)

这是 Z3 代码:

(declare-const a Real)
(declare-const x Real)
(declare-const y Real)
(declare-const z Real)
(declare-const m Real)

(assert (> a 0))
(assert (< a 1))
(assert (> x 0))
(assert (< x 1))
(assert (> y 0))
(assert (< y 1))
(assert (> z 0))
(assert (< z 1))
(assert (> m 0))
(assert (< m 1))

(assert (= (* (* a a) a) m))
(assert (= (* (* x y) z) m))
(assert (> (* 3.0 a) (+ (+ z y) x) ))
(check-sat)

模型不满意

我成功证明了我想要的吗?正如我所说,语法让我感到困惑,因为我是一个新手。

我认为您的解决方案是正确的。让我解释一下如何使用 Z3 来证明语句 A 的有效性。关键思想是,在经典逻辑中,例如命题逻辑和谓词逻辑:

  • A 有效当且仅当 negation(A) 不可满足。

这是一个众所周知的结果。您可以在许多教科书和资料中找到它,例如 this slide 的第 4 页。因此,P -> Q 的有效性可以通过检查其否定的不可满足性来证明:P /\ negation(Q)

特别是,对于您的示例,

(a^3 = x*y*z = m) -> (3a <= x+y+z) is Valid,

当即

(a^3 = m) /\ (x*y*z = m) /\ (3a > x+y+z) is Unsatifiable.

您的解决方案是正确的。

说明:你写的等同于:

0 < x < 1
0 < y < 1
0 < z < 1
0 < m < 1
a * a * a = m
x * y * z = m
3 * a > x + y + z

Z3 说这是无法满足的。因此,如果

a^3 = xyz = m ( with a, x, y, z, m (0..1) )

那么不能是这样的:

3a > (x+y+z)

因为,如果确实发生这种情况,那么您提出的 SMT 问题将是可满足的,这与 Z3 声称 SMT 问题不可满足的说法相矛盾。如果不能是3a > (x+y+z)的情况,那么一定是3a <= (x+y+z)的情况,也就是你原本想证明的命题