diff options
author | Andrew Reynolds <andrew.j.reynolds@gmail.com> | 2017-11-29 18:17:16 -0600 |
---|---|---|
committer | Aina Niemetz <aina.niemetz@gmail.com> | 2017-11-29 16:17:16 -0800 |
commit | 0524281144b562fea63adf10bc3f5d6f75883296 (patch) | |
tree | fb812221b635a2e5f9ffef6b586008ad53cfa251 /src/theory/quantifiers/ceg_instantiator.cpp | |
parent | dd31916953ecc29514499e5c1cb96e3ae33ff3b8 (diff) |
Minor improvements and changes to defaults for cbqi bv (#1406)
This
makes it so that --cbqi-bv tries at most 2 instantiations per quantified formula (one based on inversions when applicable, one based on model values). This makes it so that we do not have exponential run time in the worst case. This helps significantly for psyco benchmarks which have many quantified variables.
Enables --cbqi-bv by default and changes the default inequality mode to eq-boundary (which is the best performer overall), also enables extract removal by default
Allows cbqiNestedQE to be used in the BV logic.
Adds an option --cbqi-full which indicates whether we should try model value instantiations for bit-vectors (by default, this is done only for the pure BV logic).
Diffstat (limited to 'src/theory/quantifiers/ceg_instantiator.cpp')
-rw-r--r-- | src/theory/quantifiers/ceg_instantiator.cpp | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/src/theory/quantifiers/ceg_instantiator.cpp b/src/theory/quantifiers/ceg_instantiator.cpp index 15bfbe9f9..cf2c51ec1 100644 --- a/src/theory/quantifiers/ceg_instantiator.cpp +++ b/src/theory/quantifiers/ceg_instantiator.cpp @@ -460,11 +460,9 @@ bool CegInstantiator::constructInstantiation(SolvedForm& sf, unsigned i) } //[4] resort to using value in model. We do so if: - // - we are in a higher effort than CEG_INST_EFFORT_STANDARD, - // - if the variable is Boolean, or - // - if we are solving for a subfield of a datatype. - bool use_model_value = vinst->useModelValue(this, sf, pv, d_effort); - if ((d_effort > CEG_INST_EFFORT_STANDARD || use_model_value || is_cv) + // - if the instantiator uses model values at this effort, or + // - if we are solving for a subfield of a datatype (is_cv). + if ((vinst->useModelValue(this, sf, pv, d_effort) || is_cv) && vinst->allowModelValue(this, sf, pv, d_effort)) { #ifdef CVC4_ASSERTIONS @@ -478,7 +476,7 @@ bool CegInstantiator::constructInstantiation(SolvedForm& sf, unsigned i) Trace("cbqi-inst-debug") << "[4] " << i << "...try model value " << mv << std::endl; d_curr_iphase[pv] = CEG_INST_PHASE_MVALUE; CegInstEffort prev = d_effort; - if (!use_model_value) + if (d_effort < CEG_INST_EFFORT_STANDARD_MV) { // update the effort level to indicate we have used a model value d_effort = CEG_INST_EFFORT_STANDARD_MV; |