diff options
author | Andrew Reynolds <andrew.j.reynolds@gmail.com> | 2017-10-27 13:58:12 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-27 13:58:12 -0500 |
commit | 0891ff3d00975ee9697855dcb2b6cbb232ec5523 (patch) | |
tree | 450d84b5cd932274d687e8ab4a2eff1a4777c45f /src/theory/quantifiers/ceg_instantiator.cpp | |
parent | 079ed9540d498bcbb58f2f0fbe87bdae28101d1e (diff) |
Cbqi multiple instantiation (#1289)
* Multi-instantiation heuristic for cbqi bv.
* New clang format.
* Minor
* Minor.
* Minor
Diffstat (limited to 'src/theory/quantifiers/ceg_instantiator.cpp')
-rw-r--r-- | src/theory/quantifiers/ceg_instantiator.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/theory/quantifiers/ceg_instantiator.cpp b/src/theory/quantifiers/ceg_instantiator.cpp index 02b2d3a1b..57bfb2d14 100644 --- a/src/theory/quantifiers/ceg_instantiator.cpp +++ b/src/theory/quantifiers/ceg_instantiator.cpp @@ -362,7 +362,13 @@ void CegInstantiator::popStackVariable() { d_stack_vars.pop_back(); } -bool CegInstantiator::doAddInstantiationInc( Node pv, Node n, TermProperties& pv_prop, SolvedForm& sf, unsigned effort ) { +bool CegInstantiator::doAddInstantiationInc(Node pv, + Node n, + TermProperties& pv_prop, + SolvedForm& sf, + unsigned effort, + bool revertOnSuccess) +{ Node cnode = pv_prop.getCacheNode(); if( d_curr_subs_proc[pv][n].find( cnode )==d_curr_subs_proc[pv][n].end() ){ d_curr_subs_proc[pv][n][cnode] = true; @@ -453,12 +459,14 @@ bool CegInstantiator::doAddInstantiationInc( Node pv, Node n, TermProperties& pv Trace("cbqi-inst-debug2") << "Recurse..." << std::endl; unsigned i = d_curr_index[pv]; success = doAddInstantiation( sf, d_stack_vars.empty() ? i+1 : i, effort ); - if( !success ){ + if (!success || revertOnSuccess) + { Trace("cbqi-inst-debug2") << "Removing from vectors..." << std::endl; sf.pop_back( pv, n, pv_prop ); } } - if( success ){ + if (success && !revertOnSuccess) + { return true; }else{ Trace("cbqi-inst-debug2") << "Revert substitutions..." << std::endl; @@ -472,7 +480,7 @@ bool CegInstantiator::doAddInstantiationInc( Node pv, Node n, TermProperties& pv for( unsigned i=0; i<new_non_basic.size(); i++ ){ sf.d_non_basic.pop_back(); } - return false; + return success; } }else{ //already tried this substitution |