let update_loop_actions kf init inner last (post_st,_) =
  let (state,_ as auto) = Data_for_aorai.getAutomata () in
  let changed = ref false in
  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_st.(x.stop.nums).(post_state.nums)) trans 
    then begin
      let action_pre =
        Data_for_aorai.get_action_bindings kf init pre_state post_state
      in
      let action_step =
        Data_for_aorai.get_action_bindings kf inner pre_state post_state
      in
      let has_changed, action = 
        compute_actions_invariant action_pre action_step
      in
      changed := !changed || has_changed;
(*      if has_changed then begin
        Format.printf 
         "%s -> %s In loop (init is %a, inner is %a, after is %a):@.\
          Before:@.%aAfter:@.%a"
          pre_state.Promelaast.name post_state.Promelaast.name
          Cil_datatype.Kinstr.pretty init Cil_datatype.Kinstr.pretty inner
          Cil_datatype.Kinstr.pretty last
          print_action_binding action_pre print_action_binding action;
      end;
*)

      Data_for_aorai.set_action_bindings kf last pre_state post_state action
    end
  in
  ignore (Extlib.product merge_one_path state state);
  !changed