let free_vars_of_fml (fml : t_fml) : t_var list = let rec aux (bound_vars : t_var list) (f : t_fml) : t_var list = match f with |PredApp (_, (term_list : t_term list)) -> subtract (vars_of_terms term_list) bound_vars |UnopApp (_, fml1) -> aux bound_vars fml1 |BinopApp (_, fml1, fml2) -> List.concat [aux bound_vars fml1;aux bound_vars fml2] |QuantApp (_, (var : t_var), fml1) -> aux (var::bound_vars) fml1 in aux [] fml