let get_precond_strategies p =
  debug "[get_precond_strategies] %s@."
    (WpPropId.id_prop_txt p);
  match p with
    | Property.IPPredicate (Property.PKRequires b, kf, Kglobal, _) ->
        let strategies =
          if WpStrategy.is_main_init kf then
              get_strategies NoAssigns kf [b.b_name] None (IdProp p)
          else []
        in
        let call_sites = Kernel_function.find_syntactic_callsites kf in
        let add_call_pre_stategy acc (kf_caller, stmt) =
          let asked = CallPre (stmt, Some p) in
          let strategies = get_strategies NoAssigns kf_caller [] None asked in
            strategies @ acc
        in
          if call_sites = [] then
            (Wp_parameters.warning
              "no direct call sites for '%a': cannot check pre-conditions"
              Kernel_function.pretty kf;
             strategies)
          else List.fold_left add_call_pre_stategy strategies call_sites
    | _ ->
      invalid_arg "[get_precond_strategies] not a function precondition"