summaryrefslogtreecommitdiff
path: root/src/theory/quantifiers/fmf/model_engine.cpp
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2020-03-20 10:16:21 -0500
committerGitHub <noreply@github.com>2020-03-20 10:16:21 -0500
commit210e66251b40c74243cf13a967464add2abb7a52 (patch)
treec6e6f9fb16c2d93453762686f0b25a6e90af3347 /src/theory/quantifiers/fmf/model_engine.cpp
parent74a31b92b0d7bd83777fa1650b5c21ed968fb887 (diff)
Make handling of illegal internal representatives in quantifiers engine more robust (#4034)
Fixes #4002 (that benchmark is now unknown). The experimental option --cbqi-all previously had some issues when combined with finite model finding. When these two options are used simultaneously, it may be the case that certain equivalence classes are "illegal" since they contain only terms that are ineligible for instantiation. The previous code threw a warning when this occurred which in extreme cases allowed for potentially ineligible terms for instantiation. The new code is more conservative: we never choose illegal internal representatives and instead set the incomplete flag in finite model finding when this occurs. A block of code changed indentation in this PR, which was updated to the new standards.
Diffstat (limited to 'src/theory/quantifiers/fmf/model_engine.cpp')
-rw-r--r--src/theory/quantifiers/fmf/model_engine.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/theory/quantifiers/fmf/model_engine.cpp b/src/theory/quantifiers/fmf/model_engine.cpp
index 4012f687f..3fff374a7 100644
--- a/src/theory/quantifiers/fmf/model_engine.cpp
+++ b/src/theory/quantifiers/fmf/model_engine.cpp
@@ -182,6 +182,11 @@ int ModelEngine::checkModel(){
Trace("model-engine-debug") << " Term reps : ";
for( size_t i=0; i<it->second.size(); i++ ){
Node r = d_quantEngine->getInternalRepresentative( it->second[i], Node::null(), 0 );
+ if (r.isNull())
+ {
+ // there was an invalid equivalence class
+ d_incomplete_check = true;
+ }
Trace("model-engine-debug") << r << " ";
}
Trace("model-engine-debug") << std::endl;
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback