Z3在量词下推广等式的问题

Z3在量词下推广等式的问题,z3,quantifiers,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))))))

我有以下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)
(设置选项:生成模型为真)
(定义乐趣T_0($in1 Real)($in2 Real)
($out Real)($assms Bool)($prop Bool))Bool
(和($assms(<$in1$in2))
(=$prop(=>$ASSM(和(<$in1$out)(<$out$in2()))))
(在1$0()中声明fun$Real)
(声明乐趣$in2$0()真实)
(声明fun$out$0()真实)
(声明乐趣$assms$0()Bool)
(断言(所有($out$0 Real)($assms$0 Bool))
(不是(和(T_0$in1$0$in2$0$out$0$assms$0 trueщ)!)
(检查sat)
现在,如果我们简化断言,传播等式,z3会立即返回UNSAT(如预期的那样):

(定义乐趣1($in1 Real)($in2 Real)
($out Real)($prop Bool))Bool
(和($prop(=>(<$in1$in2)(和(<$in1$out)(<$out$in2()())))
(在1$0()中声明fun$Real)
(声明乐趣$in2$0()真实)
(声明fun$out$0()真实)
(断言(所有($out$0 Real)($assms$0 Bool))
(不是(和(T_1$in1$0$in2$0$out0$true())))
(检查sat)
这个例子似乎表明Z3不会在量词下传播等式。例如,以下断言有效(产生UNSAT):

(断言(用于所有($out$0 Real))
(和(非(=真(=>)(<$in1$0$in2$0)
(和(<$in1$0$out0$0)(<$out0$in2$0(()())()))))

有没有办法让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)
 (assert (forall (($out$0 Real)) 
     (and (not (= true (=> (< $in1$0 $in2$0) 
          (and (< $in1$0 $out$0) (< $out$0 $in2$0))))))))