let merge_actions kf ki ki1 ki2 post_st1 post_st2 =
  let (state,_ as auto) = Data_for_aorai.getAutomata () in
(*  Format.printf "Merging from %a and %a in %a@."
    Cil_datatype.Kinstr.pretty ki1
    Cil_datatype.Kinstr.pretty ki2
    Cil_datatype.Kinstr.pretty ki; *)

  let merge_one_path pre_state post_state =
    let trans = Path_analysis.get_transitions_of_state pre_state auto in
    if List.exists 
      (fun x -> post_st1.(x.stop.nums).(post_state.nums)) trans
    then begin
      let action =
        Data_for_aorai.get_action_bindings kf ki1 pre_state post_state
      in
      Data_for_aorai.merge_action_bindings kf ki pre_state post_state action
    end;
    if List.exists 
      (fun x -> post_st2.(x.stop.nums).(post_state.nums)) trans 
    then begin
      let action =
        Data_for_aorai.get_action_bindings kf ki2 pre_state post_state
      in
      Data_for_aorai.merge_action_bindings kf ki pre_state post_state action
    end;
(*    if List.exists 
      (fun x -> post_st2.(x.stop.nums).(post_state.nums)
        || post_st1.(x.stop.nums).(post_state.nums))
      trans 
    then begin
    let res = Data_for_aorai.get_action_bindings kf ki pre_state post_state in
       Format.printf "%s -> %s Result is@.%a" 
          pre_state.Promelaast.name post_state.Promelaast.name
       print_action_binding res
    end *)

  in
  ignore (Extlib.product merge_one_path state state)