diff options
author | ajreynol <andrew.j.reynolds@gmail.com> | 2014-11-10 15:53:51 +0100 |
---|---|---|
committer | ajreynol <andrew.j.reynolds@gmail.com> | 2014-11-10 15:53:51 +0100 |
commit | be316870ef337a435d65f46a26f40ef0eab97934 (patch) | |
tree | 24db24b777180ea71d0e9078b7bcf4eff05ae9dc /src/theory/quantifiers/quantifiers_rewriter.cpp | |
parent | 8a43f6c6aa01f9b27434caf1c5dd9ef6b2dcd963 (diff) |
Do not eliminate variables only occurring in patterns. Minor improvements to sort inference. Remove unused code.
Diffstat (limited to 'src/theory/quantifiers/quantifiers_rewriter.cpp')
-rw-r--r-- | src/theory/quantifiers/quantifiers_rewriter.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/theory/quantifiers/quantifiers_rewriter.cpp b/src/theory/quantifiers/quantifiers_rewriter.cpp index fb7ff679b..0d338f283 100644 --- a/src/theory/quantifiers/quantifiers_rewriter.cpp +++ b/src/theory/quantifiers/quantifiers_rewriter.cpp @@ -105,6 +105,7 @@ void QuantifiersRewriter::computeArgs( std::vector< Node >& args, std::map< Node } void QuantifiersRewriter::computeArgVec( std::vector< Node >& args, std::vector< Node >& activeArgs, Node n ) { + Assert( activeArgs.empty() ); std::map< Node, bool > activeMap; computeArgs( args, activeMap, n ); for( unsigned i=0; i<args.size(); i++ ){ @@ -114,6 +115,17 @@ void QuantifiersRewriter::computeArgVec( std::vector< Node >& args, std::vector< } } +void QuantifiersRewriter::computeArgVec2( std::vector< Node >& args, std::vector< Node >& activeArgs, Node n, Node ipl ) { + Assert( activeArgs.empty() ); + std::map< Node, bool > activeMap; + computeArgs( args, activeMap, n ); + computeArgs( args, activeMap, ipl ); + for( unsigned i=0; i<args.size(); i++ ){ + if( activeMap[args[i]] ){ + activeArgs.push_back( args[i] ); + } + } +} bool QuantifiersRewriter::hasArg( std::vector< Node >& args, Node n ){ if( std::find( args.begin(), args.end(), n )!=args.end() ){ @@ -728,7 +740,7 @@ Node QuantifiersRewriter::computeSplit( Node f, Node body, std::vector< Node >& Node QuantifiersRewriter::mkForAll( std::vector< Node >& args, Node body, Node ipl ){ std::vector< Node > activeArgs; - computeArgVec( args, activeArgs, body ); + computeArgVec2( args, activeArgs, body, ipl ); if( activeArgs.empty() ){ return body; }else{ |