sig
  val fold : (Term.term -> '-> 'a) -> Term.term -> '-> 'a
  val find : (Term.term -> bool) -> Term.term -> Term.term
  val find_opt : (Term.term -> 'a option) -> Term.term -> 'a option
  val exists : (Term.term -> bool) -> Term.term -> bool
  type position = int list
  val subterm_pos : Term.term -> Subterm.position -> Term.term
  val replace : Term.term -> Subterm.position -> Term.term -> Term.term
  val foldi :
    (Term.term -> Subterm.position -> '-> 'a) -> Term.term -> '-> 'a
  val findi :
    (Term.term -> Subterm.position -> bool) ->
    Term.term -> Term.term * Subterm.position
  val find_opti :
    (Term.term -> Subterm.position -> 'a option) ->
    Term.term -> ('a * Subterm.position) option
  val existsi : (Term.term -> Subterm.position -> bool) -> Term.term -> bool
end