Z3Py:为什么不能满足以下假设?
Z3Py: Why are the following assumptions not satisfiable?
这可能是一个幼稚的问题,但为什么下面的假设不能满足要求?
最后一个假设不是直接从假设 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
有没有办法对求解器确定为可满足的一组类似假设进行编码?
谢谢!
Z3 returns "unknown",这意味着它无法找到断言的模型。背景是您的约束对自由函数(和整数)使用非线性算术。 Z3 没有为您的公式所在的片段提供决策过程。相反,它尝试了一个不完整的搜索过程,并提出了一个既不能建立也不能反驳断言的状态。
这可能是一个幼稚的问题,但为什么下面的假设不能满足要求?
最后一个假设不是直接从假设 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
有没有办法对求解器确定为可满足的一组类似假设进行编码?
谢谢!
Z3 returns "unknown",这意味着它无法找到断言的模型。背景是您的约束对自由函数(和整数)使用非线性算术。 Z3 没有为您的公式所在的片段提供决策过程。相反,它尝试了一个不完整的搜索过程,并提出了一个既不能建立也不能反驳断言的状态。