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
00044 #ifndef __NUSMV_CORE_LTL_LTL_H__
00045 #define __NUSMV_CORE_LTL_LTL_H__
00046
00047 #include "nusmv/core/utils/utils.h"
00048 #include "nusmv/core/node/node.h"
00049 #include "nusmv/core/prop/Prop.h"
00050 #include "nusmv/core/wff/ExprMgr.h"
00051 #include "nusmv/core/trace/Trace.h"
00052 #include "nusmv/core/utils/OStream.h"
00053
00054
00055
00056
00057
00064 typedef struct Ltl_StructCheckLtlSpec_TAG* Ltl_StructCheckLtlSpec_ptr;
00065
00071 typedef node_ptr (*Ltl_StructCheckLtlSpec_oreg2smv)(NuSMVEnv_ptr,
00072 unsigned int,
00073 node_ptr);
00074 typedef node_ptr (*Ltl_StructCheckLtlSpec_ltl2smv)(NuSMVEnv_ptr,
00075 unsigned int,
00076 node_ptr);
00077
00078
00079
00080
00081
00087 #define LTL_STRUCTCHECKLTLSPEC(self) \
00088 ((Ltl_StructCheckLtlSpec_ptr) self)
00089
00095 #define LTL_STRUCTCHECKLTLSPEC_CHECK_INSTANCE(self) \
00096 (nusmv_assert(LTL_STRUCTCHECKLTLSPEC(self) != \
00097 LTL_STRUCTCHECKLTLSPEC(NULL)))
00098
00099
00100
00101
00102
00103
00109 void print_ltlspec(OStream_ptr, Prop_ptr, Prop_PrintFmt);
00110
00127 void Ltl_CheckLtlSpec(NuSMVEnv_ptr env, Prop_ptr prop);
00128
00146 void
00147 Ltl_spec_to_hierarchy(NuSMVEnv_ptr env,
00148 Expr_ptr spec, node_ptr context,
00149 node_ptr (*what2smv)(NuSMVEnv_ptr env,
00150 unsigned int id,
00151 node_ptr expr),
00152 SymbLayer_ptr layer,
00153 FlatHierarchy_ptr outfh);
00154
00160 Expr_ptr
00161 Ltl_apply_input_vars_rewriting(Expr_ptr spec, SymbTable_ptr st,
00162 SymbLayer_ptr layer,
00163 FlatHierarchy_ptr outfh);
00164
00171 Ltl_StructCheckLtlSpec_ptr Ltl_StructCheckLtlSpec_create(NuSMVEnv_ptr env,
00172 Prop_ptr prop);
00173
00180 void Ltl_StructCheckLtlSpec_destroy(Ltl_StructCheckLtlSpec_ptr self);
00181
00188 void Ltl_StructCheckLtlSpec_set_oreg2smv(Ltl_StructCheckLtlSpec_ptr self,
00189 Ltl_StructCheckLtlSpec_oreg2smv oreg2smv);
00190
00197 void Ltl_StructCheckLtlSpec_set_ltl2smv(Ltl_StructCheckLtlSpec_ptr self,
00198 Ltl_StructCheckLtlSpec_ltl2smv ltl2smv);
00199
00206 void Ltl_StructCheckLtlSpec_set_negate_formula(Ltl_StructCheckLtlSpec_ptr self,
00207 boolean negate_formula);
00208
00217 void Ltl_StructCheckLtlSpec_set_do_rewriting(Ltl_StructCheckLtlSpec_ptr self,
00218 boolean do_rewriting);
00219
00227 bdd_ptr Ltl_StructCheckLtlSpec_get_s0(Ltl_StructCheckLtlSpec_ptr self);
00228
00236 bdd_ptr Ltl_StructCheckLtlSpec_get_clean_s0(Ltl_StructCheckLtlSpec_ptr self);
00237
00246 void Ltl_StructCheckLtlSpec_build(Ltl_StructCheckLtlSpec_ptr self);
00247
00263 void Ltl_StructCheckLtlSpec_check(Ltl_StructCheckLtlSpec_ptr self);
00264
00271 void Ltl_StructCheckLtlSpec_print_result(Ltl_StructCheckLtlSpec_ptr self);
00272
00282 Trace_ptr
00283 Ltl_StructCheckLtlSpec_build_counter_example(Ltl_StructCheckLtlSpec_ptr self,
00284 NodeList_ptr symbols);
00285
00295 void
00296 Ltl_StructCheckLtlSpec_explain(Ltl_StructCheckLtlSpec_ptr self,
00297 NodeList_ptr symbols);
00298
00299 #endif