let get_preds_wrt_params transl f status =
let op = Cil_const.make_logic_var "_aorai_op" Linteger in
let st = Cil_const.make_logic_var "_aorai_status" Linteger in
let event = (f,status) in
let preds = ref [] in
Array.iteri
(fun trn b ->
if b then
begin
Aorai_option.debug "considering transition %d" trn;
let trans = Data_for_aorai.getTransition trn in
let dnf =
snd (Logic_simplification.simplifyCond (fst trans.cross))
in
let cond = Logic_simplification.simplifyDNFwrtCtx dnf f status in
let pred = crosscond_to_pred ~event cond op st in
let retrieve_state (st,_) = st.nums = trans.stop.nums in
let oth_preds =
try
snd (List.find retrieve_state !preds)
with Not_found -> pfalse
in
let pred = Logic_const.por (oth_preds,pred) in
preds :=
(trans.stop,pred) ::
(List.filter (not $ retrieve_state) !preds)
end
)
transl;
let preds =
List.map (fun (st, pred) -> pimplies (is_state_pred st, pred)) !preds
in
let pred = Logic_const.pands preds in
if Logic_utils.is_trivially_true pred then None else Some pred