let mk_forward_composition kf pre_ki ki called_func pre_st in_func_st post =
  let new_st,new_tr = mk_empty_pre_or_post_bycase () in
  Array.iteri
    (fun index assocs ->
      let s,t = compose_assocs_post assocs post in
      new_st.(index)<-s;
      new_tr.(index)<-t
    )
    in_func_st;
  update_action_call kf pre_ki ki called_func pre_st (fst post);
  (new_st,new_tr)