{
std::vector<Node> conf;
conf.push_back(t);
- conf.push_back(c.eqNode(t[0][0]));
+ conf.push_back(t[0][0].eqNode(c));
Trace("dt-conflict")
<< "CONFLICT: Tester merge eq conflict : " << conf << std::endl;
d_im.sendDtConflict(conf, InferId::TESTER_CONFLICT);
d_csolver,
d_esolver,
d_statistics),
+ d_regexp_elim(options::regExpElimAgg(), pnm, u),
d_stringsFmf(c, u, valuation, d_termReg)
{
}
if (!d_tspb->applyEqIntro(n, ns, pfChildren, d_ids))
{
- return TrustNode::mkTrustRewrite(n, ns, nullptr);
+ // if we fail for any reason, we must use a trusted step instead
+ d_tspb->addStep(PfRule::TRUST_SUBS_MAP, pfChildren, {eq}, eq);
}
// ------- ------- from external proof generators
// x1 = t1 ... xn = tn
// ----------------------- AND_INTRO
// ...
- // --------- MACRO_SR_EQ_INTRO
+ // --------- MACRO_SR_EQ_INTRO (or TRUST_SUBS_MAP if we failed above)
// n == ns
// add it to the apply proof generator.
//
{
csubsChildren.push_back(tns.getProven());
}
+ std::reverse(csubsChildren.begin(),csubsChildren.end());
d_currentSubs = NodeManager::currentNM()->mkAnd(csubsChildren);
if (d_currentSubs.get().getKind() == kind::AND)
{
TrustSubstitutionMap(context::Context* c,
ProofNodeManager* pnm,
std::string name = "TrustSubstitutionMap",
- PfRule trustId = PfRule::TRUST_SUBS_MAP,
+ PfRule trustId = PfRule::PREPROCESS_LEMMA,
MethodId ids = MethodId::SB_DEFAULT);
/** Gets a reference to the underlying substitution map */
SubstitutionMap& get();