if (newPremises.size() != size)
{
Trace("eqproof-conv") << "EqProof::cleanReflPremises: removed "
- << (newPremises.size() >= size
- ? newPremises.size() - size
+ << (size >= newPremises.size()
+ ? size - newPremises.size()
: 0)
<< " refl premises from " << premises << "\n";
premises.clear();
// if no equality of the searched form, nothing to do
if (offending == size)
{
+ Trace("eqproof-conv")
+ << "EqProof::expandTransitivityForDisequalities: no need.\n";
return false;
}
NodeManager* nm = NodeManager::currentNM();
if (d_id == MERGED_THROUGH_REFLEXIVITY
|| (d_node.getKind() == kind::EQUAL && d_node[0] == d_node[1]))
{
+ Trace("eqproof-conv") << "EqProof::addToProof: refl step\n";
Node conclusion =
d_node.getKind() == kind::EQUAL ? d_node : d_node.eqNode(d_node);
p->addStep(conclusion, PfRule::REFL, {}, {conclusion[0]});
}
}
}
- Assert(p->hasStep(conclusion));
+ Assert(p->hasStep(conclusion) || assumptions.count(conclusion))
+ << "Conclusion " << conclusion
+ << " does not have a step in the proof neither it's an assumption.\n";
visited[d_node] = conclusion;
return conclusion;
}
regress0/proofs/open-pf-if-unordered-iff.smt2
regress0/proofs/open-pf-rederivation.smt2
regress0/proofs/project-issue317-inc-sat-conflictlit.smt2
+ regress0/proofs/project-issue330-eqproof.smt2
regress0/proofs/qgu-fuzz-1-bool-sat.smt2
regress0/proofs/qgu-fuzz-2-bool-chainres-checking.smt2
regress0/proofs/qgu-fuzz-3-chainres-checking.smt2
--- /dev/null
+; EXPECT: sat
+(set-logic QF_SLIA)
+(declare-const x String)
+(declare-const x1 Int)
+(set-option :check-proofs true)
+(declare-const _x String)
+(check-sat-assuming ((>= 0 (ite (= x (str.++ (str.from_code 0) (str.replace_all x (str.from_code 0) (str.++ (str.from_code 0) (str.from_code 0))) _x) (ite false x (str.++ _x _x _x)) x) x1 0))))
\ No newline at end of file