简而言之,我希望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的选择时,求解器只是超时了。
我很感激能得到任何帮助:)