let replace_in_bound_terms (subst: subst) (old_term: Term.term) (new_term: Term.term) : subst =
  if Term.term_equal old_term new_term then
    subst
  else
    map
      (fun binding ->
         let new_bound_term =
           Term.replace_term_in_term binding.sb_term.st_term old_term new_term
         in
           if Term.term_equal binding.sb_term.st_term new_bound_term then begin
             binding
           end

           else begin
             { binding with
                 sb_term = {
                   binding.sb_term with
                     st_term = new_bound_term
                 };
             }
           end
      )
      subst