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
00038 #ifndef __NUSMV_CORE_BMC_SBMC_SBMC_UTILS_H__
00039 #define __NUSMV_CORE_BMC_SBMC_SBMC_UTILS_H__
00040
00041 #include "nusmv/core/prop/propPkg.h"
00042 #include "nusmv/core/bmc/sbmc/sbmcStructs.h"
00043 #include "nusmv/core/enc/enc.h"
00044 #include "nusmv/core/enc/be/BeEnc.h"
00045 #include "nusmv/core/trace/Trace.h"
00046 #include "nusmv/core/trace/TraceMgr.h"
00047 #include "nusmv/core/sat/sat.h"
00048 #include "nusmv/core/utils/utils.h"
00049 #include "nusmv/core/utils/assoc.h"
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00066 typedef struct sbmc_MetaSolver_TAG sbmc_MetaSolver;
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00087 #define sbmc_SNH_text "%s:%d: Should not happen"
00088
00094 #define sbmc_SNYI_text "%s:%d: Something not yet implemented\n"
00095
00096
00099
00100
00101
00102
00108 int sbmc_get_unique_id(const NuSMVEnv_ptr env);
00109
00115 void sbmc_reset_unique_id(const NuSMVEnv_ptr env);
00116
00122 void sbmc_increment_unique_id(const NuSMVEnv_ptr env);
00123
00134 void sbmc_print_node(const NuSMVEnv_ptr env,
00135 FILE * out, const char * prefix, node_ptr node,
00136 const char * postfix);
00137
00145 void sbmc_print_node_list(const NuSMVEnv_ptr env,
00146 FILE *out, lsList l);
00147
00157 node_ptr sbmc_add_new_state_variable(const NuSMVEnv_ptr env,
00158 SymbLayer_ptr layer,
00159 const char *name);
00160
00169 lsList sbmc_find_formula_vars(const NuSMVEnv_ptr env, node_ptr ltlspec);
00170
00180 void sbmc_print_varmap(const NuSMVEnv_ptr env, FILE *out,
00181 node_ptr node, sbmc_node_info *info);
00182
00192 void sbmc_print_Gvarmap(const NuSMVEnv_ptr env, FILE *out,
00193 node_ptr var, node_ptr formula);
00194
00204 void sbmc_print_Fvarmap(const NuSMVEnv_ptr env, FILE *out,
00205 node_ptr var, node_ptr formula);
00206
00216 node_ptr sbmc_1_fresh_state_var(const NuSMVEnv_ptr env,
00217 SymbLayer_ptr layer, unsigned int *index);
00218
00229 array_t * sbmc_n_fresh_state_vars(const NuSMVEnv_ptr env,
00230 SymbLayer_ptr layer, const unsigned int n,
00231 unsigned int *index);
00232
00245 void sbmc_allocate_trans_vars(const NuSMVEnv_ptr env,
00246 sbmc_node_info *info, SymbLayer_ptr layer,
00247 lsList state_vars_formula_pd0,
00248 lsList state_vars_formula_pdx,
00249 unsigned int *new_var_index);
00250
00260 node_ptr sbmc_make_boolean_formula(BddEnc_ptr bdd_enc, Prop_ptr ltlprop);
00261
00284 void sbmc_find_relevant_vars(state_vars_struct *svs,
00285 BeFsm_ptr be_fsm, node_ptr bltlspec);
00286
00298 Trace_ptr
00299 Sbmc_Utils_generate_cntexample(BeEnc_ptr be_enc, sbmc_MetaSolver * solver,
00300 node_ptr l_var, const int k,
00301 const char * trace_name,
00302 NodeList_ptr symbols);
00303
00316 Trace_ptr
00317 Sbmc_Utils_generate_and_print_cntexample(BeEnc_ptr be_enc,
00318 TraceMgr_ptr tm,
00319 sbmc_MetaSolver * solver,
00320 node_ptr l_var,
00321 const int k,
00322 const char * trace_name,
00323 NodeList_ptr symbols);
00324
00334 Trace_ptr
00335 Sbmc_Utils_fill_cntexample(BeEnc_ptr be_enc, sbmc_MetaSolver * solver,
00336 node_ptr l_var, const int k, Trace_ptr trace);
00337
00347 int sbmc_L_state(void);
00348
00358 int sbmc_E_state(void);
00359
00369 int sbmc_real_k(int k);
00370
00380 unsigned int sbmc_model_k(int k);
00381
00391 char* sbmc_real_k_string(const unsigned int k_real);
00392
00400 sbmc_MetaSolver * sbmc_MS_create(BeEnc_ptr be_enc);
00401
00409 void sbmc_MS_destroy(sbmc_MetaSolver *ms);
00410
00419 void sbmc_MS_create_volatile_group(sbmc_MetaSolver *ms);
00420
00430 void sbmc_MS_destroy_volatile_group(sbmc_MetaSolver *ms);
00431
00441 void sbmc_MS_switch_to_permanent_group(sbmc_MetaSolver *ms);
00442
00453 void sbmc_MS_switch_to_volatile_group(sbmc_MetaSolver *ms);
00454
00463 void sbmc_MS_goto_permanent_group(sbmc_MetaSolver *ms);
00464
00474 void sbmc_MS_goto_volatile_group(sbmc_MetaSolver *ms);
00475
00485 void sbmc_MS_force_true(sbmc_MetaSolver *ms, be_ptr be_constraint,
00486 Be_CnfAlgorithm cnf_alg);
00487
00499 void sbmc_MS_force_constraint_list(sbmc_MetaSolver *ms, lsList constraints,
00500 Be_CnfAlgorithm cnf_alg);
00501
00513 SatSolverResult sbmc_MS_solve(sbmc_MetaSolver *ms);
00514
00526 SatSolverResult sbmc_MS_solve_assume(sbmc_MetaSolver *ms, Slist_ptr assumptions);
00527
00533 SatSolver_ptr sbmc_MS_get_solver(sbmc_MetaSolver *ms);
00534
00540 Slist_ptr sbmc_MS_get_conflicts(sbmc_MetaSolver *ms);
00541
00552 Slist_ptr sbmc_MS_get_model(sbmc_MetaSolver *ms);
00553
00559 void sbmc_add_loop_variable(BddEnc_ptr bdd_enc, BeFsm_ptr fsm);
00560
00566 void sbmc_remove_loop_variable(BddEnc_ptr bdd_enc, BeFsm_ptr fsm);
00567
00573 void sbmc_loop_var_name_set(const NuSMVEnv_ptr env, node_ptr n);
00574
00580 node_ptr sbmc_loop_var_name_get(const NuSMVEnv_ptr env);
00581
00584 #endif