Z3表示如果a ^ 3 = x * y * z则3a <= x + y + z

时间:2016-08-19 13:09:54

标签: z3 smt

我是Z3的新手(今天开始)。到目前为止喜欢它很多。伟大的工具。不幸的是语法让我感到困惑。

我想证明如果:

  

a ^ 3 = x y z = m (带有a,x,y,z,m(0..1))

,然后

  

3a&lt; =(x + y + z)

我是通过尝试找到满足该模型的模型来实现的:

  

3a&gt; (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)

该模型不满意。

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

2 个答案:

答案 0 :(得分:3)

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

  • A有效iff negation(A)不满意。

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

特别是,对于您的示例,

  

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

当且仅当

  

(a^3 = m) /\ (x*y*z = m) /\ (3a > x+y+z)无法解决。

答案 1 :(得分:3)

您的解决方案是正确的。

说明:您所写的内容相当于:

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 = x y z = m (带有a,x,y,z,m(0..1))

然后不能成为:

  

3a&gt; (X + Y + Z)

因为,如果确实发生了这种情况,那么您提出的SMT问题将是令人满意的,这与Z3声称SMT问题不可满足的说法相矛盾。如果不是3a > (x+y+z)的情况,则必须是3a <= (x+y+z)的情况,这是您最初想要证明的陈述。