let mk_strategy_for_fct_from cfg bhv pre ((out,from) as assign) =
  let n = out.it_id in (* TODO: chose a better num with a user meaning ? *)
  let kf = Cil2cfg.cfg_kf cfg in
  let get_pre () =
    let pre_init = match from with 
      | FromAny -> Wp_parameters.fatal "no from to prove"
      | From inputs -> mk_assign_pre kf Kglobal bhv n inputs 
    in
    let assumes = None in (* assumes are already hyp of the strategy. *)
      WpStrategy.add_prop_fct_pre pre WpStrategy.Ahyp kf bhv ~assumes pre_init
  in
  let annots = get_fct_bhv_from_annots cfg bhv n assign in
  let _ = WpStrategy.add_all_axioms annots in
  let desc =
    Pretty_utils.sfprintf "'%a', %d from property of '%s' behavior"
      Kernel_function.pretty kf n bhv.b_name
  in
  let kind = WpStrategy.SKfroms { 
    WpStrategy.get_pre = get_pre;
    WpStrategy.more_vars = Vars.get_and_init ();
  } in
  let new_loops = Wp_parameters.Invariants.get() in
  let bname = if Cil.is_default_behavior bhv then "default" else bhv.b_name in
  let bname = (bname^"_assign_"^(string_of_int n)) in
    WpStrategy.mk_strategy desc cfg (Some bname)
      new_loops kind annots