Z3在量词下传播均衡问题

时间:2014-08-19 22:56:22

标签: z3 quantifiers

我有以下Z3超时的简单示例:

(set-option :produce-models true) 
(define-fun T_0 (($in1 Real) ($in2 Real)
  ($out Real) ($assms Bool) ($prop Bool)) Bool 
   (and (= $assms (< $in1 $in2)) 
        (= $prop (=> $assms (and (< $in1 $out) (< $out $in2))))))

(declare-fun $in1$0 () Real)
(declare-fun $in2$0 () Real)
(declare-fun $out$0 () Real)
(declare-fun $assms$0 () Bool)

(assert (forall (($out$0 Real) ($assms$0 Bool)) 
           (not (and (T_0 $in1$0 $in2$0 $out$0 $assms$0 true)))))
(check-sat)

现在,如果我们简化断言,传播相等,z3会立即返回UNSAT(正如预期的那样):

(define-fun T_1 (($in1 Real) ($in2 Real)
    ($out Real) ($prop Bool)) Bool 
      (and  (= $prop (=> (< $in1 $in2) (and (< $in1 $out) (< $out $in2))))))
(declare-fun $in1$0 () Real)
(declare-fun $in2$0 () Real)
(declare-fun $out$0 () Real)
(assert (forall (($out$0 Real) ($assms$0 Bool)) 
           (not (and (T_1 $in1$0 $in2$0 $out$0 true)))))
(check-sat)

这个例子似乎表明Z3不会在量词下传播等式。例如,以下断言有效(产生UNSAT):

 (assert (forall (($out$0 Real)) 
     (and (not (= true (=> (< $in1$0 $in2$0) 
          (and (< $in1$0 $out$0) (< $out$0 $in2$0))))))))

有没有办法让z3传播均等,或者选择另一种使用等式的搜索策略?

0 个答案:

没有答案