8 template<
class Settings>
10 #ifdef SMTRAT_DEVOPTION_Statistics
11 mStatistics.explanationCalled();
15 allowedVars.insert(
var);
17 std::vector<ConstraintT> bounds;
19 if (!Settings::use_all_constraints || force_use_core) {
22 for (
const auto& b : reason) {
23 if (b.type() != carl::FormulaType::CONSTRAINT) {
24 SMTRAT_LOG_DEBUG(
"smtrat.mcsat.fm",
"Discarding non-constraint bound " << b);
28 if (!
isSubset(b.variables(), allowedVars)) {
29 SMTRAT_LOG_DEBUG(
"smtrat.mcsat.fm",
"Discarding non-univariate bound " << b);
32 assert(b.type() == carl::FormulaType::CONSTRAINT);
33 bounds.emplace_back(b.constraint());
39 if (!
isSubset(b.variables(), allowedVars)) {
40 SMTRAT_LOG_DEBUG(
"smtrat.mcsat.fm",
"Discarding non-univariate bound " << b);
43 assert(b.type() == carl::FormulaType::CONSTRAINT);
44 bounds.emplace_back(b.constraint());
48 std::optional<FormulasT> res = std::nullopt;
57 #ifdef SMTRAT_DEVOPTION_Statistics
58 mStatistics.explanationSuccess();
Represent the trail, i.e.
const auto & assignedVariables() const
const auto & constraints() const
const auto & model() const
bool isSubset(const carl::Variables &subset, const carl::Variables &superset)
std::variant< FormulaT, ClauseChain > Explanation
Class to create the formulas for axioms.
carl::Formula< Poly > FormulaT
carl::Formulas< Poly > FormulasT
#define SMTRAT_LOG_DEBUG(channel, msg)
void generateExplanation(Callback &&callback)
std::optional< mcsat::Explanation > operator()(const mcsat::Bookkeeping &data, carl::Variable var, const FormulasT &reason, bool force_use_core) const