let free_vars ?bound body = match bound with | None -> free_vars body | Some s -> List.fold_left (fun v x -> Vars.remove x v) (free_vars body) s