Z3Py:为什么以下假设不能令人满意?

时间:2016-03-30 22:30:18

标签: python z3 z3py

这可能是一个天真的问题,但为什么以下内容不能产生令人满意的假设?

最后的假设不是直接来自假设2和3吗?

import z3

# Initialize variables
t = z3.Int('t')
z = z3.Real("z")
y = z3.Real("y")
M = z3.Real("M")
x = z3.Function("x", z3.IntSort(), z3.RealSort())
f = z3.Function("f", z3.RealSort(), z3.RealSort())
d_f1 = z3.Function("d_f1", z3.RealSort(), z3.RealSort())

# Add assumptions
s = z3.Solver()

s.add(f(y) == f(z) + d_f1(z) *(y-z))
s.add(d_f1(z) < M)
s.add(f(x(t+1)) == f(x(t)) + d_f1(x(t)) *(x(t+1)-x(t)))

s.add(f(x(t+1)) < f(x(t)) + M *(x(t+1)-x(t)))

# Check if assumptions are satisfiable
s.check()

我得到的结果是,

unknown

有没有办法对一组被解算器确定为可满足的类似假设进行编码?

谢谢!

1 个答案:

答案 0 :(得分:1)

Z3返回&#34; unknown&#34;,这意味着它无法找到断言的模型。背景是你的约束使用非线性算法而不是自由函数(和整数)。 Z3没有为你的公式所在的片段提供决策程序。相反,它会尝试一个不完整的搜索程序,并提出一个既不能建立也不能反驳断言的状态。