let check_precondition kf state =
  let spec = (Kernel_function.get_spec kf).spec_requires in
  match spec with
  | [] -> state
  | _ ->
      let vc = Logic_const.pands
        (List.map Logic_const.pred_of_id_pred spec)
      in
      let result = eval_predicate (State_set.singleton state) vc in
      Value_parameters.result ~current:true ~once:true "Precondition of %a got status %s."
        Kernel_function.pretty_name kf (string_of_status result) ;
      reduce_by_predicate state true vc