Z3 带有序参数的函数
似乎unterpret函数将参数视为无序的。 比如说,Z3 带有序参数的函数,z3,Z3,似乎unterpret函数将参数视为无序的。 比如说, (declare-fun Lturn (Int Int Int) Bool) (assert (forall ((x Int) (y Int) (z Int)) (not (= (Lturn x y z) (Lturn x z y))))) (check-sat) 结果不令人满意。 以上代码在此处提供: 为了克服这种情况,我尝试使用数组: (declare-fun Lturn ((Array Int In
(declare-fun Lturn (Int Int Int) Bool)
(assert (forall ((x Int) (y Int) (z Int))
(not (= (Lturn x y z) (Lturn x z y)))))
(check-sat)
结果不令人满意。
以上代码在此处提供:
为了克服这种情况,我尝试使用数组:
(declare-fun Lturn ((Array Int Int)) Bool)
(assert (forall ((A1 (Array Int Int)) (A2 (Array Int Int)))
(=> (and (= (select A1 1) (select A2 1))
(= (select A1 2) (select A2 3))
(= (select A1 3) (select A2 2)))
(not (= (Lturn A1) (Lturn A2))))))
(check-sat)
结果是“未知的”
以上代码在此处提供:
是否有任何方法可以让阵列版本处于SAT状态 函数参数不是无序的。你能给出一个函数
Lturn
,使你的断言正确吗?下面是一个简单的例子,只有两个参数:
对于x==0&&y==0&&z==0
没有函数使f(x,y,z)!=f(x,z,y)
因为f(0,0,0)!=f(0,0,0)
始终为false