let add_default_trans (states, transitions as auto) otherwise =
let add_one_trans acc tr =
let st = tr.start in
let my_trans = Path_analysis.get_transitions_of_state st auto in
Aorai_option.debug "Considering new otherwise transition: %s -> %s"
st.name tr.stop.name;
let cond =
List.fold_left
(fun acc c ->
let (cond,_) = c.cross in
Aorai_option.debug "considering trans %s -> %s: %a"
c.start.name c.stop.name Promelaoutput.print_condition cond;
let neg = tnot cond in
Aorai_option.debug "negation: %a"
Promelaoutput.print_condition neg;
Aorai_option.debug "acc: %a"
Promelaoutput.print_condition acc;
let res = tand acc (tnot cond) in
Aorai_option.debug "partial result: %a"
Promelaoutput.print_condition res;
res
)
TTrue
my_trans
in
Aorai_option.debug "resulting transition: %a"
Promelaoutput.print_condition cond;
let cond,_ = Logic_simplification.simplifyCond cond in
let new_trans = new_trans st tr.stop (cond,[]) in
new_trans::acc
in
let transitions = List.fold_left add_one_trans transitions otherwise in
states, transitions