527 lines
17 KiB
Diff
527 lines
17 KiB
Diff
--- a/Makefile
|
|
+++ b/Makefile
|
|
@@ -69,8 +89,8 @@
|
|
VERB=
|
|
endif
|
|
|
|
-SRCS = $(wildcard minisat/core/*.cc) $(wildcard minisat/simp/*.cc) $(wildcard minisat/utils/*.cc)
|
|
-HDRS = $(wildcard minisat/mtl/*.h) $(wildcard minisat/core/*.h) $(wildcard minisat/simp/*.h) $(wildcard minisat/utils/*.h)
|
|
+SRCS = $(wildcard minisat/core/*.cc) $(wildcard minisat/simp/*.cc) $(wildcard minisat/utils/*.cc) $(wildcard minisat/proof/*.cc)
|
|
+HDRS = $(wildcard minisat/mtl/*.h) $(wildcard minisat/core/*.h) $(wildcard minisat/simp/*.h) $(wildcard minisat/utils/*.h) $(wildcard minisat/proof/*.h)
|
|
OBJS = $(filter-out %Main.o, $(SRCS:.cc=.o))
|
|
|
|
r: $(BUILD_DIR)/release/bin/$(MINISAT)
|
|
@@ -89,7 +109,7 @@
|
|
lsh: $(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB).$(SOMAJOR).$(SOMINOR)$(SORELEASE)
|
|
|
|
## Build-type Compile-flags:
|
|
-$(BUILD_DIR)/release/%.o: MINISAT_CXXFLAGS +=$(MINISAT_REL) $(MINISAT_RELSYM)
|
|
+$(BUILD_DIR)/release/%.o: MINISAT_CXXFLAGS +=$(MINISAT_REL) $(MINISAT_RELSYM) $(MINISAT_FPIC)
|
|
$(BUILD_DIR)/debug/%.o: MINISAT_CXXFLAGS +=$(MINISAT_DEB) -g
|
|
$(BUILD_DIR)/profile/%.o: MINISAT_CXXFLAGS +=$(MINISAT_PRF) -pg
|
|
$(BUILD_DIR)/dynamic/%.o: MINISAT_CXXFLAGS +=$(MINISAT_REL) $(MINISAT_FPIC)
|
|
@@ -195,7 +215,7 @@
|
|
$(INSTALL) -d $(DESTDIR)$(bindir)
|
|
$(INSTALL) -m 755 $(BUILD_DIR)/dynamic/bin/$(MINISAT) $(DESTDIR)$(bindir)
|
|
|
|
-clean:
|
|
+origclean:
|
|
rm -f $(foreach t, release debug profile dynamic, $(foreach o, $(SRCS:.cc=.o), $(BUILD_DIR)/$t/$o)) \
|
|
$(foreach t, release debug profile dynamic, $(foreach d, $(SRCS:.cc=.d), $(BUILD_DIR)/$t/$d)) \
|
|
$(foreach t, release debug profile dynamic, $(BUILD_DIR)/$t/bin/$(MINISAT_CORE) $(BUILD_DIR)/$t/bin/$(MINISAT)) \
|
|
@@ -203,6 +223,7 @@
|
|
$(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB).$(SOMAJOR).$(SOMINOR)$(SORELEASE)\
|
|
$(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB).$(SOMAJOR)\
|
|
$(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB)
|
|
+ rm -f $(NUSMV_LIBNAME)
|
|
|
|
distclean: clean
|
|
rm -f config.mk
|
|
--- a/minisat/core/Solver.cc
|
|
+++ b/minisat/core/Solver.cc
|
|
@@ -101,7 +101,16 @@
|
|
, conflict_budget (-1)
|
|
, propagation_budget (-1)
|
|
, asynch_interrupt (false)
|
|
-{}
|
|
+{
|
|
+ // NuSMV: MOD BEGIN
|
|
+ /* Disables "progress saving" which relies on last polarity
|
|
+ assigned to a var when branching. Polarity for us is forced to
|
|
+ be false. See http://reasoning.cs.ucla.edu/fetch.php?id=69&type=pdf
|
|
+ */
|
|
+ phase_saving = 0;
|
|
+ default_polarity = l_Undef;
|
|
+ // NuSMV: MOD END
|
|
+}
|
|
|
|
|
|
Solver::~Solver()
|
|
@@ -250,8 +259,19 @@
|
|
{
|
|
Var next = var_Undef;
|
|
|
|
+ // NuSMV: PREF MOD
|
|
+ // Selection from preferred list
|
|
+ for (int i = 0; i < preferred.size(); i++) {
|
|
+ if (value(preferred[i]) == l_Undef) {
|
|
+ next = preferred[i];
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+ // NuSMV: PREF MOD END
|
|
+
|
|
// Random decision:
|
|
- if (drand(random_seed) < random_var_freq && !order_heap.empty()){
|
|
+ if (next == var_Undef && // NuSMV: PREF MOD
|
|
+ drand(random_seed) < random_var_freq && !order_heap.empty()){
|
|
next = order_heap[irand(random_seed,order_heap.size())];
|
|
if (value(next) == l_Undef && decision[next])
|
|
rnd_decisions++; }
|
|
@@ -269,6 +289,8 @@
|
|
return lit_Undef;
|
|
else if (user_pol[next] != l_Undef)
|
|
return mkLit(next, user_pol[next] == l_True);
|
|
+ else if (default_polarity != l_Undef) // NuSMV
|
|
+ return mkLit(next, default_polarity == l_True);
|
|
else if (rnd_pol)
|
|
return mkLit(next, drand(random_seed) < 0.5);
|
|
else
|
|
@@ -620,6 +642,19 @@
|
|
}
|
|
|
|
|
|
+// NuSMV: PREF MOD
|
|
+void Solver::addPreferred(Var v)
|
|
+{
|
|
+ preferred.push(v);
|
|
+}
|
|
+
|
|
+void Solver::clearPreferred()
|
|
+{
|
|
+ preferred.clear(0);
|
|
+}
|
|
+// NuSMV: PREF MOD END
|
|
+
|
|
+
|
|
void Solver::rebuildOrderHeap()
|
|
{
|
|
vec<Var> vs;
|
|
--- a/minisat/core/Solver.h
|
|
+++ b/minisat/core/Solver.h
|
|
@@ -90,6 +90,19 @@
|
|
void setPolarity (Var v, lbool b); // Declare which polarity the decision heuristic should use for a variable. Requires mode 'polarity_user'.
|
|
void setDecisionVar (Var v, bool b); // Declare if a variable should be eligible for selection in the decision heuristic.
|
|
|
|
+ // NuSMV: PREF MOD
|
|
+ /*
|
|
+ * Add a variable at the end of the list of preferred variables
|
|
+ * Does not remove the variable from the standard ordering.
|
|
+ */
|
|
+ void addPreferred(Var v);
|
|
+
|
|
+ /*
|
|
+ * Clear vector of preferred variables.
|
|
+ */
|
|
+ void clearPreferred();
|
|
+ // NuSMV: PREF MOD END
|
|
+
|
|
// Read state:
|
|
//
|
|
lbool value (Var x) const; // The current value of a variable.
|
|
@@ -134,6 +147,8 @@
|
|
int ccmin_mode; // Controls conflict clause minimization (0=none, 1=basic, 2=deep).
|
|
int phase_saving; // Controls the level of phase saving (0=none, 1=limited, 2=full).
|
|
bool rnd_pol; // Use random polarities for branching heuristics.
|
|
+ lbool default_polarity; // NuSMV: default polarity for vars
|
|
+
|
|
bool rnd_init_act; // Initialize variable activities with a small random value.
|
|
double garbage_frac; // The fraction of wasted memory allowed before a garbage collection is triggered.
|
|
int min_learnts_lim; // Minimum number to set the learnts limit to.
|
|
@@ -215,6 +230,10 @@
|
|
Var next_var; // Next variable to be created.
|
|
ClauseAllocator ca;
|
|
|
|
+ // NuSMV: PREF MOD
|
|
+ vec<Var> preferred;
|
|
+ // NuSMV: PREF MOD END
|
|
+
|
|
vec<Var> released_vars;
|
|
vec<Var> free_vars;
|
|
|
|
--- a/minisat/core/SolverTypes.h
|
|
+++ b/minisat/core/SolverTypes.h
|
|
@@ -52,7 +52,7 @@
|
|
int x;
|
|
|
|
// Use this as a constructor:
|
|
- friend Lit mkLit(Var var, bool sign = false);
|
|
+ friend Lit mkLit(Var var, bool sign);
|
|
|
|
bool operator == (Lit p) const { return x == p.x; }
|
|
bool operator != (Lit p) const { return x != p.x; }
|
|
@@ -61,6 +61,7 @@
|
|
|
|
|
|
inline Lit mkLit (Var var, bool sign) { Lit p; p.x = var + var + (int)sign; return p; }
|
|
+inline Lit mkLit (Var var) { return mkLit(var, false); }
|
|
inline Lit operator ~(Lit p) { Lit q; q.x = p.x ^ 1; return q; }
|
|
inline Lit operator ^(Lit p, bool b) { Lit q; q.x = p.x ^ (unsigned int)b; return q; }
|
|
inline bool sign (Lit p) { return p.x & 1; }
|
|
@@ -120,6 +121,7 @@
|
|
inline int toInt (lbool l) { return l.value; }
|
|
inline lbool toLbool(int v) { return lbool((uint8_t)v); }
|
|
|
|
+#define MINISAT_CONSTANTS_AS_MACROS
|
|
#if defined(MINISAT_CONSTANTS_AS_MACROS)
|
|
#define l_True (lbool((uint8_t)0)) // gcc does not do constant propagation if these are real constants.
|
|
#define l_False (lbool((uint8_t)1))
|
|
--- a/minisat/simp/Solver_C.cc
|
|
+++ b/minisat/simp/Solver_C.cc
|
|
@@ -0,0 +1,246 @@
|
|
+
|
|
+/**************************************************************************************************
|
|
+
|
|
+Solver_C.C
|
|
+
|
|
+C-wrapper for Solver.C
|
|
+
|
|
+ This file is part of NuSMV version 2.
|
|
+ Copyright (C) 2007 by FBK-irst.
|
|
+ Author: Roberto Cavada <cavada@fbk.eu>
|
|
+
|
|
+ NuSMV version 2 is free software; you can redistribute it and/or
|
|
+ modify it under the terms of the GNU Lesser General Public
|
|
+ License as published by the Free Software Foundation; either
|
|
+ version 2 of the License, or (at your option) any later version.
|
|
+
|
|
+ NuSMV version 2 is distributed in the hope that it will be useful,
|
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+ Lesser General Public License for more details.
|
|
+
|
|
+ You should have received a copy of the GNU Lesser General Public
|
|
+ License along with this library; if not, write to the Free Software
|
|
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
|
|
+
|
|
+ For more information on NuSMV see <http://nusmv.fbk.eu>
|
|
+ or email to <nusmv-users@fbk.eu>.
|
|
+ Please report bugs to <nusmv-users@fbk.eu>.
|
|
+
|
|
+ To contact the NuSMV development board, email to <nusmv@fbk.eu>. ]
|
|
+
|
|
+**************************************************************************************************/
|
|
+
|
|
+
|
|
+#include "SimpSolver.h"
|
|
+extern "C" {
|
|
+#include "Solver_C.h"
|
|
+}
|
|
+
|
|
+namespace {
|
|
+using Minisat::lbool;
|
|
+} // namespace
|
|
+
|
|
+extern "C" MiniSat_ptr MiniSat_Create()
|
|
+{
|
|
+ Minisat::SimpSolver *s = new Minisat::SimpSolver();
|
|
+ s->default_polarity = l_True;
|
|
+ return (MiniSat_ptr)s;
|
|
+}
|
|
+
|
|
+extern "C" void MiniSat_Delete(MiniSat_ptr ms)
|
|
+{
|
|
+ delete (Minisat::SimpSolver *)ms;
|
|
+}
|
|
+
|
|
+extern "C" int MiniSat_Nof_Variables(MiniSat_ptr ms)
|
|
+{
|
|
+ return ((Minisat::SimpSolver *)ms)->nVars();
|
|
+}
|
|
+
|
|
+extern "C" int MiniSat_Nof_Clauses(MiniSat_ptr ms)
|
|
+{
|
|
+ return ((Minisat::SimpSolver *)ms)->nClauses();
|
|
+}
|
|
+
|
|
+/* variables are in the range 1...N */
|
|
+extern "C" int MiniSat_New_Variable(MiniSat_ptr ms)
|
|
+{
|
|
+ /* Actually, minisat used variable range 0 .. N-1,
|
|
+ so in all function below there is a convertion between
|
|
+ input variable (1..N) and internal variables (0..N-1)
|
|
+ */
|
|
+ Minisat::Var var = ((Minisat::SimpSolver *)ms)->newVar();
|
|
+ ((Minisat::SimpSolver *)ms)->setFrozen(var, true);
|
|
+ return var+1;
|
|
+}
|
|
+
|
|
+
|
|
+/*
|
|
+ * Here clauses are in dimacs form, variable indexing is 1...N
|
|
+ */
|
|
+extern "C" int MiniSat_Add_Clause(MiniSat_ptr ms,
|
|
+ int *clause_lits, int num_lits)
|
|
+{
|
|
+ int i;
|
|
+ Minisat::vec<Minisat::Lit> cl;
|
|
+ for(i = 0; i < num_lits; ++i) {
|
|
+ const int lit = clause_lits[i];
|
|
+ assert(abs(lit) > 0);
|
|
+ assert(abs(lit) <= MiniSat_Nof_Variables((Minisat::SimpSolver*)ms));
|
|
+ int var = abs(lit) - 1;
|
|
+ cl.push((lit > 0) ? Minisat::mkLit(var) : ~ Minisat::mkLit(var));
|
|
+ }
|
|
+ ((Minisat::SimpSolver *)ms)->addClause(cl);
|
|
+
|
|
+ if(((Minisat::SimpSolver *)ms)->okay()) return 1;
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+extern "C" int MiniSat_Solve(MiniSat_ptr ms)
|
|
+{
|
|
+ bool ret = ((Minisat::SimpSolver *)ms)->solve();
|
|
+ if(ret) return 1;
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Here the assumption is in "dimacs form", variable indexing is 1...N
|
|
+ */
|
|
+extern "C" int MiniSat_Solve_Assume(MiniSat_ptr ms,
|
|
+ int nof_assumed_lits,
|
|
+ int *assumed_lits)
|
|
+{
|
|
+ int i;
|
|
+ Minisat::vec<Minisat::Lit> cl;
|
|
+ assert(((Minisat::SimpSolver*)0) != ((Minisat::SimpSolver*)ms));
|
|
+ Minisat::SimpSolver& solver = *((Minisat::SimpSolver*)ms);
|
|
+
|
|
+ solver.simplify();
|
|
+ if(solver.okay() == false) return 0;
|
|
+
|
|
+ assert(nof_assumed_lits >= 0);
|
|
+ for(i = 0; i < nof_assumed_lits; ++i) {
|
|
+ const int lit = assumed_lits[i];
|
|
+ assert(abs(lit) > 0);
|
|
+ assert(abs(lit) <= MiniSat_Nof_Variables((Minisat::SimpSolver*)ms));
|
|
+ int var = abs(lit) - 1;
|
|
+ cl.push((lit > 0) ? Minisat::mkLit(var) : ~Minisat::mkLit(var));
|
|
+ }
|
|
+
|
|
+ if (solver.solve(cl)) return 1;
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+extern "C" int MiniSat_simplifyDB(MiniSat_ptr ms)
|
|
+{
|
|
+ ((Minisat::SimpSolver *)ms)->simplify();
|
|
+ if(((Minisat::SimpSolver *)ms)->okay()) return 1;
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Here variables are numbered 1...N
|
|
+ */
|
|
+extern "C" int MiniSat_Get_Value(MiniSat_ptr ms, int var_num)
|
|
+{
|
|
+ assert(var_num > 0);
|
|
+ if(var_num > MiniSat_Nof_Variables(ms)) return -1;
|
|
+ /* minisat assigns all variables. just check */
|
|
+ assert(((Minisat::SimpSolver *)ms)->model[var_num-1] != l_Undef);
|
|
+
|
|
+ if(((Minisat::SimpSolver *)ms)->model[var_num-1] == l_True) return 1;
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+extern "C" int MiniSat_Get_Nof_Conflict_Lits(MiniSat_ptr ms)
|
|
+{
|
|
+ assert(((Minisat::SimpSolver*)0) != ((Minisat::SimpSolver*)ms));
|
|
+ Minisat::SimpSolver& solver = *((Minisat::SimpSolver*)ms);
|
|
+
|
|
+ return solver.conflict.size();
|
|
+}
|
|
+
|
|
+extern "C" void MiniSat_Get_Conflict_Lits(MiniSat_ptr ms, int* conflict_lits)
|
|
+{
|
|
+ assert(((Minisat::SimpSolver*)0) != ((Minisat::SimpSolver*)ms));
|
|
+ Minisat::SimpSolver& solver = *((Minisat::SimpSolver*)ms);
|
|
+
|
|
+ Minisat::LSet& cf = solver.conflict;
|
|
+
|
|
+ for (int i = 0; i < cf.size(); ++i) {
|
|
+ int v = Minisat::var(~cf[i]);
|
|
+ int s = Minisat::sign(~cf[i]);
|
|
+ assert(v != Minisat::var_Undef);
|
|
+ conflict_lits[i] = (s == 0) ? (v+1) : -(v+1);
|
|
+ }
|
|
+}
|
|
+
|
|
+/** mode can be polarity_user, polarity_rnd */
|
|
+extern "C" void MiniSat_Set_Polarity_Mode(MiniSat_ptr ms, int mode)
|
|
+{
|
|
+ assert(((Minisat::SimpSolver*)0) != ((Minisat::SimpSolver*)ms));
|
|
+ assert(__polarity_unsupported != mode);
|
|
+ Minisat::SimpSolver& solver = *((Minisat::SimpSolver*)ms);
|
|
+ if (polarity_rnd == mode) {
|
|
+ solver.rnd_pol = true;
|
|
+ solver.default_polarity = l_Undef;
|
|
+ }
|
|
+ else {
|
|
+ // assert(polarity_user == mode);
|
|
+ solver.rnd_pol = false;
|
|
+ switch (mode) {
|
|
+ case polarity_false:
|
|
+ solver.default_polarity = l_True;
|
|
+ break;
|
|
+ case polarity_true:
|
|
+ solver.default_polarity = l_False;
|
|
+ break;
|
|
+ default: // polarity_user
|
|
+ solver.default_polarity = l_Undef;
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+extern "C" int MiniSat_Get_Polarity_Mode(MiniSat_ptr ms)
|
|
+{
|
|
+ assert(((Minisat::SimpSolver*)0) != ((Minisat::SimpSolver*)ms));
|
|
+ Minisat::SimpSolver& solver = *((Minisat::SimpSolver*)ms);
|
|
+ //return solver.rnd_pol ? polarity_rnd : polarity_user;
|
|
+ if (solver.rnd_pol) {
|
|
+ return polarity_rnd;
|
|
+ } else if (solver.default_polarity == l_True) {
|
|
+ return polarity_false;
|
|
+ } else if (solver.default_polarity == l_False) {
|
|
+ return polarity_true;
|
|
+ } else {
|
|
+ return polarity_user;
|
|
+ }
|
|
+}
|
|
+
|
|
+extern "C" void MiniSat_Set_Random_Seed(MiniSat_ptr ms, double seed)
|
|
+{
|
|
+ assert(((Minisat::SimpSolver*)0) != ((Minisat::SimpSolver*)ms));
|
|
+ Minisat::SimpSolver& solver = *((Minisat::SimpSolver*)ms);
|
|
+ solver.random_seed = seed;
|
|
+}
|
|
+
|
|
+
|
|
+// NuSMV: PREF MOD
|
|
+/* variables are in the range 1...N */
|
|
+extern "C" void MiniSat_Set_Preferred_Variable(MiniSat_ptr ms, int x)
|
|
+{
|
|
+ /* Actually, minisat used variable range 0 .. N-1,
|
|
+ so in all function below there is a convertion between
|
|
+ input variable (1..N) and internal variables (0..N-1)
|
|
+ */
|
|
+ ((Minisat::SimpSolver *)ms)->addPreferred((Minisat::Var) x);
|
|
+}
|
|
+
|
|
+extern "C" void MiniSat_Clear_Preferred_Variables(MiniSat_ptr ms)
|
|
+{
|
|
+
|
|
+ ((Minisat::SimpSolver *)ms)->clearPreferred();
|
|
+}
|
|
+// NuSMV: PREF MOD END
|
|
--- a/minisat/simp/Solver_C.h
|
|
+++ b/minisat/simp/Solver_C.h
|
|
@@ -0,0 +1,72 @@
|
|
+/**************************************************************************************************
|
|
+
|
|
+Solver_C.h
|
|
+
|
|
+C-wrapper for Solver.h
|
|
+
|
|
+ This file is part of NuSMV version 2.
|
|
+ Copyright (C) 2007 by FBK-irst.
|
|
+ Author: Roberto Cavada <cavada@fbk.eu>
|
|
+
|
|
+ NuSMV version 2 is free software; you can redistribute it and/or
|
|
+ modify it under the terms of the GNU Lesser General Public
|
|
+ License as published by the Free Software Foundation; either
|
|
+ version 2 of the License, or (at your option) any later version.
|
|
+
|
|
+ NuSMV version 2 is distributed in the hope that it will be useful,
|
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+ Lesser General Public License for more details.
|
|
+
|
|
+ You should have received a copy of the GNU Lesser General Public
|
|
+ License along with this library; if not, write to the Free Software
|
|
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
|
|
+
|
|
+ For more information on NuSMV see <http://nusmv.fbk.eu>
|
|
+ or email to <nusmv-users@fbk.eu>.
|
|
+ Please report bugs to <nusmv-users@fbk.eu>.
|
|
+
|
|
+ To contact the NuSMV development board, email to <nusmv@fbk.eu>. ]
|
|
+
|
|
+**************************************************************************************************/
|
|
+
|
|
+#ifndef SOLVER_C_h
|
|
+#define SOLVER_C_h
|
|
+
|
|
+//=================================================================================================
|
|
+// Solver -- the main class:
|
|
+
|
|
+#define MiniSat_ptr void *
|
|
+
|
|
+enum {
|
|
+ __polarity_unsupported = -1,
|
|
+ polarity_true = 0,
|
|
+ polarity_false = 1,
|
|
+ polarity_user = 2,
|
|
+ polarity_rnd = 3,
|
|
+};
|
|
+
|
|
+MiniSat_ptr MiniSat_Create();
|
|
+void MiniSat_Delete(MiniSat_ptr);
|
|
+int MiniSat_Nof_Variables(MiniSat_ptr);
|
|
+int MiniSat_Nof_Clauses(MiniSat_ptr);
|
|
+int MiniSat_New_Variable(MiniSat_ptr);
|
|
+int MiniSat_Add_Clause(MiniSat_ptr, int *clause_lits, int num_lits);
|
|
+int MiniSat_Solve(MiniSat_ptr);
|
|
+int MiniSat_Solve_Assume(MiniSat_ptr, int nof_assumed_lits, int *assumed_lits);
|
|
+int MiniSat_simplifyDB(MiniSat_ptr);
|
|
+int MiniSat_Get_Value(MiniSat_ptr, int var_num);
|
|
+int MiniSat_Get_Nof_Conflict_Lits(MiniSat_ptr ms);
|
|
+void MiniSat_Get_Conflict_Lits(MiniSat_ptr ms, int* conflict_lits);
|
|
+
|
|
+void MiniSat_Set_Polarity_Mode(MiniSat_ptr ms, int mode);
|
|
+int MiniSat_Get_Polarity_Mode(MiniSat_ptr ms);
|
|
+void MiniSat_Set_Random_Seed(MiniSat_ptr ms, double seed);
|
|
+
|
|
+// NuSMV: PREF MOD
|
|
+void MiniSat_Set_Preferred_Variable(MiniSat_ptr, int);
|
|
+void MiniSat_Clear_Preferred_Variables(MiniSat_ptr);
|
|
+// NuSMV: PREF MOD END
|
|
+
|
|
+//=================================================================================================
|
|
+#endif
|
|
--- a/minisat/utils/System.cc
|
|
+++ b/minisat/utils/System.cc
|
|
@@ -77,7 +77,7 @@
|
|
struct rusage ru;
|
|
getrusage(RUSAGE_SELF, &ru);
|
|
return (double)ru.ru_maxrss / 1024; }
|
|
-double Minisat::memUsedPeak() { return memUsed(); }
|
|
+double Minisat::memUsedPeak(bool strictlyPeak) { return memUsed(); }
|
|
|
|
|
|
#elif defined(__APPLE__)
|
|
@@ -87,11 +87,11 @@
|
|
malloc_statistics_t t;
|
|
malloc_zone_statistics(NULL, &t);
|
|
return (double)t.max_size_in_use / (1024*1024); }
|
|
-double Minisat::memUsedPeak() { return memUsed(); }
|
|
+double Minisat::memUsedPeak(bool strictlyPeak) { return memUsed(); }
|
|
|
|
#else
|
|
double Minisat::memUsed() { return 0; }
|
|
-double Minisat::memUsedPeak() { return 0; }
|
|
+double Minisat::memUsedPeak(bool strictlyPeak) { return 0; }
|
|
#endif
|
|
|
|
|