// return RewriteResponse(REWRITE_AGAIN, resp);
// }
}
+
+ if (n[0].getKind() == kind::NOT)
+ {
+ // ite(not(c), x, y) ---> ite(c, y, x)
+ return RewriteResponse(
+ REWRITE_AGAIN, nodeManager->mkNode(kind::ITE, n[0][0], n[2], n[1]));
+ }
+
// else if (n[2].isConst()) {
// if(n[2] == ff){
// Node resp = (n[0]).andNode(n[1]);
<< " process base : " << curr << std::endl;
// Boolean return case, e.g. lambda x. (= x v) becomes
// lambda x. (ite (= x v) true false)
- index_eq = curr;
- curr_val = nm->mkConst(true);
- next = nm->mkConst(false);
+ bool pol = curr.getKind() != kind::NOT;
+ index_eq = pol ? curr : curr[0];
+ curr_val = nm->mkConst(pol);
+ next = nm->mkConst(!pol);
}
// [2] We ensure that "index_eq" is an equality, if possible.
regress0/aufbv/fuzz13.smtv1.smt2
regress0/aufbv/fuzz14.smtv1.smt2
regress0/aufbv/fuzz15.smtv1.smt2
+ regress0/aufbv/issue3737.smt2
regress0/aufbv/rewrite_bug.smtv1.smt2
regress0/aufbv/try3_sameret_functions_fse-bfs_tac.calc_next.il.fse-bfs.delta01.smtv1.smt2
regress0/aufbv/try5_small_difret_functions_wp_su.set_char_quoting.il.wp.delta01.smtv1.smt2
--- /dev/null
+(set-logic QF_UFBV)
+(declare-fun b ((_ BitVec 12) (_ BitVec 6)) Bool)
+(declare-fun a ((_ BitVec 11) (_ BitVec 9) (_ BitVec 15)) (_ BitVec 10))
+(declare-fun d () (_ BitVec 7))
+(declare-fun c ((_ BitVec 15) (_ BitVec 15) (_ BitVec 1)) Bool)
+(assert (let ((a!1 (a ((_ zero_extend 2) #b001010001)
+ ((_ sign_extend 8) (ite (bvsle #b001010001 #b001010001) #b1 #b0))
+ ((_ sign_extend 14) (ite (bvsle #b001010001 #b001010001) #b1 #b0))))
+ (a!6 (b ((_ zero_extend 11) (ite (bvsle #b001010001 #b001010001) #b1 #b0))
+ ((_ sign_extend 5) (ite (bvsle #b001010001 #b001010001) #b1 #b0)))))
+(let ((a!2 (c ((_ zero_extend 14) (ite (bvsle #b001010001 #b001010001) #b1 #b0))
+ ((_ zero_extend 6) #b001010001)
+ ((_ extract 3 3) a!1)))
+ (a!3 (bvule (ite (bvsle #b001010001 #b001010001) #b1 #b0)
+ (ite (b ((_ sign_extend 5) d) ((_ extract 7 2) a!1)) #b1 #b0)))
+ (a!4 (ite (c ((_ sign_extend 5) (bvsrem a!1 a!1))
+ ((_ zero_extend 6) #b001010001)
+ ((_ extract 8 8) (bvsrem a!1 a!1)))
+ #b1
+ #b0)))
+(let ((a!5 (bvslt a!4
+ (ite (b ((_ sign_extend 5) d) ((_ extract 7 2) a!1)) #b1 #b0))))
+ (ite (= a!2 a!3) (xor a!5 a!6) (= a!2 a!3))))))
+(set-info :status sat)
+(check-sat)