Var x = var(trail[i]);
if (seen[x]) {
if (reason(x) == CRef_Undef) {
- // this is the case when p was a unit
- if (x == var(p))
- continue;
-
- assert (marker[x] == 2);
- assert (level(x) > 0);
- out_conflict.push(~trail[i]);
+ // we skip p if was a learnt unit
+ if (x != var(p)) {
+ assert (marker[x] == 2);
+ assert (level(x) > 0);
+ out_conflict.push(~trail[i]);
+ }
} else {
Clause& c = ca[reason(x)];
for (int j = 1; j < c.size(); j++)
}
seen[x] = 0;
}
+ assert (seen[x] == 0);
}
assert (out_conflict.size());
}
--- /dev/null
+(set-logic QF_BV)
+(set-info :status sat)
+(declare-fun v0 () (_ BitVec 2))
+(assert
+ (xor
+ (bvslt (_ bv0 5)
+ (bvlshr (bvadd (_ bv5 5) ((_ sign_extend 3) v0)) ((_ sign_extend 3) v0)))
+ (bvult (_ bv5 5)
+ (bvlshr (bvadd (_ bv5 5) ((_ sign_extend 3) v0)) ((_ sign_extend 3) v0)))))
+(check-sat)
+
--- /dev/null
+(set-logic QF_BV)
+(set-info :status sat)
+(declare-fun v0 () (_ BitVec 4))
+(assert (let ((e1(_ bv0 1)))
+(let ((e2(_ bv11134 16)))
+(let ((e3 (bvadd e2 ((_ sign_extend 12) v0))))
+(let ((e4 (ite (= e2 ((_ sign_extend 12) v0)) (_ bv1 1) (_ bv0 1))))
+(let ((e5 (bvlshr e3 ((_ sign_extend 12) v0))))
+(let ((e6 (bvxnor e2 ((_ zero_extend 12) v0))))
+(let ((e7 (ite (bvult ((_ sign_extend 15) e1) e2) (_ bv1 1) (_ bv0 1))))
+(let ((e8 (bvugt e7 e1)))
+(let ((e9 (bvule ((_ sign_extend 3) e7) v0)))
+(let ((e10 (bvsgt e5 ((_ zero_extend 12) v0))))
+(let ((e11 (= e6 e3)))
+(let ((e12 (bvslt ((_ zero_extend 15) e4) e5)))
+(let ((e13 (bvugt e5 e2)))
+(let ((e14 (ite e10 e8 e10)))
+(let ((e15 (xor e13 e11)))
+(let ((e16 (xor e14 e15)))
+(let ((e17 (ite e9 e12 e16)))
+e17
+))))))))))))))))))
+(check-sat)