let userdef_fun_signature frame =
    List.fold_left
      (fun s (clabel,env) ->
         match clabel with
           | Clabels.LabelParam label ->
               List.fold_left
                 (fun s (v,(x,_))  -> collect_signature label v x s)
                 s !env
           | _ ->
               Wp_parameters.fatal
                 "Non-logic label in user-defined function or predicate"
      ) ([],[]) !frame