method vfunc f =
    currentFuncName:=f.svar.vname;
    let kf = Extlib.the self#current_kf in
    assert (!currentFuncName = Kernel_function.get_name kf);
    let starting_pre  = (Data_for_aorai.get_func_pre f.svar.vname) in
    let starting_post = (Data_for_aorai.get_func_post_bycase f.svar.vname) in
    Aorai_option.debug "Before step 1 for function %s:" f.svar.vname;
    Aorai_utils.debug_display_func_status_bycase f.svar.vname;
    Hashtbl.clear labelled_stmts_pre;
    Hashtbl.clear stmts_to_compute_one_more_time;
    (* Pre-condition forward propagation *)
    let cur_pre = 
      Aorai_utils.mk_pre_or_post_bycase_from_pre_or_post
        (Data_for_aorai.get_func_pre f.svar.vname)
    in
    update_actions_call_func kf cur_pre;
    let res = ref (propagates_pre kf Kglobal f.sbody.bstmts cur_pre) in
    while (Hashtbl.length stmts_to_compute_one_more_time) > 0 do
      res:= propagates_pre kf Kglobal f.sbody.bstmts cur_pre
    done;
    (* Registration of the new post-condition *)
    let (ki, cur_post_st, _) = !res in
    let post     = 
      Aorai_utils.get_next_bycase kf Promelaast.Return cur_post_st 
    in
    let old_post = (Data_for_aorai.get_func_post_bycase f.svar.vname)  in
    let post     = double_bool_array_and_bycase post old_post in
    update_actions_return_func kf ki (snd post);
    Data_for_aorai.set_func_post_bycase f.svar.vname post;
    Aorai_option.debug "Between steps 1 and 2 for function %s:" f.svar.vname;
    Aorai_utils.debug_display_func_status_bycase f.svar.vname;
    (* Post-condition backward propagation *)
    (* cur_post : bool array array * bool array array 
       The first index is in term of the function input states *)

    let cur_post = (Data_for_aorai.get_func_post_bycase f.svar.vname) in
    let cur_post = 
      Aorai_utils.get_prev_bycase kf Promelaast.Return cur_post
    in
    Hashtbl.clear labelled_stmts_pre;
    Hashtbl.clear status_of_labelled_stmts;
    Hashtbl.clear old_observed_labelled_stmts_pre;

    second_computation_needed:=false;
    let cur_pre  = ref (propagates_post f.sbody.bstmts cur_post) in

    while !second_computation_needed do
      Hashtbl.clear status_of_labelled_stmts;
      second_computation_needed:=false;
      cur_pre := propagates_post f.sbody.bstmts cur_post
    done;


    (* Registration of the new pre-condition *)
    let cur_pre = pre_flattening !cur_pre in
    let old_pre = Data_for_aorai.get_func_pre f.svar.vname in
    let pre     = double_bool_array_and cur_pre old_pre in

    Data_for_aorai.set_func_pre f.svar.vname pre;

    Aorai_option.debug "After step 2 for function %s" f.svar.vname;
    Aorai_utils.debug_display_func_status_bycase f.svar.vname;


    let merge tbl1 tbl2 get set =
      Hashtbl.iter
        (fun key value ->
           let v1 = double_bool_array_and_bycase value (Hashtbl.find tbl2 key) in
           let v2 = get key in
           if not( double_bool_array_eq_bycase v2 v1 ) then begin
             set key ( double_bool_array_and_bycase v2 v1 );
             spec_modified:=true
           end
        )
        tbl1
    in
    merge loop_fwd_ext_pre loop_bwd_ext_pre Data_for_aorai.get_loop_ext_pre_bycase Data_for_aorai.set_loop_ext_pre_bycase;
    merge loop_fwd_int_pre loop_bwd_int_pre Data_for_aorai.get_loop_int_pre_bycase Data_for_aorai.set_loop_int_pre_bycase;
    merge loop_fwd_int_post loop_bwd_int_post Data_for_aorai.get_loop_int_post_bycase Data_for_aorai.set_loop_int_post_bycase;
(*     merge loop_fwd_real_post loop_bwd_real_post Data_for_aorai.get_loop_real_post_bycase Data_for_aorai.set_loop_real_post_bycase; *)




(*  Format.printf "Apres passe 2       : "; *)
(*  Aorai_utils.debug_display_func_status_bycase f.svar.vname; *)


    let ending_pre  = (Data_for_aorai.get_func_pre f.svar.vname) in
    let ending_post = (Data_for_aorai.get_func_post_bycase f.svar.vname) in

    if   (not (double_bool_array_eq starting_pre  ending_pre ) )
    then begin spec_modified:=true;  end;
    if   (not (double_bool_array_eq_bycase starting_post ending_post) )
    then begin spec_modified:=true;  end;

    DoChildren