diff options
author | Andrew Reynolds <andrew.j.reynolds@gmail.com> | 2019-09-12 17:31:22 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-12 17:31:22 -0500 |
commit | a117e2b45539a822aa480b90558c2c0da6031dd9 (patch) | |
tree | 5006484b1794943a1f049247ebbb2a63cb82dbfb /src/theory/quantifiers/term_util.cpp | |
parent | bee3c7f6840e531bc91d990b98f2b331d1f2f82c (diff) |
Update to standard implementation of contains term (#3270)
Diffstat (limited to 'src/theory/quantifiers/term_util.cpp')
-rw-r--r-- | src/theory/quantifiers/term_util.cpp | 44 |
1 files changed, 6 insertions, 38 deletions
diff --git a/src/theory/quantifiers/term_util.cpp b/src/theory/quantifiers/term_util.cpp index ffd808ed3..48dc88537 100644 --- a/src/theory/quantifiers/term_util.cpp +++ b/src/theory/quantifiers/term_util.cpp @@ -489,15 +489,17 @@ Node TermUtil::rewriteVtsSymbols( Node n ) { bool TermUtil::containsVtsTerm( Node n, bool isFree ) { std::vector< Node > t; getVtsTerms( t, isFree, false ); - return containsTerms( n, t ); + return expr::hasSubterm(n, t); } bool TermUtil::containsVtsTerm( std::vector< Node >& n, bool isFree ) { std::vector< Node > t; getVtsTerms( t, isFree, false ); if( !t.empty() ){ - for( unsigned i=0; i<n.size(); i++ ){ - if( containsTerms( n[i], t ) ){ + for (const Node& nc : n) + { + if (expr::hasSubterm(nc, t)) + { return true; } } @@ -508,7 +510,7 @@ bool TermUtil::containsVtsTerm( std::vector< Node >& n, bool isFree ) { bool TermUtil::containsVtsInfinity( Node n, bool isFree ) { std::vector< Node > t; getVtsTerms( t, isFree, false, false ); - return containsTerms( n, t ); + return expr::hasSubterm(n, t); } Node TermUtil::ensureType( Node n, TypeNode tn ) { @@ -524,40 +526,6 @@ Node TermUtil::ensureType( Node n, TypeNode tn ) { } } -bool TermUtil::containsTerms2( Node n, std::vector< Node >& t, std::map< Node, bool >& visited ) { - if (visited.find(n) == visited.end()) - { - if( std::find( t.begin(), t.end(), n )!=t.end() ){ - return true; - } - visited[n] = true; - if (n.hasOperator()) - { - if (containsTerms2(n.getOperator(), t, visited)) - { - return true; - } - } - for (const Node& nc : n) - { - if (containsTerms2(nc, t, visited)) - { - return true; - } - } - } - return false; -} - -bool TermUtil::containsTerms( Node n, std::vector< Node >& t ) { - if( t.empty() ){ - return false; - }else{ - std::map< Node, bool > visited; - return containsTerms2( n, t, visited ); - } -} - int TermUtil::getTermDepth( Node n ) { if (!n.hasAttribute(TermDepthAttribute()) ){ int maxDepth = -1; |