let make_prev_pred_neg func status st auto_state =
let (_,tr_state) = auto_state in
let auto = Data_for_aorai.getAutomata () in
let treat_one (start_states, cond1) st =
let trans = Path_analysis.get_transitions_to_state st auto in
let event = (func, status) in
let op = Data_for_aorai.get_logic_var Data_for_aorai.curOp in
let func_status = Data_for_aorai.get_logic_var Data_for_aorai.curOp in
let start_states, cond2 =
List.fold_left
(fun (start_states,conds as acc) tr ->
if tr_state.(tr.numt) then
let cond, _ = tr.cross in
let my_pred =
Logic_const.pand
(is_state_pred tr.start,
Logic_const.pnot
(crosscond_to_pred ~event cond op func_status))
in
Data_for_aorai.Aorai_state.Set.add tr.start start_states,
Logic_const.por (my_pred,conds)
else acc)
(start_states,pfalse) trans
in start_states, Logic_const.pand (cond1, cond2)
in
let (start_states, cond) =
List.fold_left treat_one (Data_for_aorai.Aorai_state.Set.empty,ptrue) st
in
let not_start =
Data_for_aorai.Aorai_state.Set.fold
(fun st acc -> Logic_const.pand (is_out_of_state_pred st,acc))
start_states ptrue
in
Logic_const.por (cond, not_start)