let rec replace_vars_in_term (term: term) (func: var -> term -> term) : term =
  match term with
    | Var var ->
        func var term
          
    | Const _ ->
        term
          
    | Func func' ->
        let new_terms =
          Array.map
            (fun term ->
               replace_vars_in_term term func
            )
            func'.subterms
        in
          request_func (func'.symbol, new_terms)