Z3 带有序参数的函数

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

似乎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 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