This PR goes back to #7446 and implements a proper fix that handles both symmetrical cases.
}
if (d_parentAssignment)
{
- return mkResolution(
- mkProof(PfRule::ITE_ELIM2, {assume(d_parent)}), d_parent[c + 1], true);
+ return mkResolution(mkProof(c == 0 ? PfRule::ITE_ELIM1 : PfRule::ITE_ELIM2,
+ {assume(d_parent)}),
+ d_parent[c + 1],
+ true);
}
return mkResolution(
mkProof(PfRule::NOT_ITE_ELIM2, {assume(d_parent.notNode())}),
regress0/preprocess/preprocess_14.cvc.smt2
regress0/preprocess/preprocess_15.cvc.smt2
regress0/preprocess/proj-issue304-circuit-prop-xor.smt2
- regress0/preprocess/proj-issue305-circuit-prop-ite.smt2
+ regress0/preprocess/proj-issue305-circuit-prop-ite-a.smt2
+ regress0/preprocess/proj-issue305-circuit-prop-ite-b.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-const x Bool)
+(declare-const y Bool)
+(declare-const z Bool)
+(assert y)
+(assert (not z))
+(assert (ite x y z))
+(check-sat)
\ No newline at end of file
--- /dev/null
+; EXPECT: sat
+(set-logic ALL)
+(set-option :check-proofs true)
+(declare-fun a () Bool)
+(declare-fun b () Bool)
+(declare-fun c () Bool)
+(assert c)
+(assert (not b))
+(assert (ite a b c))
+(check-sat)
\ No newline at end of file
+++ /dev/null
-; EXPECT: sat
-(set-logic ALL)
-(set-option :check-proofs true)
-(declare-const x Bool)
-(declare-const y Bool)
-(declare-const z Bool)
-(assert y)
-(assert (not z))
-(assert (ite x y z))
-(check-sat)
\ No newline at end of file