限制Z3中未解释函数的模型选择

限制Z3中未解释函数的模型选择,z3,smt,Z3,Smt,简而言之,我想让z3来验证表单的含义 所有x1、x2、…、xn的。存在y1,…,yn。P=>Q 我的困难在于,我需要根据变量x1,…,xn获得y1,…,yn,的定义,这些变量导致蕴涵成立 比如说。假设我要检查: 所有x1、x2的。存在y。(=x1(fx2))=>(=x1(fy)) 我想了解,通过将y设置为x2,这一含义成立 对于这个具体的例子,我试着让z3给我一个模型: (声明f(Int)Int) (对于所有((x Int)(y Int))(存在((b Int))(=>(=x(f_y))(=x(

简而言之,我想让z3来验证表单的含义 所有x1、x2、…、xn的
。存在y1,…,yn。P=>Q
我的困难在于,我需要根据变量
x1,…,xn
获得
y1,…,yn,
的定义,这些变量导致蕴涵成立

比如说。假设我要检查:

所有x1、x2的
。存在y。(=x1(fx2))=>(=x1(fy))

我想了解,通过将
y
设置为
x2
,这一含义成立

对于这个具体的例子,我试着让z3给我一个模型:

(声明f(Int)Int)

(对于所有((x Int)(y Int))(存在((b Int))(=>(=x(f_y))(=x(f_b))))

然而,它给了我一些模型,这些模型将f实例化为 在我的例子中没有意义的函数。例如,函数 将所有整数映射到0。当我试图通过断言f是满射的来限制f的选择时,解算器刚好超时

我非常感谢能得到的任何帮助:)

您是否尝试过禁用MBQI(例如通过
(设置选项:smt.MBQI false)
)?您是否尝试过禁用MBQI(例如通过
(设置选项:smt.MBQI false)
)?