let get_logic_funvar mem arity lv ap = 
   let s = "[get_logic_funvar]" in 
   try 
     let x = (Lmap.find lv mem.formals).bref_var in
     debug "%s %a already recorded" s !Ast_printer.d_logic_var lv; x 
   with Not_found ->
     debug "%s %a not yet recorded" s !Ast_printer.d_logic_var lv;
     let t = match lv.lv_type with 
       | Ctype t -> t
       | t -> WpLog.fatal "%s c type of pure logic type %a"
           s !Ast_printer.d_logic_type t
     in
     let typ_logicvar = if ap then array_of t else pointed_of_arity arity t in 
     let obj_logicvar = Ctypes.object_of typ_logicvar in
     let tau_logicvar = tau_of_object obj_logicvar in      
     let var = L.fresh lv.lv_name (Acsl(tau_logicvar,Ctype typ_logicvar)) in
     debug "%s records %a" s F.pp_var var ; 
     let brefparam = {
       bref_var = var ;
       bref_formal = 
         if ap then Faref arity else Fpref arity ;
     } in
     mem.formals <- Lmap.add lv brefparam mem.formals; var