00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00037 #ifndef __NUSMV_CORE_SAT_SOLVERS_SAT_MINISAT_PRIVATE_H__
00038 #define __NUSMV_CORE_SAT_SOLVERS_SAT_MINISAT_PRIVATE_H__
00039
00040 #include "nusmv/core/sat/solvers/SatMinisat.h"
00041 #include "nusmv/core/sat/solvers/satMiniSatIfc.h"
00042
00043 #include "nusmv/core/sat/SatIncSolver_private.h"
00044 #include "nusmv/core/utils/assoc.h"
00045
00046 #include "nusmv/core/utils/Stack.h"
00047
00048
00049
00050
00051
00052
00053
00054
00062 typedef struct SatMinisat_TAG
00063 {
00064 INHERITS_FROM(SatIncSolver);
00065
00066 MiniSat_ptr minisatSolver;
00067
00068
00069 hash_ptr cnfVar2minisatVar;
00070 hash_ptr minisatVar2cnfVar;
00071
00072
00073
00074 Slist_ptr conflict;
00075
00076
00077
00078
00079 int* minisatClause;
00080
00081 unsigned int minisatClauseSize;
00082
00083 Stack_ptr minisat_itp_groups;
00084 } SatMinisat;
00085
00088
00089
00090
00095 void sat_minisat_init(SatMinisat_ptr self, const NuSMVEnv_ptr env,
00096 const char* name, boolean enable_proof_logging);
00101 void sat_minisat_deinit(SatMinisat_ptr self);
00102
00107 int sat_minisat_cnfLiteral2minisatLiteral(SatMinisat_ptr self,
00108 int cnfLitaral);
00113 int sat_minisat_minisatLiteral2cnfLiteral(SatMinisat_ptr self,
00114 int minisatLiteral);
00115
00116
00121 void sat_minisat_add(const SatSolver_ptr self,
00122 const Be_Cnf_ptr cnfProb,
00123 SatSolverGroup group);
00124
00129 void sat_minisat_set_polarity(const SatSolver_ptr self,
00130 const Be_Cnf_ptr cnfProb,
00131 int polarity,
00132 SatSolverGroup group);
00133
00138 void sat_minisat_set_preferred_variables(const SatSolver_ptr self,
00139 const Slist_ptr cnfVars);
00140
00145 void sat_minisat_clear_preferred_variables(const SatSolver_ptr self);
00146
00151 SatSolverResult sat_minisat_solve_all_groups(const SatSolver_ptr self);
00152
00157 SatSolverResult sat_minisat_solve_permanent_group_assume(const SatSolver_ptr self, Slist_ptr assumption);
00158
00159 Slist_ptr sat_minisat_get_conflicts(const SatSolver_ptr);
00160
00165 Slist_ptr sat_minisat_make_model(const SatSolver_ptr self);
00166
00167
00172 SatSolverGroup
00173 sat_minisat_create_group(const SatIncSolver_ptr self);
00174
00179 void
00180 sat_minisat_destroy_group(const SatIncSolver_ptr self,
00181 SatSolverGroup group);
00182
00187 void
00188 sat_minisat_move_to_permanent_and_destroy_group(const SatIncSolver_ptr self,
00189 SatSolverGroup group);
00194 SatSolverResult
00195 sat_minisat_solve_groups(const SatIncSolver_ptr self,
00196 const Olist_ptr groups);
00197
00202 SatSolverResult
00203 sat_minisat_solve_without_groups(const SatIncSolver_ptr self,
00204 const Olist_ptr groups);
00205
00206
00211 Slist_ptr sat_minisat_make_conflicts(const SatMinisat_ptr self);
00212
00217 int* sat_minisat_get_minisatClause(const SatMinisat_ptr self);
00222 int sat_minisat_get_minisatClauseSize(const SatMinisat_ptr self);
00227 void sat_minisat_enlarge_minisatClause(const SatMinisat_ptr self,
00228 unsigned int minSize);
00229
00230
00235 void sat_minisat_set_random_mode(SatSolver_ptr self, double seed);
00240 void sat_minisat_set_polarity_mode(SatSolver_ptr self, int mode);
00245 int sat_minisat_get_polarity_mode(const SatSolver_ptr self);
00246
00247 int sat_minisat_get_cnf_var(const SatSolver_ptr solver, int var);
00248
00251 #endif