let rec flatten_formals = function
    | [] -> []
    | UF_logic(_,x)::ufs -> x :: flatten_formals ufs
    | UF_closure(x,_,_)::ufs -> x :: flatten_formals ufs
    | UF_references(_,None,refs)::ufs -> flatten_references refs ufs
    | UF_references(_,Some x,refs)::ufs -> x :: flatten_references refs ufs

  and flatten_references refs ufs =
    match refs with
      | [] -> flatten_formals ufs
      | (x,_,_)::refs -> x :: flatten_references refs ufs