let rec init_value_term pool x = function 
    | C_int _      -> F.p_eq x (F.wrap F.i_zero) 
    | C_float _    -> F.p_eq x (F.wrap F.r_zero) 
    | C_pointer te  -> M.equal_loc (M.loc_of_term (object_of te) x) M.null
    | C_array arr ->
        let obj = object_of arr.arr_element in
        begin
          match arr.arr_flat with
            | None -> F.p_true
            | Some f -> 
                let bound = F.e_int64 f.arr_size in 
                InitObjRangeDef.define obj ;
                F.p_app3 (InitObjRange.get_definition obj).d_name x
                  F.i_zero bound
        end
                
    | C_comp cp ->
        begin
          let get_f f =  F.acc_field (F.unwrap x) f in 
          let field_init f = 
            init_value_term pool (get_f f) (object_of f.ftype) 
          in
          List.fold_left (fun p f -> F.p_and p (field_init f)) 
            F.p_true cp.cfields
        end