let mk_strategy_for_fct_from cfg bhv pre ((out,from) as assign) =
let n = out.it_id in
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
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