对于具有未解释排序的公式B
Z3打印unsat
但是当我将排序B
替换为Int
时,它会打印timeout
(第二个脚本)。我想了解它的原因。
第一
(declare-sort A)
(declare-sort B)
(declare-fun f (B) A)
(declare-fun f-inv (A) B)
(declare-const b0 B)
(declare-const b1 B)
(assert (forall ((x B)) (= (f-inv (f x)) x)))
(assert (not (= (f b0) (f b1))))
(check-sat)
第二
(declare-sort A)
(declare-fun f (Int) A)
(declare-fun f-inv (A) Int)
(assert (forall ((x Int)) (= (f-inv (f x)) x)))
(assert (not (= (f 0) (f 1))))
(check-sat)
答案 0 :(得分:0)
原因是Z3无法决定"首先"和"第二"。
首先"首先"我正在获得:" sat"。
首先"首先"当行
(assert (not (= (f b0) (f b1))))
替换为
(assert (= (f b0) (f b1)))
结果是" sat"。换句话说,Z3无法决定"首先"。 Z3的有效结果是"超时"因为"第一"和"第二"。
Z3在未解释函数组合方面存在问题。
你同意吗?