This PR fixes another subtle proof issue in the circuit propagator concerning negated ites.
Fixes cvc5/cvc5-projects#309.
d_parent[0],
!c);
}
- return mkResolution(mkProof(c ? PfRule::NOT_ITE_ELIM1 : PfRule::NOT_ITE_ELIM2,
- {assume(d_parent.notNode())}),
- d_parent[0],
- !c);
+ return mkNot(
+ mkResolution(mkProof(c ? PfRule::NOT_ITE_ELIM1 : PfRule::NOT_ITE_ELIM2,
+ {assume(d_parent.notNode())}),
+ d_parent[0],
+ !c));
}
std::shared_ptr<ProofNode> ProofCircuitPropagatorBackward::iteIsCase(unsigned c)
regress0/preprocess/proj-issue305-circuit-prop-ite-b.smt2
regress0/preprocess/proj-issue305-circuit-prop-ite-c.smt2
regress0/preprocess/proj-issue305-circuit-prop-ite-d.smt2
+ regress0/preprocess/proj-issue309-circuit-prop-ite.smt2
regress0/print_define_fun_internal.smt2
regress0/print_lambda.cvc.smt2
regress0/print_model.cvc.smt2
--- /dev/null
+; EXPECT: sat
+(set-logic ALL)
+(set-option :check-proofs true)
+(declare-fun a () Bool)
+(declare-fun c () Bool)
+(declare-fun d () Bool)
+(assert (not a))
+(assert (not (ite a d (not c))))
+(check-sat)