<< std::endl;
if (!d_te->collectModelInfo(tm))
{
+ Trace("model-builder")
+ << "TheoryEngineModelBuilder: fail collect model info" << std::endl;
return false;
}
// model-builder specific initialization
if (!preProcessBuildModel(tm))
{
+ Trace("model-builder")
+ << "TheoryEngineModelBuilder: fail preprocess build model."
+ << std::endl;
return false;
}
// modelBuilder-specific initialization
if (!processBuildModel(tm))
{
+ Trace("model-builder")
+ << "TheoryEngineModelBuilder: fail process build model." << std::endl;
return false;
}
-
+ Trace("model-builder") << "TheoryEngineModelBuilder: success" << std::endl;
tm->d_modelBuiltSuccess = true;
return true;
}
unsigned HoExtension::checkExtensionality(TheoryModel* m)
{
eq::EqualityEngine* ee = d_parent.getEqualityEngine();
+ NodeManager* nm = NodeManager::currentNM();
unsigned num_lemmas = 0;
bool isCollectModel = (m != nullptr);
Trace("uf-ho") << "HoExtension::checkExtensionality, collectModel="
<< "Add extensionality deq to model : " << edeq << std::endl;
if (!m->assertEquality(edeq[0][0], edeq[0][1], false))
{
+ Node eq = edeq[0][0].eqNode(edeq[0][1]);
+ Node lem = nm->mkNode(OR, deq.negate(), eq);
+ Trace("uf-ho") << "HoExtension: cmi extensionality lemma " << lem
+ << std::endl;
+ d_parent.getOutputChannel().lemma(lem);
return 1;
}
}
Node hn = TheoryUfRewriter::getHoApplyForApplyUf(n);
if (!m->assertEquality(n, hn, true))
{
+ Node eq = n.eqNode(hn);
+ Trace("uf-ho") << "HoExtension: cmi app completion lemma " << eq
+ << std::endl;
+ d_parent.getOutputChannel().lemma(eq);
return false;
}
}
if (!m->assertEqualityEngine(&d_equalityEngine, &termSet))
{
+ Trace("uf") << "Collect model info fail UF" << std::endl;
return false;
}
// function equivalence classes.
if (!d_ho->collectModelInfoHo(termSet, m))
{
+ Trace("uf") << "Collect model info fail HO" << std::endl;
return false;
}
}