我是Z3的新手(今天开始)。到目前为止喜欢它很多。伟大的工具。不幸的是语法让我感到困惑。
我想证明如果:
a ^ 3 = x y z = m (带有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)
该模型不满意。
我是否成功证明了我想要的东西?正如我所说,语法让我感到困惑,因为我是一个新手。
答案 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)
的情况,这是您最初想要证明的陈述。