SOLVER_INCLUDE = $(TOP)/src/sat/core
endif
-# OPTION to compile Simplifying MiniSAT
-ifeq ($(SAT),simp)
- SIMP = true
- CFLAGS_BASE = $(OPTIMIZE) -DSIMP
- MTL = $(TOP)/src/sat/mtl
- SOLVER_INCLUDE = $(TOP)/src/sat/simp
-endif
-
SHELL=/bin/bash
# You can compile using make STATIC=true to compile a statically
echo "Using g++ instead of gcc";;
--with-minisat-core)
SAT=minisat;;
- --with-minisat-simp)
- SAT=simp;;
--with-cryptominisat2)
SAT=cryptominisat2;;
*)
echo "Usage: $0 [options]"
echo " --with-prefix=/prefix/path Install STP at the specified path"
echo " --with-g++=/path/to/g++ Use g++ at the specified path"
- echo " --with-minisat-core Use core MiniSAT solver (default)"
- echo " --with-minisat-simp Use simplifying MiniSAT solver"
+ echo " --with-minisat-core Use core MiniSAT solver (default), runtime option to use simplifying"
echo " --with-cryptominisat2 Use CRYPTOMiniSAT 2.x solver"
echo "$0 failed"
exit 1;;
bm->CreateNode(NOT, query));
//solver instantiated here
-#if defined CORE || defined CRYPTOMINISAT || defined CRYPTOMINISAT2
+#if defined CRYPTOMINISAT || defined CRYPTOMINISAT2
MINISAT::Solver NewSolver;
#endif
}
#endif
-#ifdef SIMP
- MINISAT::SimpSolver NewSolver;
+#if defined CORE
+ MINISAT::Solver *newS;
+ if (bm->UserFlags.solver_to_use == UserDefinedFlags::SIMPLIFYING_MINISAT_SOLVER)
+ newS = new MINISAT::SimpSolver();
+ else if (bm->UserFlags.solver_to_use == UserDefinedFlags::MINISAT_SOLVER)
+ newS = new MINISAT::Solver();
+ else
+ FatalError("unknown option");
+
+ MINISAT::Solver& NewSolver = *newS;
#endif
if(bm->UserFlags.stats_flag)
NewSolver.verbosity = 1;
}
+ SOLVER_RETURN_TYPE result;
if(bm->UserFlags.num_absrefine_flag)
{
- return UserGuided_AbsRefine(NewSolver,
+ result = UserGuided_AbsRefine(NewSolver,
original_input);
}
else
{
- return TopLevelSTPAux(NewSolver,
+ result = TopLevelSTPAux(NewSolver,
original_input, original_input);
}
+
+#if defined CORE
+ delete newS;
+#endif
+
+ return result;
+
} //End of TopLevelSTP()
//Acceps a query, calls the SAT solver and generates Valid/InValid.
bool tseitin_are_decision_variables_flag;
+ // Available back-end SAT solvers.
+ enum SATSolvers
+ {
+ MINISAT_SOLVER =0,
+ SIMPLIFYING_MINISAT_SOLVER
+ };
+
+ enum SATSolvers solver_to_use;
+
//CONSTRUCTOR
UserDefinedFlags()
{
quick_statistics_flag=false;
tseitin_are_decision_variables_flag=true;
+
+ // use minisat by default.
+ solver_to_use = MINISAT_SOLVER;
+
} //End of constructor for UserDefinedFlags
}; //End of struct UserDefinedFlags
* step 5. Call SAT to determine if input is SAT or UNSAT
********************************************************************/
-typedef enum {PRINT_BACK_C=1, PRINT_BACK_CVC, PRINT_BACK_SMTLIB, PRINT_BACK_GDL, PRINT_BACK_DOT, OUTPUT_BENCH, OUTPUT_CNF} OptionType;
+typedef enum {PRINT_BACK_C=1, PRINT_BACK_CVC, PRINT_BACK_SMTLIB, PRINT_BACK_GDL, PRINT_BACK_DOT, OUTPUT_BENCH, OUTPUT_CNF, USE_SIMPLIFYING_SOLVER} OptionType;
int main(int argc, char ** argv) {
char * infile;
"-r : switch refinement off (optimizations are ON by default)\n";
helpstring +=
"-s : print function statistics\n";
+
+ #if !defined CRYPTOMINISAT && !defined CRYPTOMINISAT2
+ helpstring +=
+ "--simplifying-minisat : use simplifying-minisat rather than minisat\n";
+ #endif
+
helpstring +=
"-t : print quick statistics\n";
helpstring +=
lookup.insert(make_pair("--print-back-dot",PRINT_BACK_DOT));
lookup.insert(make_pair("--output-CNF",OUTPUT_CNF));
lookup.insert(make_pair("--output-bench",OUTPUT_BENCH));
+ lookup.insert(make_pair("--simplifying-minisat",USE_SIMPLIFYING_SOLVER));
+
switch(lookup[argv[i]])
{
bm->UserFlags.output_bench_flag = true;
break;
+#if !defined CRYPTOMINISAT && !defined CRYPTOMINISAT2
+ case USE_SIMPLIFYING_SOLVER:
+ bm->UserFlags.solver_to_use = UserDefinedFlags::SIMPLIFYING_MINISAT_SOLVER;
+ break;
+#endif
+
+
default:
fprintf(stderr,usage,prog);
cout << helpstring;
.PHONY: core
core:
$(MAKE) -C core lib all
-
-.PHONY: simp
-simp:
- $(MAKE) -C core lib all
$(MAKE) -C simp lib all
.PHONY: cryptominisat
cryptominisat2:
$(MAKE) -C cryptominisat2 lib all
-
.PHONY: clean
clean:
rm -rf *.o *~ libminisat.a
#ifdef CORE
#include "core/Solver.h"
#include "core/SolverTypes.h"
-#endif
-
-#ifdef SIMP
#include "simp/SimpSolver.h"
-#include "core/SolverTypes.h"
#endif
#endif