void FullModelChecker::doNegate( Def & dc ) {
for (unsigned i=0; i<dc.d_cond.size(); i++) {
- if (!dc.d_value[i].isNull()) {
- dc.d_value[i] = dc.d_value[i]==d_true ? d_false : ( dc.d_value[i]==d_false ? d_true : dc.d_value[i] );
+ Node v = dc.d_value[i];
+ if (!v.isNull())
+ {
+ // In the case that the value is not-constant, we cannot reason about
+ // its value (since the range of this must be a constant or variable).
+ // In particular, returning null here is important if we have (not x)
+ // where x is a bound variable.
+ dc.d_value[i] =
+ v == d_true ? d_false : (v == d_false ? d_true : Node::null());
}
}
}
regress0/fmf/issue4850-force-card.smt2
regress0/fmf/issue4872-qf_ufc.smt2
regress0/fmf/issue5239-uf-ss-tot.smt2
+ regress0/fmf/issue5922-fmf-not-x.smt2
regress0/fmf/krs-sat.smt2
regress0/fmf/no-minimal-sat.smt2
regress0/fmf/QEpres-uf.855035.smtv1.smt2
--- /dev/null
+; COMMAND-LINE: --finite-model-find
+; EXPECT: unsat
+(set-logic ALL)
+(set-info :status unsat)
+(declare-fun f (Bool) Bool)
+(assert (forall ((x Bool)) (f (not x))))
+(assert (=> (f true) false))
+(check-sat)