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

时间:2016-09-29 17:46:12

标签: z3 smt

简而言之,我希望z3验证表单的含义 forall x1, x2, ..., xn. exists y1, ..., yn. P => Q 我的困难在于,我需要根据导致含义的变量y1, ..., yn获得x1, ..., xn的定义。

例如。假设我想检查:

forall x1, x2. exists y. (= x1 (f x2)) => (= x1 (f y))

我想通过将y设置为x2来理解这一含义。

对于这个具体的例子,我试图通过让z3给我一个模型来做到这一点:

(declare-fun f (Int) Int)

(forall ((_x Int) (_y Int))(exists ((_b Int)) (=> (= _x (f _y)) (= _x (f _b)))))

然而,它给了我实例化f的模型 在我的案例中没有意义的功能。例如,功能 将所有整数映射为0.当我试图通过断言它是满射的来约束f的选择时,求解器只是超时了。

我很感激能得到任何帮助:)

0 个答案:

没有答案