let init_specification () =
List.iter
(fun name ->
let pre,_ = Data_for_aorai.get_func_pre name in
let post_st,post_tr = mk_empty_pre_or_post_bycase () in
Array.iteri
(fun index _ ->
if pre.(index) then begin
post_st.(index)<- fst (Data_for_aorai.get_func_post name) ;
post_tr.(index)<- snd (Data_for_aorai.get_func_post name)
end
)
post_st;
Array.iteri
(fun st1 post ->
Array.iteri
(fun st2 b ->
if b then
if
not
(Path_analysis.existing_path
(Data_for_aorai.getAutomata()) st1 st2)
then
begin
post_st.(st1).(st2) <- false;
Aorai_option.feedback ~level:2
"Function %s : state %s unreachable in post from %s (Dijkstra simplification).\n" name
(Data_for_aorai.getStateName st2)
(Data_for_aorai.getStateName st1)
end
)
post ;
)
post_st;
Array.iteri
(fun st1 _ ->
List.iter
(fun tr ->
let st2 = tr.Promelaast.stop.Promelaast.nums in
if (not (post_st.(st1).(st2))) &&
post_tr.(st1).(tr.Promelaast.numt) then
begin
post_tr.(st1).(tr.Promelaast.numt) <- false;
if Aorai_option.verbose_atleast 2 then
Aorai_option.feedback
"Function %s: transition %d reaches an unreachable state in post from %s (Dijkstra simplification)."
name tr.Promelaast.numt
(Data_for_aorai.getStateName st1)
end
)
(snd (Data_for_aorai.getAutomata()))
)
post_tr;
Data_for_aorai.set_func_post_bycase name (post_st,post_tr)
)
(Data_for_aorai.getFunctions_from_c ())