From a5d0a2bf74fd0af30914b63798c4832e65d44964 Mon Sep 17 00:00:00 2001 From: Clark Barrett Date: Mon, 1 Apr 2013 22:27:17 -0400 Subject: [PATCH] Made eager lemmas an option, enabled for QF_AX --- src/smt/smt_engine.cpp | 9 +++++++++ src/theory/arrays/options | 3 +++ src/theory/arrays/theory_arrays.cpp | 6 +++--- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/smt/smt_engine.cpp b/src/smt/smt_engine.cpp index 8d13b5cc6..10a74ea5b 100644 --- a/src/smt/smt_engine.cpp +++ b/src/smt/smt_engine.cpp @@ -875,6 +875,15 @@ void SmtEngine::setLogicInternal() throw() { options::arraysEagerIndexSplitting.set(false); } } + // Turn on array eager lemmas for QF_AX + if(! options::arraysEagerLemmas.wasSetByUser()) { + if (not d_logic.isQuantified() && + d_logic.isTheoryEnabled(THEORY_ARRAY) && + d_logic.isPure(THEORY_ARRAY)) { + Trace("smt") << "setting array eager lemmas to true" << endl; + options::arraysEagerIndexSplitting.set(true); + } + } // Turn on multiple-pass non-clausal simplification for QF_AUFBV if(! options::repeatSimp.wasSetByUser()) { bool repeatSimp = !d_logic.isQuantified() && diff --git a/src/theory/arrays/options b/src/theory/arrays/options index 8a971cfe8..15220fbc2 100644 --- a/src/theory/arrays/options +++ b/src/theory/arrays/options @@ -17,4 +17,7 @@ option arraysModelBased --arrays-model-based bool :default false :read-write option arraysEagerIndexSplitting --arrays-eager-index bool :default true :read-write turn on eager index splitting for generated array lemmas +option arraysEagerLemmas --arrays-eager-lemmas bool :default false :read-write + turn on eager lemma generation for arrays + endmodule diff --git a/src/theory/arrays/theory_arrays.cpp b/src/theory/arrays/theory_arrays.cpp index 02f4152e9..9c28b3a42 100644 --- a/src/theory/arrays/theory_arrays.cpp +++ b/src/theory/arrays/theory_arrays.cpp @@ -40,7 +40,7 @@ namespace arrays { // Use static configuration of options for now const bool d_ccStore = false; const bool d_useArrTable = false; -const bool d_eagerLemmas = false; + //const bool d_eagerLemmas = false; const bool d_propagateLemmas = true; const bool d_preprocess = true; const bool d_solveWrite = true; @@ -964,7 +964,7 @@ void TheoryArrays::check(Effort e) { checkModel(e); } - if(!d_eagerLemmas && fullEffort(e) && !d_conflict && !options::arraysModelBased()) { + if(!options::arraysEagerLemmas() && fullEffort(e) && !d_conflict && !options::arraysModelBased()) { // generate the lemmas on the worklist Trace("arrays-lem")<<"Arrays::discharging lemmas: "<