summaryrefslogtreecommitdiff
path: root/src/theory/quantifiers/term_database.cpp
diff options
context:
space:
mode:
authorajreynol <andrew.j.reynolds@gmail.com>2015-09-15 10:39:29 +0200
committerajreynol <andrew.j.reynolds@gmail.com>2015-09-15 10:39:29 +0200
commitbad7f4fe4dca4c6511c2862bf81b6791640ac78f (patch)
tree0be31a9300766d39ae36c9efba02e2c5a68dd156 /src/theory/quantifiers/term_database.cpp
parentace360b4da1edef06088a366dc21b58f9431efc2 (diff)
Fix bug related to quantifiers + incremental, thanks John Backes for the bug report. Other minor cleanup.
Diffstat (limited to 'src/theory/quantifiers/term_database.cpp')
-rw-r--r--src/theory/quantifiers/term_database.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/theory/quantifiers/term_database.cpp b/src/theory/quantifiers/term_database.cpp
index d076c6510..bb35ac4cd 100644
--- a/src/theory/quantifiers/term_database.cpp
+++ b/src/theory/quantifiers/term_database.cpp
@@ -418,7 +418,7 @@ bool TermDb::mayComplete( TypeNode tn ) {
std::map< TypeNode, bool >::iterator it = d_may_complete.find( tn );
if( it==d_may_complete.end() ){
bool mc = false;
- if( !tn.isArray() && tn.getCardinality().isFinite() && !tn.getCardinality().isLargeFinite() ){
+ if( isClosedEnumerableType( tn ) && tn.getCardinality().isFinite() && !tn.getCardinality().isLargeFinite() ){
Node card = NodeManager::currentNM()->mkConst( Rational(tn.getCardinality().getFiniteCardinality()) );
Node oth = NodeManager::currentNM()->mkConst( Rational(1000) );
Node eq = NodeManager::currentNM()->mkNode( LEQ, card, oth );
@@ -964,7 +964,19 @@ Node TermDb::getEnumerateTerm( TypeNode tn, unsigned index ) {
}
bool TermDb::isClosedEnumerableType( TypeNode tn ) {
- return !tn.isArray() && !tn.isSort() && !tn.isCodatatype();
+ std::map< TypeNode, bool >::iterator it = d_typ_closed_enum.find( tn );
+ if( it==d_typ_closed_enum.end() ){
+ bool ret = true;
+ if( tn.isArray() || tn.isSort() || tn.isCodatatype() ){
+ ret = false;
+ }else{
+ //TODO: all subfields must be closed enumerable?
+ }
+ d_typ_closed_enum[tn] = ret;
+ return ret;
+ }else{
+ return it->second;
+ }
}
Node TermDb::getFreeVariableForInstConstant( Node n ){
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback