将未解释的排序替换为Int后Z3超时

时间:2014-03-16 13:14:44

标签: z3

对于具有未解释排序的公式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)

1 个答案:

答案 0 :(得分:0)

原因是Z3无法决定"首先"和"第二"。

首先"首先"我正在获得:" sat"。

首先"首先"当行

(assert (not (= (f b0) (f b1))))

替换为

(assert  (= (f b0) (f b1)))

结果是" sat"。换句话说,Z3无法决定"首先"。 Z3的有效结果是"超时"因为"第一"和"第二"。

Z3在未解释函数组合方面存在问题。

你同意吗?