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