这是Z3上下文:
(forall ((X (Array Int (Array Int Real))) (i Int) (j Int))
(let ((a!1 (* (- 1) (to_int (select (select X i) j)))))
(= (+ (testArr X i j) a!1) 0))))
这意味着:
forall X,i,j. testArr(X,i,j) == X[i][j]
现在,我试图证明两个类似的断言:
1 (=> (= (select (select Z i1) j1) (select (select X i) j))
(= (select (select Z i1) j1) (testArr X i j)))
和
2 (=> (= v (select (select X i) j))
(= v (to_real (testArr X i j))))
第二个断言Z3返回有效,但第一个断言Z3返回无效,而在其他示例中Z3有时返回unknown。 的为什么??