let mk_decl_axiomatized_auotmata () =
let (_,trans_l) = getAutomata() in
let param=(Cil_const.make_logic_var "tr" Linteger) in
let logic=mk_global_logic transStart [param] (Some Linteger) in
let tr_start_log_info = Data_for_ltl.get_logic transStart in
let annotlist=List.fold_left
(fun res tr ->
(mk_global_axiom
(transStart^(string_of_int tr.numt))
(Prel(Req,
mk_dummy_term
(Tapp(tr_start_log_info,[],[mk_int_term tr.numt]))
Cil.intType,
mk_int_term tr.start.nums))
)::res
)
[logic]
trans_l in
globals_queue:=(GAnnot(Daxiomatic(transStart,List.rev annotlist),
Cilutil.locUnknown
))::(!globals_queue);
let logic=mk_global_logic transStop [param] (Some Linteger) in
let tr_stop_log_info = Data_for_ltl.get_logic transStop in
let annotlist=List.fold_left
(fun res tr ->
(mk_global_axiom
(transStop^(string_of_int tr.numt))
(Prel(Req,
mk_dummy_term
(Tapp(tr_stop_log_info,[],[mk_int_term tr.numt]))
Cil.intType,
mk_int_term tr.stop.nums))
)::res
)
[logic]
trans_l in
globals_queue:=(GAnnot(Daxiomatic(transStop,List.rev annotlist),
Cilutil.locUnknown
))::(!globals_queue);
let num= Cil_const.make_logic_var "_buch_numTrans" Linteger in
let op = Cil_const.make_logic_var "_buch_op" Linteger in
let st = Cil_const.make_logic_var "_buch_status" Linteger in
let pred =
mk_conjunction
(List.map
(fun tr ->
Pimplies(
unamed (Prel(Req, mk_term_from_logic_var num, mk_int_term tr.numt)),
unamed (crosscond_to_pred tr.cross op st)
)
)
trans_l
)
in
mk_global_predicate transCondP ["L"] [num;op;st] pred;
let pred2 =
Papp(
Data_for_ltl.get_predicate transCondP,
[(LogicLabel("L"),LogicLabel("L"))],
[mk_term_from_logic_var num;
mk_term_from_logic_var (Cil.cvar_to_lvar (Data_for_ltl.get_varinfo curOp));
mk_term_from_logic_var (Cil.cvar_to_lvar (Data_for_ltl.get_varinfo curOpStatus))
]
)
in
mk_global_predicate transCond ["L"] [num] pred2