summaryrefslogtreecommitdiff
path: root/src/prop/bvminisat/simp
diff options
context:
space:
mode:
authorLiana Hadarean <lianahady@gmail.com>2012-04-04 02:02:06 +0000
committerLiana Hadarean <lianahady@gmail.com>2012-04-04 02:02:06 +0000
commit52d6dc20c61007a5c066590aa1fd0b95ed3c2527 (patch)
tree040efec36cde7775b5c19eb43fcdd60cbeb61f9e /src/prop/bvminisat/simp
parent4fa8c7d1a0654e7780fd485c51463c06b34379b5 (diff)
* added propagation as lemmas to TheoryBV:
* modified BVMinisat to work incrementally * added more bv regressions
Diffstat (limited to 'src/prop/bvminisat/simp')
-rw-r--r--src/prop/bvminisat/simp/SimpSolver.cc15
-rw-r--r--src/prop/bvminisat/simp/SimpSolver.h14
2 files changed, 20 insertions, 9 deletions
diff --git a/src/prop/bvminisat/simp/SimpSolver.cc b/src/prop/bvminisat/simp/SimpSolver.cc
index 4af756456..903ffa270 100644
--- a/src/prop/bvminisat/simp/SimpSolver.cc
+++ b/src/prop/bvminisat/simp/SimpSolver.cc
@@ -43,8 +43,9 @@ static DoubleOption opt_simp_garbage_frac(_cat, "simp-gc-frac", "The fraction of
// Constructor/Destructor:
-SimpSolver::SimpSolver() :
- grow (opt_grow)
+SimpSolver::SimpSolver(CVC4::context::Context* c) :
+ Solver(c)
+ , grow (opt_grow)
, clause_lim (opt_clause_lim)
, subsumption_lim (opt_subsumption_lim)
, simp_garbage_frac (opt_simp_garbage_frac)
@@ -99,7 +100,13 @@ Var SimpSolver::newVar(bool sign, bool dvar, bool freeze) {
lbool SimpSolver::solve_(bool do_simp, bool turn_off_simp)
{
+ vec<Lit> atom_propagations_backup;
+ atom_propagations.moveTo(atom_propagations_backup);
+ vec<int> atom_propagations_lim_backup;
+ atom_propagations_lim.moveTo(atom_propagations_lim_backup);
+ only_bcp = false;
+ cancelUntil(0);
vec<Var> extra_frozen;
lbool result = l_True;
@@ -128,8 +135,8 @@ lbool SimpSolver::solve_(bool do_simp, bool turn_off_simp)
else if (verbosity >= 1)
printf("===============================================================================\n");
- if (result == l_True)
- extendModel();
+ atom_propagations_backup.moveTo(atom_propagations);
+ atom_propagations_lim_backup.moveTo(atom_propagations_lim);
if (do_simp)
// Unfreeze the assumptions that were frozen:
diff --git a/src/prop/bvminisat/simp/SimpSolver.h b/src/prop/bvminisat/simp/SimpSolver.h
index e21a0a9ec..e3ef76212 100644
--- a/src/prop/bvminisat/simp/SimpSolver.h
+++ b/src/prop/bvminisat/simp/SimpSolver.h
@@ -24,6 +24,7 @@ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWA
#include "prop/bvminisat/mtl/Queue.h"
#include "prop/bvminisat/core/Solver.h"
#include "util/stats.h"
+#include "context/context.h"
namespace BVMinisat {
@@ -34,7 +35,7 @@ class SimpSolver : public Solver {
public:
// Constructor/Destructor:
//
- SimpSolver();
+ SimpSolver(CVC4::context::Context* c);
~SimpSolver();
// Problem specification:
@@ -95,7 +96,8 @@ class SimpSolver : public Solver {
int merges;
int asymm_lits;
int eliminated_vars;
- CVC4::TimerStat total_eliminate_time;
+ CVC4::TimerStat total_eliminate_time;
+
protected:
// Helper structures:
@@ -181,12 +183,14 @@ inline bool SimpSolver::addClause (Lit p, Lit q) { add_tmp.clear();
inline bool SimpSolver::addClause (Lit p, Lit q, Lit r) { add_tmp.clear(); add_tmp.push(p); add_tmp.push(q); add_tmp.push(r); return addClause_(add_tmp); }
inline void SimpSolver::setFrozen (Var v, bool b) { frozen[v] = (char)b; if (use_simplification && !b) { updateElimHeap(v); } }
-inline bool SimpSolver::solve ( bool do_simp, bool turn_off_simp) { budgetOff(); assumptions.clear(); return solve_(do_simp, turn_off_simp) == l_True; }
+inline bool SimpSolver::solve ( bool do_simp, bool turn_off_simp) { budgetOff(); return solve_(do_simp, turn_off_simp) == l_True; }
inline bool SimpSolver::solve (Lit p , bool do_simp, bool turn_off_simp) { budgetOff(); assumptions.clear(); assumptions.push(p); return solve_(do_simp, turn_off_simp) == l_True; }
inline bool SimpSolver::solve (Lit p, Lit q, bool do_simp, bool turn_off_simp) { budgetOff(); assumptions.clear(); assumptions.push(p); assumptions.push(q); return solve_(do_simp, turn_off_simp) == l_True; }
inline bool SimpSolver::solve (Lit p, Lit q, Lit r, bool do_simp, bool turn_off_simp) { budgetOff(); assumptions.clear(); assumptions.push(p); assumptions.push(q); assumptions.push(r); return solve_(do_simp, turn_off_simp) == l_True; }
-inline bool SimpSolver::solve (const vec<Lit>& assumps, bool do_simp, bool turn_off_simp){
- budgetOff(); assumps.copyTo(assumptions); return solve_(do_simp, turn_off_simp) == l_True; }
+inline bool SimpSolver::solve (const vec<Lit>& assumps, bool do_simp, bool turn_off_simp){
+ budgetOff(); assumps.copyTo(assumptions);
+ return solve_(do_simp, turn_off_simp) == l_True;
+}
inline lbool SimpSolver::solveLimited (const vec<Lit>& assumps, bool do_simp, bool turn_off_simp){
assumps.copyTo(assumptions); return solve_(do_simp, turn_off_simp); }
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback