繁体   English   中英

Z3求解f(x) > y in Z3Py抛出异常

[英]Z3 solve f(x) > y in Z3Py throws an exception

我正在尝试执行以下求解器:

solver = Solver()
f = z3.Function('f', IntSort(), IntSort())
y = z3.Int('y')
solver.add(f > y)
print(solver.check())

我得到以下异常:

z3.z3types.Z3Exception: Python 值不能用作 Z3 integer

在这条线上:

solver.add(f > y)

我是 Z3 的新手,也许我理解错了。

正如 Christoph 所提到的,您无法将 function 与一个数字进行比较,无论它是大于/小于还是相等。 这真的与z3无关。 作为数学陈述意味着什么?

假设您要说的是您希望f对于它可以接收的任何输入产生一个大于y的值,您可以这样编码:

from z3 import *

s = Solver()

f = Function('f', IntSort(), IntSort())
y = Int('y')
x = Int('x')
s.add(ForAll([x], f(x) > y))

if s.check() == sat:
    print(s.model())
else:
    print("not sat")

这会打印出相当无趣的 model:

[y = 0, f = [else -> 1]]

它将y设置为0 ,并将f设置为始终返回1的常数 function ; 但至少它是类型正确的。

这就是你所追求的吗?

在我的问题的上下文中, function arguments 是常量,因此不需要通用量词。 我还忘了声明 function 中使用的常量,并将它们用作 function 中的 arguments。

from z3 import *

s = Solver()

f = Function('f', IntSort(), IntSort())
y = Int('y')
x = Int('x')
z = Int('z')
s.add(f(x,z) > y)

if s.check() == sat:
    print(s.model())
else:
    print("not sat")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM