help_mode = "difficulty output modes."
[[option.mode.LEMMA_LITERAL]]
name = "lemma-literal"
+ help = "Difficulty of an assertion is how many lemmas (at full effort) use a literal that the assertion depends on to be satisfied."
+[[option.mode.LEMMA_LITERAL_ALL]]
+ name = "lemma-literal-all"
help = "Difficulty of an assertion is how many lemmas use a literal that the assertion depends on to be satisfied."
[[option.mode.MODEL_CHECK]]
name = "model-check"
}
}
-void DifficultyManager::notifyLemma(Node n)
+void DifficultyManager::notifyLemma(Node n, bool inFullEffortCheck)
{
- if (options::difficultyMode() != options::DifficultyMode::LEMMA_LITERAL)
+ // compute if we should consider the lemma
+ bool considerLemma = false;
+ if (options::difficultyMode() == options::DifficultyMode::LEMMA_LITERAL_ALL)
+ {
+ considerLemma = true;
+ }
+ else if (options::difficultyMode() == options::DifficultyMode::LEMMA_LITERAL)
+ {
+ considerLemma = inFullEffortCheck;
+ }
+ if (!considerLemma)
{
return;
}
*
* @param rse Mapping from literals to the preprocessed assertion that was
* the reason why that literal was relevant in the current context
+ * @param inFullEffortCheck Whether we are in a full effort check when the
+ * lemma was sent.
* @param lem The lemma
*/
- void notifyLemma(Node lem);
+ void notifyLemma(Node lem, bool inFullEffortCheck);
/**
* Notify that `m` is a (candidate) model. This increments the difficulty
* of assertions that are not satisfied by that model.
{
// notice that we don't compute relevance here, instead it is computed
// on demand based on the literals in n.
- d_dman->notifyLemma(n);
+ d_dman->notifyLemma(n, d_inFullEffortCheck);
}
}