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_MC_MC_H__
00039 #define __NUSMV_CORE_MC_MC_H__
00040
00041 #include "nusmv/core/utils/utils.h"
00042 #include "nusmv/core/dd/dd.h"
00043 #include "nusmv/core/prop/Prop.h"
00044 #include "nusmv/core/fsm/bdd/BddFsm.h"
00045 #include "nusmv/core/trace/Trace.h"
00046 #include "nusmv/core/opt/opt.h"
00047
00056 typedef struct McCheckInvarOpts_TAG {
00057 Check_Strategy strategy;
00058 FB_Heuristic fb_heuristic;
00059 Bdd2bmc_Heuristic bdd2bmc_heuristic;
00060 int threshold;
00061 int bmc_length;
00062 } McCheckInvarOpts;
00063
00064 void McCheckInvarOpts_init(McCheckInvarOpts* options,
00065 NuSMVEnv_ptr env);
00066 void McCheckInvarOpts_init_invalid(McCheckInvarOpts* options);
00067 boolean McCheckInvarOpts_is_valid(McCheckInvarOpts* options);
00068
00074 #define MC_CHECK_INVAR_OPTS_INVALID -1
00075
00076
00077
00078
00079
00085 void Mc_CheckCTLSpec(NuSMVEnv_ptr env, Prop_ptr prop);
00086
00100 void Mc_CheckAGOnlySpec(NuSMVEnv_ptr env, Prop_ptr prop);
00101
00110 void Mc_CheckInvar(NuSMVEnv_ptr env, Prop_ptr prop);
00111
00127 void Mc_CheckInvarSilently(NuSMVEnv_ptr env,
00128 Prop_ptr prop,
00129 Trace_ptr* trace);
00130
00146 void
00147 Mc_CheckInvar_With_Strategy(NuSMVEnv_ptr env,
00148 Prop_ptr prop,
00149 Check_Strategy strategy,
00150 Trace_ptr* trace,
00151 boolean silent);
00152
00169 void
00170 Mc_CheckInvar_With_Strategy_And_Symbols(NuSMVEnv_ptr env,
00171 Prop_ptr prop,
00172 Check_Strategy strategy,
00173 Trace_ptr* trace,
00174 boolean silent,
00175 NodeList_ptr symbols);
00176
00182 void Mc_CheckCompute(NuSMVEnv_ptr env, Prop_ptr prop);
00183
00193 int Mc_check_psl_property(NuSMVEnv_ptr env, Prop_ptr prop);
00194
00226 void Mc_CheckLanguageEmptiness(NuSMVEnv_ptr env,
00227 const BddFsm_ptr fsm,
00228 boolean allinit,
00229 boolean verbose);
00230
00231
00245 Trace_ptr
00246 Mc_create_trace_from_bdd_state_input_list(const BddEnc_ptr bdd_enc,
00247 const NodeList_ptr symbols,
00248 const char* desc,
00249 const TraceType type,
00250 node_ptr path);
00251
00263 Trace_ptr
00264 Mc_fill_trace_from_bdd_state_input_list(const BddEnc_ptr bdd_enc,
00265 Trace_ptr trace,
00266 node_ptr path);
00267
00275 void
00276 Mc_trace_step_put_state_from_bdd(Trace_ptr trace, TraceIter step,
00277 BddEnc_ptr bdd_enc, bdd_ptr bdd);
00278
00286 void
00287 Mc_trace_step_put_input_from_bdd(Trace_ptr trace, TraceIter step,
00288 BddEnc_ptr bdd_enc, bdd_ptr bdd);
00289
00295 void print_spec(OStream_ptr file, Prop_ptr prop, Prop_PrintFmt fmt);
00296
00302 void print_invar(OStream_ptr file, Prop_ptr n, Prop_PrintFmt fmt);
00303
00309 void print_compute(OStream_ptr file, Prop_ptr, Prop_PrintFmt fmt);
00310
00318 BddStates ex(BddFsm_ptr, BddStates);
00319
00327 BddStates ef(BddFsm_ptr, BddStates);
00328
00336 BddStates eg(BddFsm_ptr, BddStates);
00337
00345 BddStates eu(BddFsm_ptr, BddStates, BddStates);
00346
00354 BddStates au(BddFsm_ptr, BddStates, BddStates);
00355
00364 BddStates ebu(BddFsm_ptr, BddStates, BddStates, int, int);
00365
00374 BddStates ebf(BddFsm_ptr, BddStates, int, int);
00375
00384 BddStates ebg(BddFsm_ptr, BddStates, int, int);
00385
00394 BddStates abu(BddFsm_ptr, BddStates, BddStates, int, int);
00395
00408 int minu(BddFsm_ptr, bdd_ptr, bdd_ptr);
00409
00425 int maxu(BddFsm_ptr, bdd_ptr, bdd_ptr);
00426
00438 node_ptr explain(BddFsm_ptr, BddEnc_ptr, node_ptr,
00439 node_ptr, node_ptr);
00440
00450 bdd_ptr
00451 eval_ctl_spec(BddFsm_ptr, BddEnc_ptr enc, node_ptr, node_ptr);
00452
00461 node_ptr
00462 eval_formula_list(BddFsm_ptr, BddEnc_ptr enc, node_ptr, node_ptr);
00463
00474 int
00475 eval_compute(BddFsm_ptr, BddEnc_ptr enc, node_ptr, node_ptr);
00476
00484 void free_formula_list(DDMgr_ptr , node_ptr);
00485
00486
00487
00493 int Mc_check_psl_spec(const NuSMVEnv_ptr env, const int prop_no);
00494
00500 int Mc_check_invar(NuSMVEnv_ptr env,
00501 Prop_ptr prop,
00502 McCheckInvarOpts* options);
00503
00504
00505
00513 node_ptr make_AG_counterexample(BddFsm_ptr, BddStates);
00514
00515 #endif